📄 server.cpp
字号:
pMsg[i]=0;
TempPlayer->m_PlayerName=pMsg+12;
TempPlayer->m_PassWord=pMsg+i+1;
TempPlayer->m_Level=1;
TempPlayer->m_Score=0;
//判断是否此用户已经存在
POSITION p=m_PlayerList.GetHeadPosition();
CPlayer* TempPlayer1;
int n=m_PlayerList.GetCount();
for(i=0;i<n;i++)
{
TempPlayer1=(CPlayer*)m_PlayerList.GetNext(p);
if(TempPlayer1->m_PlayerName==TempPlayer->m_PlayerName)
{
delete TempPlayer;
SendMsg(pClientSocket,_T("__NEWFAIL_"));
return;
}
}
pClientSocket->m_pPlayer=TempPlayer;
m_PlayerList.AddTail(TempPlayer);
CString Msg=_T("__LOGINOK_ 0");
SendMsg(pClientSocket,Msg);
m_NumOfClient++;
m_NumOfReg++;
m_LogInList.AddTail(pClientSocket);
m_pDlg->m_ClientNum=m_NumOfClient;
m_pDlg->m_RegNum=m_NumOfReg;
m_pDlg->UpdateData(FALSE);
m_pDlg->FlashPlayer();
}
void CServer::CreateMsg(CClientSocket *pClientSocket, PTSTR pMsg)
{
CString GameName=pMsg+12;
//判断是否此游戏已存在
POSITION p=m_GameList.GetHeadPosition();
POSITION p1;
int n=m_GameList.GetCount();
CGame* TempGame;
for(int i=0;i<n;i++)
{
p1=p;
TempGame=(CGame*)m_GameList.GetNext(p);
if(TempGame->m_GameName==GameName)
{
SendMsg(pClientSocket,_T("CREATEFAIL"));
return;
}
if(TempGame->m_pHost==pClientSocket)
{
m_GameList.RemoveAt(p1);
m_NumOfGame--;
delete TempGame;
break;
}
}
TempGame=new CGame;
TempGame->m_GameName=pMsg+12;
TempGame->m_pHost=pClientSocket;
m_GameList.AddTail(TempGame);
CString Msg=_T("_CREATEOK_ ");
Msg+=pMsg+12;
SendMsg(pClientSocket,Msg);
pClientSocket->m_InGame=TRUE;
pClientSocket->m_pGame=TempGame;
m_NumOfGame++;
m_pDlg->m_GameNum=m_NumOfGame;
m_pDlg->FlashGame();
m_pDlg->UpdateData(FALSE);
}
void CServer::JoinMsg(CClientSocket *pClientSocket, PTSTR pMsg)
{
CString GameName=pMsg+12;
//寻找所要加入的游戏
POSITION p=m_GameList.GetHeadPosition();
int n=m_GameList.GetCount();
CGame* TempGame;
for(int i=0;i<n;i++)
{
TempGame=(CGame*)m_GameList.GetNext(p);
if(TempGame->m_GameName==GameName) //找到
{
if(TempGame->m_pClient==NULL)
{
//给Client发消息
TCHAR Buf[10];
TempGame->m_pClient=pClientSocket;
pClientSocket->m_pGame=TempGame;
pClientSocket->m_InGame=TRUE;
pClientSocket->m_pOpponent=TempGame->m_pHost;
CString Msg=_T("JOINGAMEOK ");
Msg+=TempGame->m_GameName;
Msg+=_T(' ');
Msg+=TempGame->m_pHost->m_pPlayer->m_PlayerName;
Msg+=_T(' ');
itoa(TempGame->m_pHost->m_pPlayer->m_Level,Buf,10);
Msg+=Buf;
Msg+=_T(' ');
itoa(TempGame->m_pHost->m_pPlayer->m_Score,Buf,10);
Msg+=Buf;
SendMsg(pClientSocket,Msg);
//给Host发消息
TempGame->m_pHost->m_pOpponent=pClientSocket;
Msg=_T("__ONEJOIN_ ");
Msg+=pClientSocket->m_pPlayer->m_PlayerName;
Msg+=_T(' ');
itoa(pClientSocket->m_pPlayer->m_Level,Buf,10);
Msg+=Buf;
Msg+=_T(' ');
itoa(pClientSocket->m_pPlayer->m_Score,Buf,10);
Msg+=Buf;
SendMsg(TempGame->m_pHost,Msg);
return;
}
}
}
SendMsg(pClientSocket,_T("_JOINFAIL_"));
}
void CServer::ListGameMsg(CClientSocket *pClientSocket, PTSTR pMsg)
{
CString Msg=_T("RELISTGAME ");
//查寻游戏列表
POSITION p=m_GameList.GetHeadPosition();
int n=m_GameList.GetCount();
CGame* TempGame;
for(int i=0;i<n;i++)
{
TempGame=(CGame*)m_GameList.GetNext(p);
Msg+=TempGame->m_GameName;
Msg+=_T(' ');
}
SendMsg(pClientSocket,Msg);
}
void CServer::TopTenMsg(CClientSocket *pClientSocket, PTSTR pMsg)
{
CString Msg=_T("_RETOPTEN_ ");
POSITION p=m_Top10List.GetHeadPosition();
int n=m_Top10List.GetCount();
CPlayer* TempPlayer;
TCHAR Buf[10];
for(int i=0;i<n;i++)
{
TempPlayer=(CPlayer*)m_Top10List.GetNext(p);
itoa(TempPlayer->m_Level,Buf,10);
Msg=TempPlayer->m_PlayerName;
Msg+=_T("--等级:");
Msg+=Buf;
Msg+=_T(' ');
}
SendMsg(pClientSocket,Msg);
}
void CServer::ExitGameMsg(CClientSocket *pClientSocket, PTSTR pMsg)
{
CString GameName=pMsg+12;
//寻找所要退出的游戏
POSITION p=m_GameList.GetHeadPosition();
POSITION p1;
int n=m_GameList.GetCount();
CGame* TempGame;
for(int i=0;i<n;i++)
{
p1=p;
TempGame=(CGame*)m_GameList.GetNext(p);
if(TempGame->m_GameName==GameName) //找到
{
if(TempGame->m_pHost==pClientSocket) //Host退出
{
if(TempGame->m_pClient!=NULL)
{
TempGame->m_pClient->m_pOpponent=NULL;
TempGame->m_pClient->m_InGame=NULL;
TempGame->m_pClient->m_pGame=NULL;
if(TempGame->m_pClient->m_GameStart)
{
TempGame->m_pClient->m_GameStart=FALSE;
SendMsg(TempGame->m_pClient,_T("__HESURR__"));
}
else
SendMsg(TempGame->m_pClient,_T("_HOSTEXIT_"));
}
pClientSocket->m_GameStart=FALSE;
pClientSocket->m_InGame=FALSE;
pClientSocket->m_pGame=NULL;
pClientSocket->m_pOpponent=NULL;
SendMsg(TempGame->m_pHost,_T("EXITGAMEOK"));
m_GameList.RemoveAt(p1); //删除游戏
delete TempGame;
m_NumOfGame--;
m_pDlg->m_GameNum=m_NumOfGame;
m_pDlg->FlashGame();
m_pDlg->UpdateData(FALSE);
return;
}
if(TempGame->m_pClient==pClientSocket) //Client退出
{
pClientSocket->m_pOpponent=NULL;
pClientSocket->m_InGame=FALSE;
pClientSocket->m_pGame=NULL;
TempGame->m_pHost->m_pOpponent=NULL;
TempGame->m_pHost->m_GameStart=FALSE;
TempGame->m_pClient=NULL;
SendMsg(pClientSocket,_T("EXITGAMEOK"));
if(pClientSocket->m_GameStart)
{
pClientSocket->m_GameStart=FALSE;
TempGame->m_pHost->m_pGame=NULL;
TempGame->m_pHost->m_InGame=FALSE;
SendMsg(TempGame->m_pHost,_T("__HESURR__"));
m_GameList.RemoveAt(p1); //删除游戏
delete TempGame;
m_NumOfGame--;
m_pDlg->m_GameNum=m_NumOfGame;
m_pDlg->FlashGame();
m_pDlg->UpdateData(FALSE);
}
else
SendMsg(TempGame->m_pHost,_T("CLIENTEXIT"));
return;
}
}
}
}
void CServer::ChatMsg(CClientSocket *pClientSocket, PTSTR pMsg)
{
CString Msg=_T("_RECHATMSG ");
Msg+=pClientSocket->m_pPlayer->m_PlayerName;
Msg+=_T(":");
Msg+=pMsg+12;
SendMsg(pClientSocket->m_pOpponent,Msg);
}
void CServer::QuitGameMsg(CClientSocket *pClientSocket, PTSTR pMsg)
{
CString GameName=pMsg+12;
//寻找所要退出的游戏
POSITION p=m_GameList.GetHeadPosition();
POSITION p1;
int n=m_GameList.GetCount();
CGame* TempGame;
for(int i=0;i<n;i++)
{
p1=p;
TempGame=(CGame*)m_GameList.GetNext(p);
if(TempGame->m_GameName==GameName) //找到
{
if(TempGame->m_pHost==pClientSocket) //Host退出
{
if(TempGame->m_pClient!=NULL)
{
TempGame->m_pClient->m_pOpponent=NULL;
TempGame->m_pClient->m_pGame=NULL;
TempGame->m_pClient->m_InGame=FALSE;
if(TempGame->m_pClient->m_GameStart)
{
TempGame->m_pClient->m_GameStart=FALSE;
SendMsg(TempGame->m_pClient,_T("__HESURR__"));
}
else
SendMsg(TempGame->m_pClient,_T("_HOSTEXIT_"));
}
PlayerQuit(pClientSocket);
m_GameList.RemoveAt(p1); //删除游戏
delete TempGame;
m_NumOfGame--;
m_pDlg->m_GameNum=m_NumOfGame;
m_pDlg->FlashGame();
m_pDlg->UpdateData(FALSE);
return;
}
if(TempGame->m_pClient==pClientSocket) //Client退出
{
TempGame->m_pHost->m_pOpponent=NULL;
TempGame->m_pClient=NULL;
if(pClientSocket->m_GameStart)
{
TempGame->m_pHost->m_pGame=NULL;
TempGame->m_pHost->m_InGame=FALSE;
TempGame->m_pHost->m_GameStart=FALSE;
SendMsg(TempGame->m_pHost,_T("__HESURR__"));
m_GameList.RemoveAt(p1); //删除游戏
delete TempGame;
m_NumOfGame--;
m_pDlg->m_GameNum=m_NumOfGame;
m_pDlg->FlashGame();
m_pDlg->UpdateData(FALSE);
}
else
SendMsg(TempGame->m_pHost,_T("CLIENTEXIT"));
PlayerQuit(pClientSocket);
return;
}
}
}
}
void CServer::PlaceMsg(CClientSocket *pClientSocket, PTSTR pMsg)
{
pClientSocket->m_GameStart=TRUE;
pMsg[17]=0;
CString Msg=_T("__REPLACE_ ");
Msg+=pMsg+12;
if(pClientSocket->m_pOpponent!=NULL)
{
pClientSocket->m_pOpponent->m_GameStart=TRUE;
SendMsg(pClientSocket->m_pOpponent,Msg);
}
else
{
pClientSocket->m_GameStart=FALSE;
SendMsg(pClientSocket,_T("__HESURR__"));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -