void CDPCertified::SendCloseExistingConnection( const char* lpszAccount, const char* lpszpw )
{
	BEFORESEND( ar, PACKETTYPE_CLOSE_EXISTING_CONNECTION );
	ar.WriteString( lpszAccount );
	ar.WriteString( lpszpw );
	SEND( ar, this, DPID_SERVERPLAYER );
}
void CDPCertified::SendNewAccount( LPCSTR lpszAccount, LPCSTR lpszpw )
{
	BEFORESEND( ar, PACKETTYPE_NEW_ACCOUNT );
	ar.WriteString( lpszAccount );
	ar.WriteString( lpszpw );
	SEND( ar, this, DPID_SERVERPLAYER );
}
Example #3
0
void CUserMng::ClearDum( CDPMng* pdp )
{
	BEFORESEND( ar, PACKETTYPE_KEEP_ALIVE );

	CUser* pUsertmp;
	DWORD dwTick	= GetTickCount() - SEC( 10 );

	CMclAutoLock	Lock( m_AddRemoveLock );

	for( map<DPID, CUser*>::iterator i = begin(); i != end(); ++i )
	{
		pUsertmp	= i->second;
		if( pUsertmp->m_dwTick < dwTick )
		{
			pdp->DestroyPlayer( pUsertmp->m_dpid );
		}
		else if( pUsertmp->m_bValid == FALSE )
		{
			pUsertmp->m_bValid	= TRUE;
			pdp->DestroyPlayer( pUsertmp->m_dpid );
		}
		else
		{
			pUsertmp->m_bValid	= FALSE;
			SEND( ar, pdp, pUsertmp->m_dpid );
		}
	}
}
void CDPCoreClient::SendPreJoin( DWORD dwAuthKey, const TCHAR* lpszAccount, u_long idPlayer, const TCHAR* lpszPlayer )
{
	BEFORESEND( ar, PACKETTYPE_PRE_JOIN );
	ar << dwAuthKey;
	ar.WriteString( lpszAccount );
	ar << idPlayer;
	ar.WriteString( lpszPlayer );
	SEND( ar, this, DPID_SERVERPLAYER );
}
Example #5
0
void CDPLoginSrvr::OnQueryTickCount( CAr & ar )
{
	DWORD dwTime;
	ar >> dwTime;

	BEFORESEND( ar1, PACKETTYPE_QUERYTICKCOUNT );
	ar1 << dwTime << g_TickCount.GetTickCount();
	SEND( ar1, this, DPID_ALLPLAYERS );
}
void CDPCoreClient::QueryTickCount( void )
{
	hWait	= CreateEvent( NULL, FALSE, FALSE, NULL );

	BEFORESEND( ar, PACKETTYPE_QUERYTICKCOUNT );
	ar << (DWORD)timeGetTime();
	SEND( ar, this, DPID_SERVERPLAYER );

	WaitForSingleObject( hWait, INFINITE );
	CloseHandle( hWait );
}
Example #7
0
BOOL CDPMonitorClient::Run( LPCSTR lpAddr, u_long uPort, DWORD dwMonitorId, BOOL fsndPing )
{
	if( FALSE == ConnectToServer( lpAddr, uPort, FALSE ) )
		return FALSE;

	BEFORESEND( ar, PACKETTYPE_MONITOR_ID );
	ar << dwMonitorId << fsndPing;
	SEND( ar, this, DPID_SERVERPLAYER );

	return TRUE;
}
// 2006.03 MSG_VER를 보내는 부분이 5차 국내에는 없음
void CDPCertified::SendCertify()
{
	if( ::GetLanguage() == LANG_ENG && ::GetSubLanguage() == LANG_SUB_USA )
		g_Neuz.m_dwTimeOutDis = GetTickCount() + SEC( 40 );
	else
		g_Neuz.m_dwTimeOutDis = GetTickCount() + SEC( 20 );
		
	BEFORESEND( ar, PACKETTYPE_CERTIFY );
	ar.WriteString( ::GetProtocolVersion() );		// MSG_VER 
#ifdef __SECURITY_0628
	ar.WriteString( CResFile::m_szResVer );
#endif	// __SECURITY_0628
	ar.WriteString( g_Neuz.m_szAccount );

	//////////////////////////////////////////////////////////////////////////
	//	mulcom	BEGIN100218	패스워드 암호화
#ifdef __ENCRYPT_PASSWORD
	char	szPlain[ 16 * MAX_PASSWORD ] = {0, };
	char	szEnc[ 16 * MAX_PASSWORD ] = {0, };
	
	::memcpy( szPlain, g_Neuz.m_szPassword, sizeof(g_Neuz.m_szPassword) );
	
	
	g_xRijndael->ResetChain();
	g_xRijndael->Encrypt( szPlain, szEnc, 16 * MAX_PASSWORD, CRijndael::CBC );
	
	ar.Write( szEnc, 16 * MAX_PASSWORD );
#else
	ar.WriteString( g_Neuz.m_szPassword );
#endif
	//	mulcom	END100218	패스워드 암호화


#ifdef __TWN_LOGIN0816
	if( GetLanguage() == LANG_TWN )
	{
		ar.WriteString( g_Neuz.m_szSessionPwd );
//		char lpOutputString[256]	= { 0,};
//		sprintf( lpOutputString, "account = %s, pwd = %s, session = %s", g_Neuz.m_szAccount, g_Neuz.m_szPassword, g_Neuz.m_szSessionPwd );
//		OutputDebugString( lpOutputString );
	}
#endif	// __TWN_LOGIN0816
	SEND( ar, this, DPID_SERVERPLAYER );
}
Example #9
0
void CDPLoginSrvr::OnPreJoin( CAr & ar )
{
static	\
TCHAR lpszAccount[MAX_ACCOUNT], lpszPlayer[MAX_PLAYER];
	u_long idPlayer;
	DWORD dwAuthKey;

	ar >> dwAuthKey;
	ar.ReadString( lpszAccount, MAX_ACCOUNT );
	ar >> idPlayer;
	ar.ReadString( lpszPlayer, MAX_PLAYER );

	CMclAutoLock	Lock( g_PlayerMng.m_AddRemoveLock );

	BOOL f	= g_PlayerMng.AddPlayer( idPlayer, lpszPlayer, lpszAccount );	// lock
	if( f == FALSE )
	{
		WriteLog( "OnPreJoin(): AddPlayer() return false, %d, %s", idPlayer, lpszPlayer );
		CPlayer* pPlayer	= g_PlayerMng.GetPlayer( idPlayer );
//		if( !pPlayer )
//		{
//			WriteLog( "OnPreJoin(): ID not found" );
//			pPlayer		= g_PlayerMng.GetPlayer( lpszPlayer );
//		}
		if( pPlayer )
		{
			if( *pPlayer->lpszAccount != '\0' )
				SendQueryRemovePlayer( pPlayer->lpszAccount );
			else
				WriteLog( "OnPreJoin(): lpszAccount == '\0'" );
			g_PlayerMng.RemovePlayer( pPlayer );
		}
		else
			WriteLog( "OnPreJoin(): Player not found" );
	}

	BEFORESEND( ar1, PACKETTYPE_PRE_JOIN );	// result
	ar1 << dwAuthKey;
	ar1.WriteString( lpszAccount );
	ar1 << idPlayer;
	ar1.WriteString( lpszPlayer );
	ar1 << (BYTE)f;	// o
	SEND( ar1, this, DPID_ALLPLAYERS );
}
Example #10
0
bool CProcessLauncher::CreateMyProcess()
{
	if( m_lProcessCount > 0 )
	{
		puts("Process is running." );
		return false;
	}

	bool bOK = false;
	if( m_pi.hProcess == NULL )
	{
		if( ::RunProcess( &m_pi, (char *)GetAppName(), GetAppDirectory(), false, NORMAL_PRIORITY_CLASS ) )
		{
			printf( "Process[%s - %d] created.\n", GetAppName(), m_pi.hProcess );

			DWORD dwResult = WAIT_OBJECT_0;
			if( GetStartWait() )
				dwResult = WaitForSingleObject( GetEvent(), 1000 * 120 );	// 실행 후의 데이타 로딩을 최대 2분 기다린다.
			else
				WaitForInputIdle( m_pi.hProcess, 3000 );		

			bOK = ( dwResult == WAIT_OBJECT_0 );

			printf( "Process[%s - %d] wait result:%d\n", GetAppName(), m_pi.hProcess, dwResult );
		}
	}

	if( bOK )
	{
		InterlockedIncrement( &m_lProcessCount );
		BeginMonitor();
	}
	
	if( m_pPeer )
	{
		BEFORESEND( ar, PACKETTYPE_PROCESS_CREATED2 );
		ar << (BYTE)bOK;
		ar << (DWORD)( bOK ? 0 : GetLastError() );
		SEND( ar, m_pPeer, DPID_SERVERPLAYER );
	}

	return bOK;
}
Example #11
0
void CProcessLauncher::OnTerminated()
{
	DWORD dwExitCode = 0;
	GetExitCodeProcess( m_pi.hProcess, &dwExitCode );
	CloseHandle( m_pi.hProcess );
	CloseHandle( m_pi.hThread );
	memset( &m_pi, 0x00, sizeof(m_pi) );
	InterlockedDecrement( &m_lProcessCount );

	printf( "GetExitCodeProcess: %d \n", dwExitCode );

	if( m_pPeer )
	{
		BYTE cbAbort = (dwExitCode == ABORT_CODE ? 1 : 0);

		BEFORESEND( ar, PACKETTYPE_PROCESS_TERMINATED2 );
		ar << cbAbort;
		SEND( ar, m_pPeer, DPID_SERVERPLAYER );
	}

//	Sleep( 3000 );
}
void CDPCertified::OnKeepAlive( CAr & ar, DPID )
{
//	BEFORESENDSOLE( ar2, PACKETTYPE_KEEP_ALIVE, DPID_UNKNOWN );
	BEFORESEND( ar2, PACKETTYPE_KEEP_ALIVE );
	SEND( ar2, this, DPID_SERVERPLAYER );
}
void CDPCoreClient::SendLeave( u_long idPlayer )
{
	BEFORESEND( ar, PACKETTYPE_LEAVE );
	ar << idPlayer;
	SEND( ar, this, DPID_SERVERPLAYER );
}
Example #14
0
void CDPConsole::SendCommand( char* buffer )
{
	BEFORESEND( ar, PACKETTYPE_CONSOLE_COMMAND );
	ar.WriteString( buffer );
	SEND( ar, this, DPID_SERVERPLAYER );
}
Example #15
0
void CDPLoginSrvr::SendQueryRemovePlayer( const CHAR* lpszAccount )
{
	BEFORESEND( ar, PACKETTYPE_DESTROY_PLAYER );
	ar.WriteString( lpszAccount );
	SEND( ar, this, DPID_ALLPLAYERS );
}