⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.cpp~

📁 本代码是基于LINUX系统下的
💻 CPP~
📖 第 1 页 / 共 2 页
字号:
								newsession->getSockfd(sess_socket);
								k = 0;
								while(k < sesscount)
								{
									Mess = new CEncapsulation(8, p_m->GetUID(), p_m->GetName(), p_m->GetSID());
									s_socket.Send(sess_socket[k], Mess);
									if(sigflag == 1)									{										newsession->deleteid(sess_socket[k]);										sigflag = 0;										}									delete Mess;
									Mess = NULL;									k++;
								}								delete sess_socket;								sess_socket = NULL;								newsession->addUser(p_m->GetUID(), p_m->GetName(), get_Sockfd(UserOnline, p_m->GetUID()));								p_contact = newsession->getUser();								Mess = new CEncapsulation(5, p_m->GetSID(), newsession->getCount()*31, p_contact);								s_socket.Send(get_Sockfd(UserOnline, p_m->GetUID()), Mess);								if(sigflag == 1)								{									newsession->deleteUser(p_m->GetUID());									if(newsession->getCount() < 1)									{										sess_list.deleteSession(p_m->GetSID());										sigflag = 0;									}								}									sesscount = 0;								delete Mess;								Mess = NULL;								delete p_contact;								p_contact = NULL;								newsession = NULL;
							}							else							{								Mess = new CEncapsulation(3, p_m->GetUID(), "OUT", 0);								s_socket.Send(SocketCur->socketid, Mess);								if(sigflag == 1)								{									newsession->deleteUser(SocketCur->userid);									if(newsession->getCount() < 1)									{										sess_list.deleteSession(p_m->GetSID());										sigflag = 0;									}								}											}							delete p_m;
							p_m = NULL;
							break;
						case 9:
							cout<< "a message that "<< SocketCur->userid<< " want to exit a session!"<< endl;							newsession = sess_list.findSession(p_m->GetSID());
							newsession->deleteUser(p_m->GetUID());
							cout<< "the session have "<< newsession->getCount()<< " person!"<< endl;							if(newsession->getCount() < 1)
							{
								cout<< "the session have been deleted"<< endl;								sess_list.deleteSession(p_m->GetSID());
								newsession = NULL;
								delete p_m;								p_m = NULL;							}
							else
							{									cout<< "the person is deleted from this session"<< endl;								sesscount = newsession->getCount();								sess_socket = new(int[sesscount]);
								newsession->getSockfd(sess_socket);
								k = 0;
								while(k < sesscount)
								{
									Mess = new CEncapsulation(9, p_m->GetUID(), p_m->GetName(), p_m->GetSID());
									s_socket.Send(sess_socket[k], Mess);
									if(sigflag == 1)									{										newsession->deleteid(sess_socket[k]);										sigflag = 0;										}									delete Mess;									Mess = NULL;									k++;
								}
								if(newsession->getCount() < 1)								{									sess_list.deleteSession(p_m->GetSID());													}								newsession = NULL;
								delete sess_socket;
								sess_socket = NULL;
								delete p_m;
								p_m = NULL;

							}
							break;
						case 4:
							cout<< "a message to creat a session from "<< p_m->GetUID()<< endl;							sessnum++;
							newsession = new Session(sessnum);
							newsession->addUser(p_m->GetUID(), p_m->GetName(), SocketCur->socketid);							sess_list.addSession(newsession);
							//sess_socket = new(int[newsession->getCount()]);
							//newsession->getSockfd(sess_socket);
							//k = 0;
							//while(k < newsession->getCount())
							//{	
							p_contact = newsession->getUser();							Mess = new CEncapsulation(5, sessnum, 31, p_contact);
							s_socket.Send(SocketCur->socketid, Mess);
							if(sigflag == 1)							{								newsession->deleteUser(SocketCur->userid);								sess_list.deleteSession(sessnum);								tempsocket = SocketCur->socketid;								tempuserid = SocketCur->userid;								SocketDelete(SocketHead, tempsocket);								close(tempsocket);								socknum--;								delete_Online_Node(UserOnline, tempuserid);								tempuserid = -1;								tempsocket = -1;								sigflag = 0;							}							delete Mess;
							Mess = NULL;							delete p_contact;							p_contact = NULL;							//k++;
							//}
							cout<< "the value of k is "<< k<< endl;							newsession = NULL;
							delete sess_socket;
							sess_socket = NULL;
							delete p_m;
							p_m = NULL;
							break;
						case 13:
							newsession = sess_list.findSession(p_m->GetSID());
							sesscount = newsession->getCount();							sess_socket = new(int[sesscount]);
							newsession->getSockfd(sess_socket);
							k = 0;
							//sesscount = newsession->getCount();							while(k < sesscount)
							{
								cout<< "a session message from sid "<< p_m->GetSID()<< " to "<< sess_socket[k]<< endl;								cout<< "the session have "<< sesscount<< " person"<< endl;								Mess = new CEncapsulation(13, p_m->GetSID(), p_m->GetLMCount(), p_m->GetMessage());
								s_socket.Send(sess_socket[k], Mess);
								if(sigflag == 1)								{									newsession->deleteid(sess_socket[k]);									sigflag = 0;								}								delete Mess;								Mess = NULL;								k++;
							}
							if(newsession->getCount() < 1)							{								sess_list.deleteSession(p_m->GetSID());							}							sesscount = 0;							newsession = NULL;
							delete sess_socket;
							sess_socket = NULL;
							delete p_m;
							p_m = NULL;
							break;
						case 12:							cout << "register" << endl;							cout<< "the name: "<< p_m->GetName()<< endl;							cout<< "the password: "<< p_m->GetPWD()<< endl;							MAX = get_Last_UserId(UserManage);							memset(filename, '0', 16);							filename[19] = '\0';							filename[18] = 't';							filename[17] = 'x';							filename[16] = 't';							filename[15] = '.';							devide = MAX+1;							for(k = 14; k >= 0; k--)							{								left = devide%10;								devide = devide/10;								filename[k] = left+48;								}								filefd = creat(filename, 0777);							while(filefd == -1)							{								filefd = creat(filename, 0777);							}									close(filefd);							chmod(filename, 0777);							insert_User_Node(UserManage, MAX+1, p_m->GetName(), p_m->GetPWD());							insert_Contact_Node(MAX+1, MAX+1, p_m->GetName());							Mess = new CEncapsulation(14, MAX+1, p_m->GetPWD(), 0);							s_socket.Send(SocketCur->socketid, Mess);							close(SocketCur->socketid);							SocketDelete(SocketHead, SocketCur->socketid);							socknum--;							delete Mess;							Mess = NULL;							delete p_m;							p_m = NULL;							break;						case 15:							MAX = get_Last_UserId(UserManage);							if((p_m->GetUID() > MAX)||(p_m->GetUID() < 0))							{								Mess = new CEncapsulation(21, 0, 6, "error");									s_socket.Send(SocketCur->socketid, Mess);								if(sigflag == 1)								{									tempsocket = SocketCur->socketid;									tempuserid = SocketCur->userid;									SocketDelete(SocketHead, tempsocket);									close(tempsocket);									socknum--;									delete_Online_Node(UserOnline, tempuserid);									tempsocket = -1;									tempuserid = -1;									sigflag = 0;								}								delete Mess;								Mess = NULL;							}							else							{								p_contact = get_User_name(UserManage, p_m->GetUID());								insert_Contact_Node(SocketCur->userid, p_m->GetUID(), p_contact);								delete p_contact;								p_contact = NULL;								p_contact = get_User_name(UserManage, SocketCur->userid);								insert_Contact_Node(p_m->GetUID(), SocketCur->userid, p_contact);								delete p_contact;								p_contact = NULL;								if(find_Online_In(UserOnline, p_m->GetUID()) != NULL)								{										p_contact = get_User_name(UserManage, p_m->GetUID());									Mess = new CEncapsulation(22, p_m->GetUID(), p_contact, 0);									s_socket.Send(SocketCur->socketid, Mess);									if(sigflag == 1)									{											tempsocket = SocketCur->socketid;										tempuserid = SocketCur->userid;										SocketDelete(SocketHead, tempsocket);										close(tempsocket);										socknum--;										delete_Online_Node(UserOnline, tempuserid);										tempsocket = -1;										tempuserid = -1;										sigflag = 0;									}									delete Mess;									Mess = NULL;									delete p_contact;									p_contact = get_User_name(UserManage, SocketCur->userid);									Mess = new CEncapsulation(22, SocketCur->userid, p_contact, 0);									s_socket.Send(get_Sockfd(UserOnline, p_m->GetUID()), Mess);									if(sigflag == 1)									{										tempsocket = get_Sockfd(UserOnline, p_m->GetUID());										tempuserid = p_m->GetUID();										SocketDelete(SocketHead, tempsocket);										close(tempsocket);										socknum--;										delete_Online_Node(UserOnline, tempuserid);										tempsocket = -1;										tempuserid = -1;										sigflag = 0;									}									delete Mess;									Mess = NULL;									delete p_contact;									p_contact = NULL;								}								else								{									p_contact = get_User_name(UserManage, p_m->GetUID());									Mess = new CEncapsulation(23, p_m->GetUID(), p_contact, 0);									s_socket.Send(SocketCur->socketid, Mess);									if(sigflag == 1)									{										tempsocket = SocketCur->socketid;										tempuserid = SocketCur->userid;										SocketDelete(SocketHead, tempsocket);										close(tempsocket);										socknum--;										delete_Online_Node(UserOnline, tempuserid);										tempsocket = -1;										tempuserid = -1;										sigflag = 0;									}									delete Mess;									Mess = NULL;									delete p_contact;									p_contact = NULL;								}							}							delete p_m;							p_m = NULL;							break;	
						case 16:
							//查看要删除的人是否为其好友,不是就发送11号消息,是就进行删除
							//删除时要两方面都删除
								if(find_Contact_In(SocketCur->userid, p_m->GetUID()) == 1)
								{
									delete_Contact_Node(SocketCur->userid, p_m->GetUID());
									delete_Contact_Node(p_m->GetUID(), SocketCur->userid);
									if(find_Online_In(UserOnline, p_m->GetUID()) != NULL)
									{
										p_contact = get_User_name(UserManage, SocketCur->userid);
										Mess = new CEncapsulation(16, SocketCur->userid, p_contact, 0);
										s_socket.Send(get_Sockfd(UserOnline, p_m->GetUID()), Mess);
										if(sigflag == 1)										{												tempuserid = p_m->GetUID();											tempsocket = get_Sockfd(UserOnline, tempuserid);											SocketDelete(SocketHead, tempsocket);											close(tempsocket);											socknum--;											delete_Online_Node(UserOnline, tempuserid);											tempsocket = -1;											tempuserid = -1;											sigflag = 0;										}											delete Mess;
										Mess = NULL;
										delete p_contact;
										p_contact = NULL;
									}
									p_contact = get_User_name(UserManage, p_m->GetUID());
									Mess = new CEncapsulation(16, p_m->GetUID(), p_contact, 0);
								//	Mess = new CEncapsulation(16, p_m->GetUID(), "SSSS", 0);									s_socket.Send(SocketCur->socketid, Mess);
									if(sigflag == 1)									{										tempsocket = SocketCur->socketid;										tempuserid = SocketCur->userid;										SocketDelete(SocketHead, tempsocket);										close(tempsocket);										socknum--;										delete_Online_Node(UserOnline, tempuserid);										tempsocket = -1;										tempuserid = -1;										sigflag = 0;									}									delete Mess;
									Mess = NULL;
									delete p_contact;
									p_contact = NULL;
								}
								else
								{
									Mess = new CEncapsulation(21, 0, 6, "error");
									s_socket.Send(SocketCur->socketid, Mess);
									if(sigflag == 1)									{										tempsocket = SocketCur->socketid;										tempuserid = SocketCur->userid;										SocketDelete(SocketHead, tempsocket);										close(tempsocket);										socknum--;										delete_Online_Node(UserOnline, tempuserid);										tempsocket = -1;										tempuserid = -1;										sigflag = 0;									}									delete Mess;
									Mess = NULL;
								}
								delete p_m;
								p_m = NULL;
								break;						default:							{goto loop;							break;}					}				}				}				loop1:		SocketCur = SocketTemp;			SocketTemp = NULL;		}
//	delete_List(UserManage);	FD_ZERO(&readfd);	}	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -