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

📄 cmclientsocket.cpp

📁 Soul的源代码,类似于劲舞团之类的游戏
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			//WSAEWOULDBLOCK 捞搁 促矫 扁笛妨具 茄促.
			::Sleep(1);
			break;
		}

		m_pUnSendData->DeletePop();
	}

	return TRUE;
}

void CMClientSocket::StopThread()
{
	m_stThreadLoop = false;
	SetEvent(m_hEvent[1]);
}

DWORD CMClientSocket::EventSocketRunner(LPVOID parameter )
{

	CMClientSocket* pSockThread = (CMClientSocket *)parameter;

	pSockThread->run();
	return 0;

}
void CMClientSocket::run()
{
	WSANETWORKEVENTS events;
	DWORD dwRet;
	int count = 0;

	int nError;
	char	cFrom = 1;
	unsigned short sID = 0;
	unsigned short sMsgType = 0;

	m_stThreadLoop = true;
	//connect 啊瓷窍促.
	m_IsStart = TRUE;
	while(m_stThreadLoop == true )
	{
		dwRet = WSAWaitForMultipleEvents(2,
									 m_hEvent,
									 FALSE,
									 WSA_INFINITE,
									 FALSE);
		if(dwRet == WSA_WAIT_FAILED)
		{
			nError = WSAGetLastError();
			CMSingleton<CMDebug>::getInstance()->output("%s(%d)run() Error (%d)",__FILE__,__LINE__,nError);
		}
		else if( dwRet == WSA_WAIT_EVENT_0)
		{
			WSAResetEvent( m_hEvent[0]);
		}
		else if( dwRet == WSA_WAIT_EVENT_0+1)
		{
			break;
		}


		int nRet = WSAEnumNetworkEvents(m_hConnectSocket,
								 m_hEvent[0],
								 &events);

		if (nRet == SOCKET_ERROR)
		{
			nError = WSAGetLastError() ;
			CMSingleton<CMDebug>::getInstance()->output("%s(%d)run() Error (%d)",__FILE__,__LINE__,nError);
			break;
		}

		if((events.lNetworkEvents & FD_READ) == FD_READ)//佬绢柯 单捞鸥啊 乐促
		{
			int iRet = -1;

			iRet = _iOnRead(&sID,&sMsgType);

			if(iRet == DEF_READCOMPLETE)	//	茄俺狼 菩哦阑 己傍利栏肺 罐菌促.
			{
				//府矫宏钮俊 单捞鸥甫 笼绢 持绢霖促.
				if(m_pQueue == NULL)
				{
					CMSingleton<CMDebug>::getInstance()->output("%s(%d)m_pQueue == NULL(橇肺弊伐 辆丰矫 秦力 啊瓷己.)",__FILE__,__LINE__);
					return ;
				}
				m_pQueue->Push(NULL
					, m_pRcvBuffer			// 佬篮 单捞鸥 第肺 器牢磐 捞悼.
					,m_dwCompleteReadSize,NULL);
				//m_pQueue->PackPush(m_hConnectSocket
				//	, m_pRcvBuffer			// 佬篮 单捞鸥 第肺 器牢磐 捞悼.
				//	,m_dwCompleteReadSize,m_dwID);
			}
			else if(iRet == DEF_SOCKETCLOSED)	//家南捞 摧躯促.
			{
			}
			else if(iRet == DEF_ONREAD)			//recv 单捞鸥甫 傈何 佬瘤 给沁促.
			{
			}
			else if(iRet == DEF_SOCKETERROR)	//家南俊矾.
			{
				nError = WSAGetLastError() ;
				CMSingleton<CMDebug>::getInstance()->output("%s(%d)Recv Error (%d)",__FILE__,__LINE__,nError);
			}
			else if(iRet == DEF_CMSOCKSTATUS_DECODE_ERR)
			{
				m_pQueue->Push(NULL
					, "recv err"			// 佬篮 单捞鸥 第肺 器牢磐 捞悼.
					,8,NULL);
			}
			else
			{
				//else if(iRet == DEF_BLOCK)
				//else if(iRet == DEF_MSGSIZETOOLARGE)
			}
		}
		else if (events.lNetworkEvents & FD_CONNECT)
		{
			if (events.iErrorCode[FD_CONNECT_BIT] == 0)
			{
				//辑滚客 connect登菌促.
				m_sSockState = DEF_CONNECTED;
				m_dwID = m_dwRandomID;
				m_dwRandomID++;
			}
			else if (events.iErrorCode[FD_CONNECT_BIT] == WSAECONNREFUSED)
			{
				//辑滚俊辑 立加阑 芭何 窍看促.
				m_sSockState = DEF_REJECTCONNECT;
			}
			else
			{
				nError = WSAGetLastError() ;
				CMSingleton<CMDebug>::getInstance()->output("%s(%d)Unknown network event error (%d)",__FILE__,__LINE__,events.iErrorCode[FD_CONNECT_BIT]);
				break;
			}
		}
		
		if((events.lNetworkEvents & FD_WRITE) == FD_WRITE)
		{
			
		}
		
		//困俊 if巩苞 蝶肺 贸府 茄促.  府矫宏 皋技瘤客 努肺令啊 鞍捞 甸绢 坷绰版快啊 乐促.
		if((events.lNetworkEvents & FD_CLOSE) == FD_CLOSE)//辑滚啊 摧躯促..
		{
			memset(m_pRcvBuffer,0,sizeof(m_pRcvBuffer) );
			m_sSockState = DEF_CLOSED;
			m_pQueue->Push(NULL
				, m_pRcvBuffer			// 佬篮 单捞鸥 第肺 器牢磐 捞悼.
				,0,NULL);
			printf("Server Closed!!");
			break;
		}
	} // while....

	
}

//-------------------------------------------------------------------------------------------------------
//	Name		 :: BOOL _iOnRead()
//	Create Date	 :: 2004/01/07
//	Description	 :: RECV窍绊 单捞鸥甫 罐绰何盒.
//	param		 ::	
//	Return Value :: BOOL(int) 屈 : SOCKET 俊矾 鸥涝.
//	Bug	Report	 ::
//-------------------------------------------------------------------------------------------------------
BOOL CMClientSocket::_iOnRead(unsigned short *sId,unsigned short *sGameType)
{
	int iRet, WSAErr;
	short  * sp;
	//unsigned short sID;
	//unsigned short sMsgType = 0;
	unsigned short sDataSize = 0;
	unsigned short sReplayID = 0;

	if (m_cStatus == DEF_CMSOCKSTATUS_READINGHEADER) {
		
		iRet = recv(m_hConnectSocket, (char *)(m_pRcvBuffer + m_dwTotalReadSize), m_dwReadSize, 0);	
		
		if (iRet == SOCKET_ERROR) {
			WSAErr = WSAGetLastError();
			if (WSAErr != WSAEWOULDBLOCK) {
				m_WSAErr = WSAErr;
				return DEF_SOCKETERROR;
			}
			else return DEF_BLOCK;
		}
		else 
		if (iRet == 0) {
			// 家南捞 摧躯促. 
//			m_cType = DEF_XSOCK_SHUTDOWNEDSOCK;
			return DEF_SOCKETCLOSED;
		}
		
		m_dwReadSize      -= iRet;
		m_dwTotalReadSize += iRet;
		
		if (m_dwReadSize == 0) {
			// 庆歹甫 促 佬菌促. 
			m_cStatus = DEF_CMSOCKSTATUS_READINGBODY;
			// 佬绢具 且 个眉 荤捞令甫 拌魂茄促.

			//	庆歹 菩哦 盒籍.
			if(FALSE == m_pEditPacket->PackDecode(m_pRcvBuffer))		//庆歹 菩哦捞 鞠龋拳 登绢 乐栏搁 钱绢霖促.
			{
				//	菩哦 庆歹啊 力措肺 救登菌促.
				//	碍力 立加 辆丰.
				//					DoClose(OV,true);
				CMSingleton<CMDebug>::getInstance()->output("%s(%d)秦欧 啊瓷己 丑饶.!!!(%d)(recv Size :: %d(%d))",__FILE__,__LINE__,m_hConnectSocket,m_dwReadSize,m_dwTotalReadSize);
				return	DEF_CMSOCKSTATUS_DECODE_ERR;	
			}

			m_pEditPacket->GetHeaderInfo(m_pRcvBuffer,sId,sGameType,&sDataSize,&sReplayID);

//			sp = (short *)((char*)m_pRcvBuffer + HEAD_SIZE_POISTION);
			//m_dwReadSize = (int)*sp; // 庆歹 荤捞令绰 器窃窍瘤 臼绰促. 
			
			m_dwReadSize = (int )sDataSize;
			if (m_dwReadSize == 0) {
				// 个眉 荤捞令啊 0捞搁 个眉何盒阑 佬阑 鞘夸啊 绝栏骨肺 
				m_cStatus        = DEF_CMSOCKSTATUS_READINGHEADER;
				m_dwReadSize      = PACKETHEADERSIZE;
				m_dwCompleteReadSize = m_dwTotalReadSize;
				m_dwTotalReadSize = 0;
				return DEF_READCOMPLETE;
			}
			else 
			if (m_dwReadSize > m_dwBufferSize) {
				m_cStatus         = DEF_CMSOCKSTATUS_READINGHEADER;
				m_dwReadSize      = PACKETHEADERSIZE;
				m_dwTotalReadSize = 0;
				return DEF_MSGSIZETOOLARGE;
			}
		}
		return DEF_ONREAD;
	}
	else
	if (m_cStatus == DEF_CMSOCKSTATUS_READINGBODY) {
		
		iRet = recv(m_hConnectSocket, (char *)(m_pRcvBuffer + m_dwTotalReadSize), m_dwReadSize, 0);
		
		if (iRet == SOCKET_ERROR) {
			WSAErr = WSAGetLastError();
			if (WSAErr != WSAEWOULDBLOCK) {
				m_WSAErr = WSAErr;
				return DEF_SOCKETERROR;
			}
			else return DEF_BLOCK;
		}
		else 
		if (iRet == 0) {
			// 家南捞 摧躯促. 
//			m_cType = DEF_XSOCK_SHUTDOWNEDSOCK;
			return DEF_SOCKETCLOSED;
		}

		m_dwReadSize      -= iRet;
		m_dwTotalReadSize += iRet;
		
		if (m_dwReadSize == 0) {
			// 个眉甫 促 佬菌促. 促澜锅 捞亥飘甫 困秦 惑怕甫 官槽促. 
			m_cStatus        = DEF_CMSOCKSTATUS_READINGHEADER;
			m_dwReadSize     = PACKETHEADERSIZE;
			m_dwCompleteReadSize = m_dwTotalReadSize;
			m_dwTotalReadSize = 0;
		}
		else return DEF_ONREAD;
	}

	// 皋矫瘤甫 葛滴 佬菌促. 捞 皋矫瘤甫 罐栏搁 努贰胶 滚欺狼 郴侩阑 佬绢 溜阿 贸府秦具 茄促.
	return DEF_READCOMPLETE;

}

//-------------------------------------------------------------------------------------------------------
//	Name		 :: int GetConnectInfo()
//	Create Date	 :: 2004/01/09
//	Description	 :: 楷搬 沥焊甫 掘绢 辰促.
//	param		 ::	
//	Return Value :: int 屈 : 
//				DEF_NOCMD = 0x00,		//	扁夯 惑怕.
//				DEF_CONNECTING,			//	楷搬矫档吝.
//				DEF_CONNECTED,			//	楷搬 己傍.
//				DEF_REJECTCONNECT		//	辑滚俊辑 楷搬 芭何 (盔拜 哪腔磐啊 救难廉 乐促.
//	Bug	Report	 ::
//-------------------------------------------------------------------------------------------------------
int CMClientSocket::GetConnectInfo()
{
	return m_sSockState;
}

⌨️ 快捷键说明

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