資源簡介
使用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()?????????????????break;
????????????in?>>?nextBlockSize;
????????????//????????????sign?=?true;
????????}
????????//消息未讀完
????????if(bytesAvailable()?????????????break;
????????in?>>?msgHead;
????????qDebug()?<“--------------------“?<?????????????????<<“Message?Head:????????“?<????????????????<“SENDER:“?<????????????????<<“RECIVER“?<???????????????<<“MSGTYPE:“?<??????????????<<“--------------------“?<????????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:
??????
- 上一篇:YOLO快速圖像標注工具
- 下一篇:人工智能學習思維導圖
評論
共有 條評論