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
);
}