www.pudn.com > back.rar > token.cpp


//Token.cpp 
#include "stdafx.h" 
#include "IOCPNet.h" 
#include "../protocol/protocol.h" 
 
char	g_cToolCrypt[32]="\n"; 
 
BOOL	CMultiToken::Analize_ConnectData() 
{ 
	GetCommandLine(); 
	char* path= (char*)malloc(4096); 
	char* temp = GetCommandLine(); 
 
	for( int i = strlen(temp); i >= 0 ; i-- ) 
	{ 
		if( temp[i] == '\\' ) 
		{ 
			for( int j = 0; j <= i; j++ ) 
			{ 
				path[j] = temp[j+1]; 
			} 
			path[i] = '\0'; 
			break; 
		} 
	} 
//	strcpy( temp, path ); 
 
	//Á¤º¸¸¦ Àд´٠
	char fn[2048]; 
	FILE* fp; 
	strcpy( fn, path ); 
	strcat( fn, FILE_CONNECT ); 
	fp = fopen( fn, "r"); // "r+t" ); 
	if (fp == NULL) return FALSE; 
 
	char* token; // ÅäÅ« 
	char string [ 4096 ]; // ¹®¼­ ÁÙ´ÜÀ§ ÀúÀå º¯¼ö 
	bool bRead = TRUE; // ¹®¼­ ´Ù Àоú´ÂÁö üũ 
	bool bLine = TRUE; // ÁÙ Àоú´ÂÁö üũ 
	char splitter[] = " \n\t"; // ±¸ºÐÀÚ : /, ij¸®Áö¸®ÅÏ, ÅÇ  
 
	if( fgets( string, 4096 , fp ) == NULL ) // ÁÙ ´ÜÀ§·Î Àбâ		 
	{ 
		fclose( fp ); 
		return FALSE; 
	} 
		 
	int connectc = 0; 
	int listenc = 0; 
	int totalc = 0; 
	int ListenOrConn=0; 
	 
	m_nConnectSocketCount =0; 
	m_nListenSocketCount = 0; 
	m_nSocInfoCount = 0; 
 
	m_nFirstlistencount = 0;//032 
	m_nZoneservercount = 0; 
	m_nGatewaycount = 0; 
	m_nStartGateway = 0; 
	 
	m_nExceptLiveserver = 1000;// except to check for status of server. 
 
	memset(m_chCaptionName,0x00,sizeof(char)*20); 
 
	do // °Ë»ö ·çÇÁ  
	{ 
		while( string[ 0 ] == ';' || (0==strcmp( string, "\n" )) ) // ÁÖ¼®ÀÌ ÀÖ´Ù¸é ´ÙÀ½ ÁÙ ÀÐÀ½ 
		{				 
			if ( fgets( string, 4096, fp ) == NULL ) // ´õ ÀÌ»ó ÀÐÀº°Ô ¾ø´Ù¸é ·çÇÁ Á¾·á 
			{ 
				bRead = FALSE; 
				break; 
			} 
		} 
		 
		if(string[0] == '$' )		// caption ¾ò±â 
		{ 
			token = strtok( string, splitter );	// tokenÀ¸·Î Àоî¿À±â 
			token = strtok(  NULL, splitter );	// tokenÀ¸·Î Àоî¿À±â			 
			strcpy(	m_chCaptionName , token ); 
 
			if ( fgets( string, 4096 , fp ) == NULL ) // ´ÙÀ½ ÁÙ Àбâ				 
			bRead = FALSE; // ÀÐÀº°Ô ¾ø´Ù¸é stringÀº 0À¸·Î	 
			continue; 
		} 
 
		if(string[0] == '@' )		// ¾ÏÈ£ ? ¾ò¾î¿À±â		// YD 8_25  ¼­¹öÅø °ü·Ã 
		{ 
			token = strtok( string, splitter );	// tokenÀ¸·Î Àоî¿À±â 
			token = strtok(  NULL, splitter );	// tokenÀ¸·Î Àоî¿À±â			 
			strcpy(	g_cToolCrypt , token ); 
 
			token = strtok(  NULL, splitter );	// tokenÀ¸·Î Àоî¿À±â 
 
			if( token != NULL ) 
				m_nExceptLiveserver = atoi(token); 
 
			break; 
		} 
 
		if (bRead == FALSE) break; 
		token = strtok( string, splitter );	// tokenÀ¸·Î Àоî¿À±â 
		ListenOrConn = atoi(token); 
 
		if (ListenOrConn % 10 == 0) 
		{ 
			m_SocInfo[m_nSocInfoCount].bListen = TRUE; 
			m_nListenSocketCount++;			 
		} 
		else 
		{ 
			m_nFirstlistencount = m_nListenSocketCount;  
			m_SocInfo[m_nSocInfoCount].bListen = FALSE; 
			m_nConnectSocketCount++; 
		} 
 
		switch( ListenOrConn / 10 ) 
		{ 
		case 1://zonserver count; 
			{ 
				m_nZoneservercount++;				 
			} 
			break; 
		case 2://zonegate count; 
			{ 
				if( m_nStartGateway == 0) m_nStartGateway = m_nSocInfoCount; 
				m_nGatewaycount++; 
			} 
			break; 
		} 
 
		token = strtok( NULL, splitter );	// lis# 
		m_SocInfo[m_nSocInfoCount].nIndex = atoi(token); 
		token = strtok( NULL, splitter );	// comments 
		strcpy(m_SocInfo[m_nSocInfoCount].szTitle,token); 
		token = strtok( NULL, splitter );	// localip 
		strcpy(m_SocInfo[m_nSocInfoCount].szLocalIP,token); 
		token = strtok( NULL, splitter );	// connectip (listen ip) 
		strcpy(m_SocInfo[m_nSocInfoCount].szIP,token); 
		token = strtok( NULL, splitter );	// port (listen port 
		m_SocInfo[m_nSocInfoCount].nPort = atoi(token); 
		token = strtok( NULL, splitter );	// nRecvSockBuffer 
		m_SocInfo[m_nSocInfoCount].nRecvSockBuffer= atoi(token); 
		token = strtok( NULL, splitter );	// nSendSockBuffer 
		m_SocInfo[m_nSocInfoCount].nSendSockBuffer= atoi(token); 
		token = strtok( NULL, splitter );	// nReadQueueBuffer 
		m_SocInfo[m_nSocInfoCount].nReadQueueBuffer= atoi(token); 
		token = strtok( NULL, splitter );	// nSendQueueBuffer 
		m_SocInfo[m_nSocInfoCount].nSendQueueBuffer= atoi(token); 
 
		m_nSocInfoCount++; 
		 
 
		if ( fgets( string, 4096 , fp ) == NULL ) // ´ÙÀ½ ÁÙ Àбâ				 
			bRead = FALSE; // ÀÐÀº°Ô ¾ø´Ù¸é stringÀº 0À¸·Î				 
 
	} while( bRead != FALSE ); // ´õ ÀÌ»ó ÀÐÀº°Ô ¾ø´Ù¸é ·çÇÁ Á¾·á . 
	fclose( fp );		// end of set warp info 
	free(path); 
 
	return TRUE; 
} 
 
/* 
	CMultiToken 
	 
	Auther : gr8won 2002.5 
 
*/ 
 
DWORD WINAPI _xKeepAliveThread(LPVOID pVoid)				 
{ 
	CMultiToken* pToken = (CMultiToken*)pVoid; 
	pToken->KeepAlive(); 
 
	return 1; 
} 
/* 
 
 
	CMultiToken member functions 
 
*/ 
 
CMultiToken::~CMultiToken() 
{ 
} 
BOOL CMultiToken::Connect(CIOCPNet* pNet) 
{ 
	m_pIOCPNet = pNet; 
	 
	if ((m_hThread = CreateThread(NULL, 0, _xKeepAliveThread , this, CREATE_SUSPENDED , &m_dwThreadID)) == NULL) 
	SetThreadPriority(m_hThread, THREAD_PRIORITY_LOWEST); 
	ResumeThread(m_hThread); 
	 
	return TRUE; 
} 
 
void CMultiToken::KeepAlive() 
{ 
	while (true) 
	{ 
		Sleep(5000); 
 
		for (int i = GetFirstConnet() ; i < GetFirstConnet() + m_nConnectSocketCount ; i++) 
		{ 
			if (!g_ClientArray[i].IsConnected() ) 
			{ 
				int result = -1; 
				result = m_pIOCPNet->Connect(m_SocInfo[i].szIP,m_SocInfo[i].nPort,i, 
								m_SocInfo[i].szLocalIP, 
								m_SocInfo[i].nRecvSockBuffer, 
								m_SocInfo[i].nSendSockBuffer, 
								m_SocInfo[i].nReadQueueBuffer, 
								m_SocInfo[i].nSendQueueBuffer							 
								 
								); // txt»ó¿¡¼­ Àоî¿Â Á¤º¸ Á¢¼Ó  
 
				if (result != -1) 
				{ 
					Connected(i,i); // ´ÙÀ̾˷α׿¡ »óŸ¦ ¾Ë¸²  
				} 
			} 
		} 
	} 
} 
int CMultiToken::DisConnect(int nClient) 
{ 
	DisConnected(nClient,nClient);								 
	return 1; 
} 
 
int CMultiToken::GetFirstConnet() 
{ 
	if( m_nFirstlistencount != 0)	 
		return m_nFirstlistencount; 
	else 
		return m_nListenSocketCount; 
} 
 
 
 
 
 
 
 
/* 
 
	CIOCPToken member functions 
 
*/ 
#define CM_CONNECTED				510 
#define CM_DISCONNECTED				511 
struct CP_Connected:public SIOCPPacket				// À̵¿ 
{ 
	CP_Connected() {m_Header.wID[PACKET_HEADER] = CM_CONNECTED;} 
}; 
struct CP_DisConnected:public SIOCPPacket				// À̵¿ 
{ 
	CP_DisConnected() {m_Header.wID[PACKET_HEADER] = CM_DISCONNECTED;} 
}; 
 
void CIOCPToken::Connected(int iClient) 
{ 
	CP_Connected msg; 
	msg.m_Header.wID[1] = sizeof(CP_Connected); 
	g_XReadQueue.InQueue(//message buffer 
						 (BYTE*)&msg, 
						 sizeof(msg),					//this message size 
						 iClient,						//client number 
						 0, 
						 FALSE 
						 ); 
	 
//	OnConnected(iClient); 
} 
void CIOCPToken::DisConnected(int iClient) 
{ 
	CP_DisConnected msg; 
	msg.m_Header.wID[1] = sizeof(CP_DisConnected); 
	g_XReadQueue.InQueue(//message buffer 
						 (BYTE*)&msg, 
						 sizeof(msg),					//this message size 
						 iClient,									//client number 
						 0, 
						 FALSE 
						 ); 
 
//	OnDisconnected(iClient); 
} 
void CMultiToken::Connected(int iClient, int nServer) 
{ 
	MP_Server_Connected msg; 
	msg.m_nServer = nServer; 
	msg.m_Header.wID[1] = sizeof(MP_Server_Connected); 
	g_XReadQueue.InQueue(//message buffer 
						 (BYTE*)&msg, 
						 sizeof(msg),					//this message size 
						 iClient,									//client number 
						 0, 
						 FALSE 
						 ); 
} 
void CMultiToken::DisConnected(int iClient, int nServer) 
{ 
	MP_Server_DisConnected msg; 
	msg.m_nServer = nServer; 
	msg.m_Header.wID[1] = sizeof(MP_Server_DisConnected); 
	g_XReadQueue.InQueue(//message buffer 
						 (BYTE*)&msg, 
						 sizeof(msg),					//this message size 
						 iClient,									//client number 
						 0, 
						 FALSE 
						 ); 
}