📄 server.cpp~
字号:
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 + -