myTcpSocket::myTcpSocket(qintptr socketDescriptor, QObject *parent) : //构造函数在主线程执行,lambda在子线程
    QTcpSocket(parent),socketID(socketDescriptor)
{
    this->setSocketDescriptor(socketDescriptor);
    cov = new PinYinConvert;
    connect(this,&myTcpSocket::readyRead,
            [&](){
                QTime time;
                time.start();
                QString str(this->readAll());

                QElapsedTimer tm;
                tm.start();
                while(tm.elapsed() < 99)
                {}

                str = cov->convertToPY(str);
                qDebug() <<  time.elapsed();
                this->write(str.toUtf8());
            });
    dis = connect(this,&myTcpSocket::disconnected,
            [&](){
                emit sockDisConnect(socketID,this->peerAddress().toString(),this->peerPort(),QThread::currentThread());//发送断开连接的用户信息
            });

}
void MyTcpServer::sockDisConnectSlot(int handle,const QString & ip, quint16 prot,QThread * th)
{
    myTcpSocket * tcp = tcpClient->value(handle);
    tcpClient->remove(handle);//连接管理中移除断开连接的socket
    ThreadHandle::getClass().removeThread(th); //告诉线程管理类那个线程里的连接断开了
    delete tcp;//释放断开连接的资源
    emit sockDisConnect(handle,ip,prot);
}
ClientSocket::ClientSocket(qintptr socketDescriptor, QObject *parent) : //构造函数在主线程执行,lambda在子线程
    QTcpSocket(parent),socketID(socketDescriptor),userID(-1),lastsize(0),aes(nullptr)
{
    this->setSocketDescriptor(socketDescriptor);

    connect(this,&ClientSocket::readyRead,this,&ClientSocket::clientData);
    connect(this,&ClientSocket::disconnected, [&]() {
        emit sockDisConnect(socketID,this->peerAddress().toString(),this->peerPort(),QThread::currentThread());//发送断开连接的用户信息
        this->deleteLater();
    });

}
Exemple #4
0
TcpSocket::TcpSocket(qintptr socketDescriptor, QObject *parent) : //构造函数在主线程执行,lambda在子线程
    QTcpSocket(parent),
    socketID(socketDescriptor) {

    this->setSocketDescriptor(socketDescriptor);
    connect(this,&TcpSocket::readyRead,this,&TcpSocket::readData);
    dis = connect(this,&TcpSocket::disconnected,[&](){
        emit sockDisConnect(socketID,this->peerAddress().toString(),this->peerPort(),QThread::currentThread());//发送断开连接的用户信息
        this->deleteLater();
    });
    connect(&watcher,&QFutureWatcher<QByteArray>::finished,this,&TcpSocket::startNext);
    connect(&watcher,&QFutureWatcher<QByteArray>::canceled,this,&TcpSocket::startNext);
}
void TcpServer::sockDisConnectSlot(int handle,const QString & ip, quint16 prot,QThread * th)
{
    tcpClient->remove(handle);//连接管理中移除断开连接的socket
    ThreadHandle::getClass().removeThread(th); //告诉线程管理类那个线程里的连接断开了
    emit sockDisConnect(handle,ip,prot);
}