重庆理工大学课程设计
}
if(D_dlg.DoModal()==IDOK) { }
Quit();
CDialog::OnCancel();
LRESULT CP2PClientDlg::OnSessionHeartbeat(WPARAM wParam, LPARAM lParam) {
IM_Message_Block* blk = (IM_Message_Block*)lParam; if(blk) {
unsigned int nTotalOnlineNum = 0; blk->set_cursor(sizeof(IM_Header)); blk->skip(sizeof(unsigned int));
blk->read_UINT32(&theApp.m_ClientInfo.client_ip); blk->read_UINT16(&theApp.m_ClientInfo.client_port); blk->read_UINT8(&theApp.m_ClientInfo.status); blk->read_UINT32(&nTotalOnlineNum); //如果在线人数有变化,则在即时消息框中显示 if(m_nTotalOnlineNum != nTotalOnlineNum) {
m_nTotalOnlineNum = nTotalOnlineNum; CString strMsg;
char szTemp[MAX_STRING_LEN] = \m_ctrlMsgList.GetWindowText(strMsg); strMsg = strMsg + \当前在线用户总数为:\m_ctrlMsgList.SetWindowText(strMsg); //让编辑框中的滚动条滚动到最底端 POINT pt; //取得滚动范围
CString(itoa(m_nTotalOnlineNum,szTemp,10)) + \
21
重庆理工大学课程设计
}
}
}
m_ctrlMsgList.GetScrollRange(SB_VERT, (LPINT)&pt.x, pt.x = 0;
m_ctrlMsgList.SendMessage(EM_LINESCROLL, pt.x, pt.y);
(LPINT)&pt.y);
delete blk;
//收到第一条心跳信息的回复后才发送上线信息,因为发送上线 //信息的时候需要用到自己的ip,端口等信息 if(!m_bIsLogin) { }
OnSelchangeOnlineStatus(); m_bIsLogin = TRUE;
return 1;
LRESULT CP2PClientDlg::OnContactAdd(WPARAM wParam, LPARAM lParam) {
usr_info_base* uib = (usr_info_base*)wParam;//取出好友详细信息 IM_Message_Block* blk = (IM_Message_Block*)lParam; if(!uib || !blk)
return 0;
blk->set_cursor(sizeof(IM_Header)); unsigned int uid = 0; blk->read_UINT32(&uid);
blk->skip(sizeof(unsigned char));//跳过子命令 unsigned char error_code = 0; blk->read_UINT8(&error_code);
if(error_code == IM_CONTACT_ADD_SUCCESS) {
//添加好友成功,开始添加到界面上 char szTemp[MAX_STRING_LEN] = \int nRows = m_ctrlFriendList.GetItemCount();
22
重庆理工大学课程设计
}
m_ctrlFriendList.InsertItem(nRows,itoa(uib->user_id,szTemp,10)); //用于存储将要在该好友身上发生的聊天记录 vector
m_ctrlFriendList.SetItemText(nRows,3,\现在还没有新消息 CString strTemp;
strTemp.Format(\添加好友%u[%s]成功!\AfxMessageBox(strTemp); m_friend_list.push_back(uib);
else if(error_code == IM_CONTACT_ADD_ERROR) { }
//发送获取该好友在线信息消息 IM_Header header;
header.cmd = IM_GET_ONLINE_INFO; header.id = theApp.m_ClientInfo.uid;
header.seq = CP2PClientApp::create_blk_seq(); header.reserved = 0; //开始构造数据包
IM_Message_Block* send_blk = new IM_Message_Block; send_blk->write_header(header);//构造消息头 send_blk->write_UINT32(uid);
send_blk->src_ip_ = theApp.m_ServerInfo.server_ip;//填充该消息的目的地 send_blk->src_port_ = theApp.m_ServerInfo.server_port; send_blk->length_ = send_blk->get_cursor();//填充消息长度 g_send_msg_queue.push_msg(send_blk);//将消息放入发送消息队列
CString strTemp;
strTemp.Format(\添加好友%u[%s]失败!\AfxMessageBox(strTemp); delete uib; return 0;
23
重庆理工大学课程设计
}
delete blk; return 1;
LRESULT CP2PClientDlg::OnContactAddN(WPARAM wParam, LPARAM lParam) { }
LRESULT CP2PClientDlg::OnContactDel(WPARAM wParam, LPARAM lParam) {
IM_Message_Block* blk = (IM_Message_Block*)lParam; if(!blk)
return 0;
//先读取出删除的好友的uid和错误号 blk->set_cursor(sizeof(IM_Header)); unsigned int uid = 0; unsigned char error_code = 0;
IM_Message_Block* blk = (IM_Message_Block*)lParam; if(!blk)
return 0;
blk->set_cursor(sizeof(IM_Header)); unsigned int uid = 0; blk->read_UINT32(&uid); CString strMsg;
char szTemp[MAX_STRING_LEN] = \m_ctrlMsgList.GetWindowText(strMsg);
strMsg = strMsg + CString(itoa(uid,szTemp,10)) + \加你为好友了!\\r\\n\m_ctrlMsgList.SetWindowText(strMsg); //让编辑框中的滚动条滚动到最底端 POINT pt; //取得滚动范围
m_ctrlMsgList.GetScrollRange(SB_VERT, (LPINT)&pt.x, (LPINT)&pt.y); pt.x = 0;
m_ctrlMsgList.SendMessage(EM_LINESCROLL, pt.x, pt.y); delete blk; return 1;
24
重庆理工大学课程设计
blk->read_UINT32(&uid); blk->read_UINT8(&error_code); CString strTemp;
if(error_code == IM_CONTACT_DEL_SUCCESS) {
//从好友列表中删除
vector
//从在线好友列表中删除
vector
//从界面上删除
int nRows = m_ctrlFriendList.GetItemCount(); CString strValue; for(int i=0; i strValue = m_ctrlFriendList.GetItemText(i,0); if(uid == atoi(strValue.GetBuffer(0))) { //删除跟他的聊天记录 usr_info_online* temp = (usr_info_online*)*it_o; if(temp->user_id == uid) it_o = m_friend_online_list.erase(it_o); it_o++; else usr_info_base* temp = (usr_info_base*)*it_f; if(temp->user_id == uid) it_f = m_friend_list.erase(it_f); it_f++; else 25 百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典综合文库基于winsock的局域网通信系统的开发(5)在线全文阅读。
相关推荐: