void TelepathyHelper::onSendMessageFinished(Tp::PendingOperation *op) { if (op->isError()) { qDebug() << "Error sending message:" << op->errorName() << "-" << op->errorMessage(); emit errorMsg("Error sending message"); return; } Tp::PendingSendMessage *psm = qobject_cast<Tp::PendingSendMessage *>(op); qDebug() << "Message sent, token is" << psm->sentMessageToken(); emit stateMsg("FinishedState"); }
void CPetInventoryGlyph::getTooltip(CPetText *text) { if (text) { text->setText(""); if (_field34 && _item) { int itemIndex = populateItem(_item, 0); if (itemIndex >= 14 && itemIndex <= 18) { CPETObjectStateMsg stateMsg(0); stateMsg.execute(_item); text->setText(CString::format("%s %s", stateMsg._value ? "A hot " : "A cold ", g_vm->_itemDescriptions[itemIndex].c_str() )); } else { text->setText(g_vm->_itemDescriptions[itemIndex]); } } } }
/*处理与客户传输数据的线程*/ void *handleRequest(int *fd) { int sockfd,ret,n; /*声明消息变量*/ Message message; /*声明消息缓冲区*/ char buf[MAX_LINE]; //客户端的套接字地址 struct sockaddr_in cliaddr; socklen_t len; sockfd = *fd; //获取客户的ip地址和端口号 len = sizeof(cliaddr); if(getpeername(sockfd,(struct sockaddr *)&cliaddr,&len) < 0) { perror("getpeername error: "); printf("\n\n"); } while(1){ //接受用户发送的消息 memset(buf,0,MAX_LINE); memset(&message,0,sizeof(message)); n = readn(sockfd,buf,sizeof(message)); if(n == sizeof(message)){ //printf("已经接收了%d字节数据\n",n); //printf("消息类型%d\n",message.msgType); } if(n <= 0) { //关闭当前描述符,向客户端发送FIN fflush(stdout); close(sockfd); *fd = -1; //打印发送者的IP printf("来自%s的断开连接!\n\n",inet_ntoa(cliaddr.sin_addr)); pthread_exit(NULL);//此线程退出 return NULL; } memcpy(&message,buf,sizeof(message)); message.sendAddr = cliaddr; //printf("消息类型%d\n",message.msgType); switch(message.msgType) { case REGISTER:{ printf("\n来自%s注册申请!\n",inet_ntoa(message.sendAddr.sin_addr)); ret = registerUser(&message,sockfd);//交由sqlite3数据库处理 //if(ret == FAILED)break; memset(&message,0,sizeof(message)); message.msgType = RESULT; message.msgRet = ret; printf("%s\n",stateMsg(ret)); strcpy(message.content , stateMsg(ret)); memset(buf,0,MAX_LINE); memcpy(buf,&message,sizeof(message)); /*发送操作结果消息*/ if(writen(sockfd,buf,sizeof(message)) < 0){ perror("send error: "); printf("\n\n"); exit(1); } printf("注册:%s\n", stateMsg(message.msgRet)); break; } case LOGIN:{ User user; printf("来自%s的登录请求!\n",inet_ntoa(message.sendAddr.sin_addr)); ret = loginUser(&message,sockfd,&user);//交由sqlite3数据库处理 //if(ret == FAILED)break;//客户登录界面突然退出 memset(&message,0,sizeof(message)); message.msgType = RESULT; message.msgRet = ret; strcpy(message.content,stateMsg(ret)); memset(buf,0,MAX_LINE); memcpy(buf,&message,sizeof(message)); //发送操作结果消息 if(writen(sockfd,buf,sizeof(message)) < 0){ perror("send error: "); printf("\n\n"); exit(1); } //printf("登录:%s\n",stateMsg(ret)); if(ret == SUCCESS){ //进入服务器聊天模式 ret = enterChat(&sockfd); if(ret == FAILED){//客户enterChat界面突然退出 printf("\033[;31m%s\033[0m退出登录\n",user.userName); userList = deleteNode(userList , &user); printf("来自%s的断开连接!\n\n",inet_ntoa(cliaddr.sin_addr)); pthread_exit(NULL);//此线程退出 return NULL; } } break; } default: printf("unknown operator.\n"); //close(sockfd); break; } } //关闭当前描述符,向客户端发送FIN close(sockfd); *fd = -1; return NULL; }
/*处理客户请求的线程*/ void* handleRequest(int *fd) { int sockfd , ret , n; /*声明消息变量*/ Message message; /*声明消息缓冲区*/ char buf[MAX_LINE]; sockfd = *fd; memset(buf , 0 , MAX_LINE); memset(&message , 0 , sizeof(message)); //接收用户发送的消息 n = recv(sockfd , buf , sizeof(buf)+1 , 0); if(n <= 0) { //关闭当前描述符,并清空描述符数组 fflush(stdout); close(sockfd); *fd = -1; printf("来自%s的退出请求!\n", inet_ntoa(message.sendAddr.sin_addr)); return NULL; }//if else{ memcpy(&message , buf , sizeof(buf)); /*为每个客户操作链接创建一个线程*/ switch(message.msgType) { case REGISTER: { printf("来自%s的注册请求!\n", inet_ntoa(message.sendAddr.sin_addr)); ret = registerUser(&message , sockfd); memset(&message , 0 , sizeof(message)); message.msgType = RESULT; message.msgRet = ret; strcpy(message.content , stateMsg(ret)); memset(buf , 0 , MAX_LINE); memcpy(buf , &message , sizeof(message)); /*发送操作结果消息*/ send(sockfd , buf , sizeof(buf) , 0); printf("注册:%s\n", stateMsg(ret)); close(sockfd); *fd = -1; return NULL; break; }//case case LOGIN: { printf("来自%s的登陆请求!\n", inet_ntoa(message.sendAddr.sin_addr)); ret = loginUser(&message , sockfd); memset(&message , 0 , sizeof(message)); message.msgType = RESULT; message.msgRet = ret; strcpy(message.content , stateMsg(ret)); memset(buf , 0 , MAX_LINE); memcpy(buf , &message , sizeof(message)); /*发送操作结果消息*/ send(sockfd , buf , sizeof(buf) , 0); printf("登录:%s\n", stateMsg(ret)); /*进入服务器处理聊天界面*/ enterChat(&sockfd); break; }//case default: printf("unknown operation.\n"); break; }//switch }//else close(sockfd); *fd = -1; return NULL; }