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

📄 server.cpp

📁 网络围棋对战的服务器端
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	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 + -