亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cudpsocket.cpp

?? 韓國英雄王座倒閉后流出來部分源代碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
////////////////////////////////////////////////////////////////////////////////////////
//	CUDPSOCKET_CPP   2003斥 6巋 26老 格
//
//	by Mun Sung-hun (badajoa2002@hotmail.net)
//	Copyright(C) 2003
//
//
//
////////////////////////////////////////////////////////////////////////////////////////
#include "StdAfx.h"
#include "MapServerSocket.h"
#include "CUdpSocket.h"
#include "tgaBase.h"

#include "ServerMem.h"
#include "Party.h"


////////////////////////////////////////////////////////////////////////////////////////
//	Global Class or Value
////////////////////////////////////////////////////////////////////////////////////////
extern	Map				*g_pMap;
extern	ServerMem		*g_pServerMem;	
extern	MapServerSocket	*g_pServer;

ONUDPTRANSFUNC OnTransFunc[DEF_MAXCONTROLPACKET] ;

////////////////////////////////////////////////////////////////////////////////////////
//	UDP Listen Thread
//
////////////////////////////////////////////////////////////////////////////////////////
DWORD WINAPI CUdpSocket::ListenThreadRunner(LPVOID parameter)
{
	CUdpSocket * lpthread = static_cast < CUdpSocket * > (parameter);

	lpthread->ListenThreadProc();

	return 0;
}

////////////////////////////////////////////////////////////////////////////////////////
//	UDP Read Thread
//
////////////////////////////////////////////////////////////////////////////////////////
DWORD WINAPI CUdpSocket::ReadThreadRunner(LPVOID parameter)
{
	CUdpSocket * lpthread = static_cast < CUdpSocket * > (parameter);

	lpthread->ReadThreadProc();

	return 0;
}

////////////////////////////////////////////////////////////////////////////////////////
//
//
////////////////////////////////////////////////////////////////////////////////////////
CUdpSocket::CUdpSocket()
{
	m_lpRecvBuf = new char [sizeof(_UDPPACKET)+1] ;
	m_lpSendBuf = new char [sizeof(_UDPPACKET)+1] ;
	m_lpLogBuf  = new char [sizeof(_UDPPACKET)+1] ;

	::InitializeCriticalSectionAndSpinCount(&m_LogLock	, 2000 );

}

CUdpSocket::~CUdpSocket()
{
	
	bSendTo(_Module.m_szUdpIP, _Module.m_nMapPORT);
	
	WaitForSingleObject ( m_hUdpThreadEndEvent, INFINITE );

	SetEvent(m_hReadEventCompleted);

	CLOSEEVENT(m_hReadEventCompleted);

	CLOSESOCKET(m_SendSock);
	CLOSESOCKET(m_ListenSock);

	m_listReadCompleted.RemoveAll();

	SAFE_DELETE< CMemPool<_UDPPACKET> > (&m_pUDPIOPool) ;
	SAFE_DELETE< char > (&m_lpRecvBuf) ;
	
	SAFE_DELETE< char > (&m_lpSendBuf) ;
	SAFE_DELETE< char > (&m_lpLogBuf) ;

	::DeleteCriticalSection(&m_LogLock);
}

////////////////////////////////////////////////////////////////////////////////////////
//	輯滾甫 輛豐竅扁 困秦輯父 葷儈
//
////////////////////////////////////////////////////////////////////////////////////////
bool CUdpSocket::bSendTo(char * pIPAddr,int iPort)
{
	m_SendAddr.sin_port = htons(iPort);    

	if (NULL == pIPAddr)
	{
		m_SendAddr.sin_addr.s_addr =  ::htons(INADDR_ANY) ; 
	}
	else 
	{
		m_SendAddr.sin_addr.s_addr =  inet_addr(pIPAddr);
	}
   
	memset(m_lpSendBuf,0x0,sizeof(_UDPPACKET)) ;

	if ((m_nSendByte = sendto(m_SendSock, m_lpSendBuf, sizeof(_UDPPACKET), 0, 
	   (SOCKADDR *)&m_SendAddr, sizeof(m_SendAddr))) == SOCKET_ERROR)
	{
		wsprintf(m_cMsg,"ERROR: sendto failed with error %d\n", WSAGetLastError());
		OutputDebugString(m_cMsg);

		return false;
	}
     
	return true ;
}


////////////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////////////
void CUdpSocket::ListenThreadProc()
{

	SOCKADDR_IN          SenderAddr;
	int                  SenderAddrSize = sizeof(SenderAddr);
	_LPUDPPACKET  cTmpIO ;

	while( _Module.m_bService)
	{

		if ((m_nRecvByte =  recvfrom(m_ListenSock, m_lpRecvBuf, sizeof(_UDPPACKET), 0,
		   (SOCKADDR *)&SenderAddr, &SenderAddrSize)) == SOCKET_ERROR)
		{
			wsprintf(m_cMsg,"ERROR: recvfrom failed with error %d\n", WSAGetLastError());
			OutputDebugString(m_cMsg);
		}
		
		if( !_Module.m_bService )	break;				//	橇肺弊伐 輛豐

		cTmpIO = m_pUDPIOPool->Alloc() ;

		memcpy(cTmpIO,m_lpRecvBuf,sizeof(_UDPPACKET)) ;

		m_listReadCompleted.AddTail( cTmpIO );

		SetEvent( m_hReadEventCompleted );
	}

	SetEvent(m_hUdpThreadEndEvent);

	return ;
}

////////////////////////////////////////////////////////////////////////////////////////
//	Thread Start
//
////////////////////////////////////////////////////////////////////////////////////////
bool CUdpSocket::bStartThread()
{
	//	TODO: Add your control notification handler code here
	int             i = 0;
	DWORD           ThreadID;
	HANDLE hHandle = NULL ;

	hHandle = (HANDLE) _beginthreadex( NULL, 0, (unsigned(__stdcall*)(void*)) ListenThreadRunner, 
											this, 0, (unsigned int *)&ThreadID );

	SetThreadPriority( hHandle, THREAD_PRIORITY_BELOW_NORMAL );		
	
	if (hHandle == NULL) return false ;
	CloseHandle(hHandle) ;
	
	hHandle = (HANDLE) _beginthreadex( NULL, 0, (unsigned(__stdcall*)(void*)) ReadThreadRunner, 
			                                 this, 0, (unsigned int *)&ThreadID );

	SetThreadPriority( hHandle, THREAD_PRIORITY_BELOW_NORMAL );

	if (hHandle == NULL) return false ;
	CloseHandle(hHandle) ;

	
	m_hReadEventCompleted = CreateEvent(NULL, FALSE, FALSE, NULL);

	if( !m_hReadEventCompleted )
	{
		TRACE(TEXT("Error m_hReadEventCompleted Create. Error code = %d\n"),GetLastError());
		return false;
	}

	m_hUdpThreadEndEvent = CreateEvent( NULL, FALSE, FALSE, NULL);

	if( !m_hUdpThreadEndEvent )
	{
		TRACE(TEXT("Error IOCompletedEvent Create. Error code = %d"),GetLastError());
		return FALSE;
	}

	return true ;
}


////////////////////////////////////////////////////////////////////////////////////////
//	UDP Packet 貿府
//
////////////////////////////////////////////////////////////////////////////////////////
void CUdpSocket::ReadPacket( _LPUDPPACKET pUDPPacket)
{

	//	--------------------------------------------------------------------------------
	//	傾遏登瘤 臼籃 皋技瘤綽 芭何
	//	--------------------------------------------------------------------------------
	if ( pUDPPacket->dwCommand < 0 || pUDPPacket->dwCommand >= DEF_MAXCONTROLPACKET )
	{
		m_pUDPIOPool->Free(pUDPPacket) ;
		return ;
	}

	try{
		OnTransFunc[ pUDPPacket->dwCommand].proc(this,  pUDPPacket );
	}
	catch(...)
	{
		static int x = 0;
		wsprintf(m_cMsg,"(X) UDP (%d) Unhandled msg[%d] ",x++, pUDPPacket->dwCommand ) ;
#if defined(_DEBUG) || defined(DEF_BUGTRACE)
		ErrorMsg(m_cMsg) ;
#else 
		_Module.LogEvent(m_cMsg) ;
#endif
	}

	m_pUDPIOPool->Free( pUDPPacket ) ;
}

////////////////////////////////////////////////////////////////////////////////////////
//	Read Function
//
////////////////////////////////////////////////////////////////////////////////////////
void CUdpSocket::ReadThreadProc()
{

	_LPUDPPACKET cTmpIO ;

	while( _Module.m_bService)
	{
		//	----------------------------------------------------------------------------
		//	list 絕瀾 措扁
		//	----------------------------------------------------------------------------
		if(m_listReadCompleted.IsEmpty())	
			WaitForSingleObject (m_hReadEventCompleted,INFINITE);
			
		if( !_Module.m_bService )	break;				//	橇肺弊伐 輛豐
				
		if(m_listReadCompleted.IsEmpty())	continue;	//	List Checking

		cTmpIO = (_LPUDPPACKET) m_listReadCompleted.RemoveHead() ;

		ReadPacket(cTmpIO) ;
	}
	
	return ;
}



////////////////////////////////////////////////////////////////////////////////////////
//	UDP	SEND Function
//
////////////////////////////////////////////////////////////////////////////////////////
void CUdpSocket::SendtoPacket(_LPUDPPACKET lpUdpPacket)
{
	memcpy(m_lpSendBuf , lpUdpPacket, sizeof(_UDPPACKET))  ;

	if ((m_nSendByte = sendto(m_SendSock, m_lpSendBuf, sizeof(_UDPPACKET), 0, 
	   (SOCKADDR *)&m_SendAddr, sizeof(m_SendAddr))) == SOCKET_ERROR)
	{
	  wsprintf(m_cMsg,"ERROR: sendto failed with error %d\n", WSAGetLastError());
	  OutputDebugString(m_cMsg);
	}

	m_pUDPIOPool->Free(lpUdpPacket) ;

	return  ;
}


////////////////////////////////////////////////////////////////////////////////////////
//
//
////////////////////////////////////////////////////////////////////////////////////////
void CUdpSocket::SendToLogPacket(_LPUDPPACKET lpUdpPacket)
{
	::EnterCriticalSection(&m_LogLock);

		memcpy(m_lpLogBuf , lpUdpPacket, sizeof(_UDPPACKET))  ;

		if ((m_nSendByte = sendto(m_SendSock, m_lpLogBuf, sizeof(_UDPPACKET), 0, 
		   (SOCKADDR *)&m_LogAddr, sizeof(m_LogAddr))) == SOCKET_ERROR)
		{
		  wsprintf(m_cMsg,"ERROR: sendto failed with error %d\n", WSAGetLastError());
		  OutputDebugString(m_cMsg);
		}

	::LeaveCriticalSection(&m_LogLock);

	m_pUDPIOPool->Free(lpUdpPacket) ;

	return  ;
}



////////////////////////////////////////////////////////////////////////////////////////
//
//
////////////////////////////////////////////////////////////////////////////////////////
bool CUdpSocket::bCreateSock()
{
	m_ListenSock = WSASocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, NULL, 0, 0);

	if (INVALID_SOCKET == m_ListenSock)
	{
		wsprintf(m_cMsg,"WSASocket(g_sdListen): %d\n", WSAGetLastError());
		OutputDebugString(m_cMsg);
		return (false);
	}
	
	m_SendSock = WSASocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, NULL, 0, 0);
	if (INVALID_SOCKET == m_SendSock)
	{
		wsprintf(m_cMsg,"WSASocket(g_sdListen): %d\n", WSAGetLastError());
		OutputDebugString(m_cMsg);
		return (false);
	}
	
	return true ;
}


////////////////////////////////////////////////////////////////////////////////////////
//	World Server俊 UDP Message傈價
//
//
////////////////////////////////////////////////////////////////////////////////////////
void CUdpSocket::SendtoWorldServer( _LPUDPPACKET pUDPPacket )
{
	memcpy( pUDPPacket->cIP,_Module.m_szUdpIP ,20) ;	//	Map Server IP Address
	pUDPPacket->wPort = _Module.m_nMapPORT;				//	Map Server Port

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩高清不卡一区| 美女视频一区二区三区| 亚洲精品一区二区三区四区高清 | 精品一区二区三区免费毛片爱| 成人欧美一区二区三区白人 | 国产成人av福利| 秋霞成人午夜伦在线观看| 亚洲乱码国产乱码精品精可以看| 久久久综合精品| 日韩三级av在线播放| 欧美猛男gaygay网站| 色欲综合视频天天天| 一本到不卡精品视频在线观看| 色噜噜狠狠色综合中国| 欧美色偷偷大香| 欧美日韩国产色站一区二区三区| 欧美吻胸吃奶大尺度电影 | 国产精品久久久久影院亚瑟| 中文字幕欧美日本乱码一线二线| 国产精品视频你懂的| 亚洲欧美日韩小说| 天堂在线一区二区| 免费观看久久久4p| 日韩av不卡在线观看| 日韩电影在线一区| 美国三级日本三级久久99| 国产资源在线一区| 91在线观看污| 欧美日韩精品一二三区| 欧美成人一区二区三区在线观看| 久久亚洲一级片| 国产精品麻豆网站| 亚洲综合一区二区精品导航| 男女男精品网站| 高清成人在线观看| 欧美亚洲尤物久久| 欧美成人性福生活免费看| 国产欧美精品区一区二区三区 | 高清成人在线观看| 日本高清免费不卡视频| 日韩一卡二卡三卡| 中文字幕日韩精品一区| 亚洲成在人线在线播放| 国产成人综合自拍| 欧美日韩综合不卡| 欧美成人女星排行榜| 国产精品成人免费精品自在线观看 | 国产精品美女www爽爽爽| 一区二区三区免费网站| 久久久精品人体av艺术| 亚洲综合在线电影| 激情欧美一区二区三区在线观看| 97se亚洲国产综合在线| 日韩欧美亚洲国产精品字幕久久久 | 欧美精品777| 精品裸体舞一区二区三区| 正在播放亚洲一区| 国产午夜亚洲精品不卡| 亚洲男人的天堂av| 蜜臀va亚洲va欧美va天堂| 国产精品中文字幕一区二区三区| 91在线观看地址| 777午夜精品视频在线播放| 久久蜜桃一区二区| 一区二区三区四区精品在线视频| 日本视频一区二区三区| 成人在线综合网| 在线不卡免费av| 国产日韩欧美精品电影三级在线| 亚洲综合精品自拍| 国产一区二区三区国产| 欧美日韩一区二区三区不卡| 国产精品久久久久影视| 久久激情五月激情| 538prom精品视频线放| 国产精品久久毛片| 国产精品一区免费视频| 91精品麻豆日日躁夜夜躁| 亚洲综合丝袜美腿| 懂色中文一区二区在线播放| 欧美一区日本一区韩国一区| 一区二区三区在线观看动漫| 成人免费毛片嘿嘿连载视频| 日韩精品一区二区三区在线播放 | 国产传媒欧美日韩成人| 日韩女优视频免费观看| 三级在线观看一区二区| 91福利视频网站| 亚洲欧美自拍偷拍色图| 国产夫妻精品视频| 精品噜噜噜噜久久久久久久久试看 | 中文字幕av一区二区三区免费看| 六月丁香婷婷久久| 日韩欧美三级在线| 日韩高清电影一区| 欧美精品久久一区| 日韩中文字幕不卡| 欧美疯狂做受xxxx富婆| 亚洲成人第一页| 欧美裸体bbwbbwbbw| 亚洲超碰精品一区二区| 欧美日韩国产系列| 亚洲成av人片| 7777精品伊人久久久大香线蕉经典版下载| 最新日韩av在线| 91啪亚洲精品| 亚洲欧美乱综合| 色婷婷国产精品综合在线观看| 亚洲女同一区二区| 在线免费观看成人短视频| 一区二区三区四区不卡在线| 日本道色综合久久| 亚洲自拍偷拍九九九| 欧美亚洲高清一区| 亚洲成人av中文| 欧美一区二区三区在线视频 | 欧美三级在线视频| 午夜一区二区三区在线观看| 在线成人午夜影院| 免费国产亚洲视频| 欧美电影免费观看高清完整版在| 精品在线你懂的| 亚洲国产精品二十页| 成人精品小蝌蚪| 亚洲三级视频在线观看| 欧美在线不卡一区| 日本午夜精品视频在线观看 | 国产精品久久久久影视| 色屁屁一区二区| 婷婷激情综合网| 精品乱人伦一区二区三区| 成人黄色av电影| 亚洲一区二区成人在线观看| 91精品国产色综合久久| 国产一区二区三区在线观看免费视频 | 国产成人综合网站| 国内精品在线播放| 国产精品女主播av| 欧美午夜宅男影院| 久久精品久久99精品久久| 欧美高清在线视频| 欧美综合久久久| 久久99精品国产.久久久久久| 日本一区二区在线不卡| 欧美午夜一区二区三区| 国产真实乱子伦精品视频| 中文字幕亚洲一区二区av在线 | 欧美高清你懂得| 国产精品亚洲人在线观看| 亚洲欧美一区二区三区国产精品| 91精品国产综合久久久久久久 | 欧美日韩在线不卡| 精品无人码麻豆乱码1区2区| 亚洲人成在线观看一区二区| 欧美一区二区三区四区在线观看| 国产ts人妖一区二区| 夜夜揉揉日日人人青青一国产精品| 精品国产免费人成在线观看| 91网站在线观看视频| 精品影视av免费| 亚洲国产人成综合网站| 国产午夜精品一区二区三区视频 | 亚洲色图视频网| 欧美一区二区视频在线观看2022| 91啪亚洲精品| 国产成人福利片| 秋霞av亚洲一区二区三| 一区二区三区在线视频免费| 26uuu成人网一区二区三区| 色老汉av一区二区三区| 国产 欧美在线| 久草这里只有精品视频| 亚洲午夜国产一区99re久久| 中文在线免费一区三区高中清不卡| 717成人午夜免费福利电影| 99re在线精品| 国产一区二区三区日韩| 男女视频一区二区| 成人毛片老司机大片| 麻豆精品新av中文字幕| 亚洲午夜精品网| 一区二区三区日韩精品视频| 日本一区二区动态图| 久久久精品欧美丰满| 日韩午夜电影av| 欧美日韩一区在线| 日本高清免费不卡视频| 91偷拍与自偷拍精品| 成人高清免费观看| 国产成人av影院| 国产一区二区91| 激情久久五月天| 久久69国产一区二区蜜臀| 日本不卡的三区四区五区| 亚洲高清视频中文字幕| 亚洲小说欧美激情另类| 亚洲自拍另类综合| 亚洲最新视频在线观看| 一区二区视频在线看| 亚洲乱码中文字幕|