返回顶部
首页 > 资讯 > 后端开发 > Python >eva0.4.1源码看看3
  • 499
分享到

eva0.4.1源码看看3

源码 2023-01-31 01:01:56 499人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

#ifndef EVANETWORK_H #define EVANETWORK_H #include <qobject.h> #include <qhostaddress.h> class EvaSocket; c


#ifndef EVANETWORK_H
#define EVANETWORK_H
#include <qobject.h>
#include <qhostaddress.h>
class EvaSocket;
class EvaHttpProxy;
class EvaNetwork : public QObject{
    Q_OBJECT
public:
    enum Type { UDP, tcp, HTTP_Proxy}; //3种方式,可以好好看看http代理,这方面技术没研究过
    enum Event { Init, Connecting, Ready, Failed, None, BytesReadWrong,
            Proxy_None, Proxy_TCP_Ready, Proxy_Connecting, Proxy_Ready,
                Proxy_Need_Auth, Proxy_Read_Error, Proxy_Error  };
    EvaNetwork(const QHostAddress &host, const short port, const Type type = UDP);//默认是udp
    ~EvaNetwork();
     //哦。有server,那么服务器部分的程序,有吗 
    void setServer(const QHostAddress &address, const short port);
    const QHostAddress &getHostAddress() const;  // if it's Http Proxy, return the proxy's address
    const short getHostPort() const;
                                        
    void setDestinationServer(const QString &server, const short port); // for Http Proxy only;
        void setAuthParameter(const QString &username, const QString &passWord);//代理认证?
    void setAuthParameter(const QCString &param);
    void newURLRequest();
    void connect();
                                        
    bool read(char *buf, int len);
    bool write(const char *buf, const int len);
    void setWriteNotifierEnabled(bool enabled);
    void close();
    const Type connectionType() { return type; }
    const QHostAddress getSocketIp();
    const unsigned int getSocketPort();
signals:
    void isReady();
    void dataComming(int);
    void exceptionEvent(int); // all in enum type Event;
    void writeReady();
private:
    EvaSocket *socket; //基本socket
    Type type;
private slots:
    void processProxyEvent(int);
};
#endif

                
#include "evanetwork.h"
#include "evasocket.h"
                
EvaNetwork::EvaNetwork(const QHostAddress &host, const short port, const Type type)
    :socket(NULL)
{
    this->type = type;
    switch(type){
    case UDP:
        socket = new EvaSocket(host, port);  // default is UDP
        QObject::connect(socket, SIGNAL(isReady()), this, SIGNAL(isReady()));//socket--->this
        QObject::connect(socket, SIGNAL(writeReady()), SIGNAL(writeReady()));
        QObject::connect(socket, SIGNAL(receivedData(int)), this, SIGNAL(dataComming(int)));
        QObject::connect(socket, SIGNAL(exceptionEvent(int)), this, SLOT(processProxyEvent(int)));
        break;
    case TCP:
        socket = new EvaSocket(host, port, EvaSocket::TCP);
        QObject::connect(socket, SIGNAL(isReady()), this, SIGNAL(isReady()));
        QObject::connect(socket, SIGNAL(writeReady()), SIGNAL(writeReady()));
        QObject::connect(socket, SIGNAL(receivedData(int)), this, SIGNAL(dataComming(int)));
        QObject::connect(socket, SIGNAL(exceptionEvent(int)), this, SLOT(processProxyEvent(int)));
        break;
    case HTTP_Proxy:
        socket = new EvaHttpProxy(host, port);
        QObject::connect(socket, SIGNAL(proxyWriteReady()), SIGNAL(writeReady()));
        QObject::connect(socket, SIGNAL(proxyEvent(int)), this, SLOT(processProxyEvent(int)));
        QObject::connect(socket, SIGNAL(dataArrived(int)), this, SIGNAL(dataComming(int)));
        QObject::connect(socket, SIGNAL(socketException(int)), this, SIGNAL(exceptionEvent(int)));
        break;
    default:
        socket = new EvaSocket(host, port);  // default is UDP
        break;
    }
}
EvaNetwork::~EvaNetwork()
{
    if(socket) delete socket;
}
                
void EvaNetwork::setServer(const QHostAddress &address, const short port)
{
    socket->setHost(address, port); 
}
const QHostAddress &EvaNetwork::getHostAddress() const
{
    return socket->getHostAddress();
}
const short EvaNetwork::getHostPort() const
{
    return socket->getHostPort();
}
void EvaNetwork::setDestinationServer(const QString &server, const short port) // for Http Proxy only;
{
    if(type != HTTP_Proxy) return;
    //看来在这个类EvaHttpProxy里,实现了http代理,得详细看看
    ((EvaHttpProxy*)(socket))->setDestinationServer(server, port);
}
void EvaNetwork::setAuthParameter(const QString &username, const QString &password)
{
     ((EvaHttpProxy*)(socket))->setAuthParameter(username, password);
}
void EvaNetwork::setAuthParameter(const QCString &param)
{
    ((EvaHttpProxy*)(socket))->setBase64AuthParam(param);
}
void EvaNetwork::newURLRequest()
{
    ((EvaHttpProxy*)(socket))->tcpReady();
}
void EvaNetwork::connect()
{
    socket->startConnecting();
}
bool EvaNetwork::read(char *buf, int len)
{
    return socket->read(buf, len);
}
bool EvaNetwork::write(const char *buf, const int len)
{
    return socket->write(buf, len);
}
//什么东西都是socket实现的,这里只是封装了一下
void EvaNetwork::setWriteNotifierEnabled(bool enabled)
{
    socket->setWriteNotifierEnabled(enabled);
}
void EvaNetwork::processProxyEvent(int num)
{
    if(type != HTTP_Proxy){
        switch(num){
        case EvaSocket::Init:
        case EvaSocket::Connecting:
        case EvaSocket::Ready:
        case EvaSocket::Failed:
        case EvaSocket::None:
        case EvaSocket::BytesReadWrong:
            emit exceptionEvent(num);
            break;
        }
        }else{
            switch(num){
        case EvaHttpProxy::Proxy_None:
        case EvaHttpProxy::Proxy_TCP_Ready:
        case EvaHttpProxy::Proxy_Connecting:
            break;
        case EvaHttpProxy::Proxy_Ready:
            emit isReady();
            break;
        case EvaHttpProxy::Proxy_Need_Auth:
            emit exceptionEvent(Proxy_Need_Auth);
            break;
        case EvaHttpProxy::Proxy_Read_Error:
            emit exceptionEvent(Proxy_Read_Error);
            break;
        case EvaHttpProxy::Proxy_Error:
            emit exceptionEvent(Proxy_Error);
            break;
        }
        }
}
void EvaNetwork::close( )
{
    socket->closeConnection();
}
const QHostAddress EvaNetwork::getSocketIp( )
{
    if(socket) return socket->getSocketAddress();
    return QHostAddress();
}
const unsigned int EvaNetwork::getSocketPort( )
{
    if(socket) return socket->getSocketPort();
    return 0;
}


还是没啥具体实现,还是继续找最底层的socket函

--结束END--

本文标题: eva0.4.1源码看看3

本文链接: https://lsjlt.com/news/183442.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • eva0.4.1源码看看3
    #ifndef EVANETWORK_H #define EVANETWORK_H #include <qobject.h> #include <qhostaddress.h> class EvaSocket; c...
    99+
    2023-01-31
    源码
  • skynet---3---看看
    #ifndef SKYNET_HARBOR_H #define SKYNET_HARBOR_H #include <stdint.h> #include <stdlib.h> #define GLOBALNAME_L...
    99+
    2023-01-31
    skynet
  • python中查看源码
    按住ctrl 再点击要查看的函数。 ...
    99+
    2023-01-31
    源码 python
  • 如何查看html源码
    这篇文章主要介绍了如何查看html源码,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。html是什么html的全称为超文本标记语言,它是一种标记语言,包含了一系列标签.通过这些...
    99+
    2023-06-14
  • Java怎么看Lambda源码
    本文小编为大家详细介绍“Java怎么看Lambda源码”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java怎么看Lambda源码”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1、Demo首先我们来看一个 La...
    99+
    2023-06-30
  • macOS Outlook 查看邮件的源码 HTML源码
    文章目录 一句话Intro系统及软件版本macOS 12.6 M1 chipOutlook 16.67 (22111300) 操作方式邮件正文 demo 一句话 查看Outlook中HTML格式邮件的HTML源代码: ...
    99+
    2023-08-18
    macos outlook view source 查看HTML源码 Windows
  • 怎么从JUC源码看CAS
    本篇内容主要讲解“怎么从JUC源码看CAS”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么从JUC源码看CAS”吧!1.什么是CAS说到CAS,基本上都会想到...
    99+
    2024-04-02
  • HTML怎么查看源代码
    小编给大家分享一下HTML怎么查看源代码,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!     HTML标...
    99+
    2024-04-02
  • vue 依赖如何看源码
    Vue.js 作为一款流行的 JavaScript 框架,其源码虽然内容庞杂,但依然备受开发者的热爱。作为开发者,如果想更好地了解 Vue.js 的内部原理,不仅需要掌握其 API 设计,还要学会如何看 Vue.js 的依赖源码。本文将介绍...
    99+
    2023-05-20
  • 如何查看java源代码
    要查看Java源代码,可以使用以下几种方法: 使用IDE(集成开发环境):常见的Java IDE(Integrated Deve...
    99+
    2024-02-29
    java
  • Kindle 3之看图
    通过下面这个方法喜欢看图片漫画的朋友就可以轻松的在K3上看漫画了,图片效果要比在多看系统里面好很多。 Kindle 3支持jpg,gif和png的图片格式,但并不是把图片文件拷贝到根目录,就可以查看的到。下面来说一下在Kindle 3中查...
    99+
    2023-01-31
    看图 Kindle
  • 怎么看python函数源代码
    在python中使用inspect.getsource函数查看函数源代码,具体方法如下:import inspectdef print_hh():print('hh')source = inspect.getsource(print_hh)...
    99+
    2024-04-02
  • 如何查看exe文件源码
    这篇文章将为大家详细讲解有关如何查看exe文件源码,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。exe文件源码的查看方法:首先下载查看源码的软件,双击文件,打开解压工具;然后选择页面顶部的“file”-“...
    99+
    2023-06-15
  • idea如何查看jar包源码
    要查看 jar 包的源码,你可以按照以下步骤进行操作: 首先,确保你已经安装了 Java Development Kit(JDK)...
    99+
    2023-10-25
    idea jar
  • 懒人查看python源码方法
    想查看python源码又不想费力找源码文件地址,可以通过以下几行代码 简要查看源码. import module_name with open(str(module_name.__file__),"r") as f: prin...
    99+
    2023-01-31
    懒人 源码 方法
  • Android源码在线查看网站
    我们平时开发过程中时不时有这样的需要,需要深入Android源码去分析原理,但是由于各种原因导致没法高效地查看源码,在这里我分享几个网站 1. http://androidxref.com/ 版本:Android 1-9 它使用了openG...
    99+
    2023-08-21
    android
  • java怎么查看注解源码
    要查看Java注解的源码,可以按照以下步骤进行: 打开Java IDE(例如Eclipse、IntelliJ IDEA)。 在项目...
    99+
    2023-10-26
    java
  • idea怎么查看注解源码
    您可以使用下列步骤来查看idea中注解的源码: 首先,在您的项目中找到包含注解的类或方法。 将光标放置在注解上,并按下Ctrl键(...
    99+
    2023-10-26
    idea
  • Android 网络图片查看器与网页源码查看器
    在AndroidManifest.xml里面先添加权限访问网络的权限:<uses-permission android:name="android.permission.INTERNET"/>效果图如下:下面是主要代码:pack...
    99+
    2023-05-31
    android 查看器 roi
  • plsql怎么查看sql源码语句
    在PL/SQL中,您可以使用以下方法来查看SQL源码语句:1. 使用DBMS_OUTPUT.PUT_LINE函数:您可以在PL/SQ...
    99+
    2023-10-11
    plsql sql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作