23,125
社区成员
发帖
与我相关
我的任务
分享
int sendMsg() //鍙戦€佹秷鎭暟鎹墦鍖?
{
CHAT chatData;
PREQ reqData;
char cId[11],msg[141];
int sendState;
memset(&chatData, 0, sizeof(CHAT));
scanf("%s",cId);
chatData.dstID = atoi(cId);
chatData.srcID = clientInfo.ID;
strcpy(chatData.srcNickname, clientInfo.nickname);
scanf("%s",msg);
strcpy(chatData.msg, msg);
chatData.sendTime = time(NULL);
reqData = (PREQ)calloc( sizeof(int)+
sizeof(enum REQTYPE)+sizeof(CHAT), 1);
reqData->length = sizeof(CHAT);
reqData->reqType = chat;
memcpy(reqData->buf, &chatData, sizeof(CHAT));
sendState = write(clientInfo.socket, &reqData, sizeof(int)+
sizeof(enum REQTYPE)+sizeof(CHAT));
//vestigeInfo
DEBUG("length:%d,reqType:%d,msg:%s\n",
(int)(*((int *)reqData)),
(enum REQTYPE)(*((int *)reqData+1)),
((CHAT *)reqData->buf)->msg);
if(sendState == -1)
{
perror("sendMsg:send");
}
else{
DEBUG("sendMsg:send success\n");
}
free(reqData);
}
int packetDeal(int sockfd)
{
REQ reqData;
PCLIENT pclientNode = clientList;
PCLIENT qclientNode = clientList;
memset(&reqData, 0, sizeof(REQ));
int ret = recv(sockfd, &reqData, sizeof(REQ), MSG_PEEK);
if(ret < 0)
{
epoll_ctl(epfd, EPOLL_CTL_DEL, sockfd, NULL);
//vestigeInfo
perror("recv:");
}
if(ret == 0)
{
//1:閾捐〃鍒犻櫎璇ョ敤鎴凤紝2:鍚屾椂epoll鍒犻櫎璇ョ洃鍚?3:鍏抽棴濂楁帴瀛?
//vestigeInfo
DEBUG("绔彛宸茬粡鍏抽棴\n");
epoll_ctl(epfd, EPOLL_CTL_DEL, sockfd, NULL);
clientNum--;
pthread_mutex_lock(&clLock);
while(qclientNode->next != NULL)
{
pclientNode = qclientNode;
qclientNode = qclientNode->next;
if(qclientNode->socket == sockfd)
{
pclientNode->next = qclientNode->next;
free(qclientNode);
break;
}
}
pthread_mutex_unlock(&clLock);
close(sockfd);
return 0;
}
//vestigeInfo
DEBUG("packetDeal %d, sockfd:%d\n",reqData.reqType, sockfd);
switch(reqData.reqType)
{
case regist:
//vestigeInfo
DEBUG("REGIST\n");
regist_func(sockfd);
break;
case login:
//vestigeInfo
DEBUG("LOGIN\n");
login_func(sockfd);
break;
case chat:
//vestigeInfo
DEBUG("CHAT\n");
chat_func(sockfd);
break;
case sendFile:
//vestigeInfo
DEBUG("SENDFILE\n");
sendFile_func(sockfd);
break;
case set:
//vestigeInfo
DEBUG("SET\n");
set_func(sockfd);
break;
}
}
sendState = write(clientInfo.socket, &reqData, sizeof(int)+
sizeof(enum REQTYPE)+sizeof(CHAT));