• 大小: 339KB
    文件类型: .gz
    金币: 1
    下载: 0 次
    发布日期: 2021-06-09
  • 语言: 其他
  • 标签: Qt  IM  

资源简介

使用Qt写的局域网聊天程序。 以GPLv3许可证发布。

资源截图

代码片段和文件信息

#include “clientsocket.h“

#include 
#include 
#include 

ClientSocket::ClientSocket(Database *dba QMap *idToSocketa Qobject *parent) :
    QTcpSocket(parent) nextBlockSize(0) in(this)
{
    //初始化数据库和idsocket映射
    db = dba;
    idToSocket = idToSocketa;
    nextBlockSize = 0;

    in.setVersion(QDataStream::Qt_4_7);

    connect(this SIGNAL(readyRead()) this SLOT(readClient()));
    connect(this SIGNAL(disconnected()) this SLOT(deleteLater()));
}

void ClientSocket::readClient()
{
    //    bool sign = false;
    forever
    {
        //新消息
        if(nextBlockSize == 0)
        {
            if(bytesAvailable() < sizeof(quint16))
                break;
            in >> nextBlockSize;
            //            sign = true;
        }
        //消息未读完
        if(bytesAvailable() < nextBlockSize)
            break;
        in >> msgHead;
        qDebug() << “--------------------“ << endl
                 <<“Message Head:        “ << endl
                << “SENDER:“ << msgHead.sender << endl
                <<“RECIVER“ << msgHead.receiver << endl
               <<“MSGTYPE:“ << resolve(msgHead.msgtype) <              <<“--------------------“ << endl;
        msgProcessor();
        nextBlockSize = 0;
    }
}

QString ClientSocket::resolve(ServerMsgType type)
{
    switch(type)
    {
    case REG_REQ:
        return “REG_REQ“;
        break;
    case CAG_PASSWD:
        return “CAG_PASSWD“;
    case CAG_NICKNAME:
        return “CAG_NICKNAME“;
    case CAG_SIGNATURE:
        return “CAG_SIGNATURE“;
    case LOGIN_REQ:
        return “LOGIN_REQ“;
    case LOGOUT_REQ:
        return “LOGOUT_REQ“;
    case DECADDFRI_REQ:
        return “DECADDFRI_REQ“;
    case DECDELFRI_REQ:
        return “DECDELFRI_REQ“;
    case ANSADDFRI_REQ:
        return “ANSADDFRI_REQ“;
    case REQ_UNREAD:
        return “REQ_UNREAD“;
    case FRILIST_REQ:
        return “FRILIST_REQ“;
    case CONV_MSG:
        return “CONV_MSG“;

    default:
        return “UNKNOWN Message Type!“;
    }
}

void ClientSocket::msgProcessor()
{
    //read Msg Head

    //handle msg
    switch(msgHead.msgtype)
    {
    case REG_REQ:
        handleRegisterMsg();
        break;
    case CAG_PASSWD:
        handleUpdPasswd();
        break;
    case CAG_NICKNAME:
        handleUpdNicknameMsg();
        break;
    case CAG_SIGNATURE:
        handleUpdSignatureMsg();
        break;
    case LOGIN_REQ:
        handleLoginMsg();           //在id-socket映射中加入一个记录
        break;
    case LOGOUT_REQ:                //在id-socket映射中删除一个记录
        handleLogoutMsg();
        break;
    case DECADDFRI_REQ:
        handleAddFriReqMsg();
        break;
    case DECDELFRI_REQ:
        handleDelFriMsg();
        break;
    case ANSADDFRI_REQ:
        handleReplyAddFriReqMsg();
        break;
    case REQ_UNREAD:
        handleQueryUnreadMsg();
        break;
    case FRILIST_REQ:
        handleGetFriListMsg();
        break;
    case CONV_MSG:
      

评论

共有 条评论