Network.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:4k
源码类别:

模拟服务器

开发平台:

C/C++

  1. #include "Stdafx.h"
  2. #include <objbase.h>
  3. #include <initguid.h>
  4. #include "Network.h"
  5. #include "Macro.h"
  6. #include "Inifile.h"
  7. #include "Utils.h"
  8. #include "tstring.h"
  9. using OnlineGameLib::Win32::CIniFile;
  10. using OnlineGameLib::Win32::GetAppFullPath;
  11. using OnlineGameLib::Win32::_tstring;
  12. using OnlineGameLib::Win32::CCriticalSection;
  13. OnlineGameLib::Win32::CLibrary CNetwork::m_theHeavenLib( "heaven.dll" );
  14. OnlineGameLib::Win32::CLibrary CNetwork::m_theRainbowLib( "rainbow.dll" );
  15. OnlineGameLib::Win32::CBuffer::Allocator CNetwork::m_theGlobalAllocator( 1024 * 64, 50 );
  16. #define MAX_STRING_LEN 100
  17. CNetwork::CNetwork()
  18. : m_pAccSvrClient( NULL )
  19. , m_nAccSvrPort( 0 )
  20. , m_nRoleSvrPort( 0 )
  21. , m_nClientOpenPort( 0 )
  22. , m_nGameSvrOpenPort( 0 )
  23. {
  24. }
  25. CNetwork::~CNetwork()
  26. {
  27. }
  28. bool CNetwork::Create()
  29. {
  30. CIniFile theConfigFile;
  31. _tstring sAppPath = GetAppFullPath( NULL );
  32. _tstring sConfigFile;
  33. sConfigFile = sAppPath + "Intercessor.cfg";
  34. theConfigFile.SetFile( sConfigFile.c_str() );
  35. m_sRoleSvrIP.resize( MAX_STRING_LEN );
  36. DWORD dwLen = theConfigFile.ReadString( "Network", "RoleSvrIP", const_cast< char * >( m_sRoleSvrIP.c_str() ), MAX_STRING_LEN, "" );
  37. m_sRoleSvrIP.resize( dwLen + 1 /* '' */ );
  38. m_nRoleSvrPort = theConfigFile.ReadInteger( "Network", "RoleSvrPort", 0 );
  39. m_nClientOpenPort = theConfigFile.ReadInteger( "Network", "ClientOpenPort", 0 );
  40. m_nGameSvrOpenPort = theConfigFile.ReadInteger( "Network", "GameSvrOpenPort", 0 );
  41. return true;
  42. }
  43. void CNetwork::Destroy()
  44. {
  45. if ( m_pAccSvrClient )
  46. {
  47. m_pAccSvrClient->Cleanup();
  48. }
  49. SAFE_RELEASE( m_pAccSvrClient );
  50. CIniFile theConfigFile;
  51. _tstring sAppPath = GetAppFullPath( NULL );
  52. _tstring sConfigFile;
  53. sConfigFile = sAppPath + "Intercessor.cfg";
  54. theConfigFile.SetFile( sConfigFile.c_str() );
  55. theConfigFile.WriteString( "Network", "RoleSvrIP", m_sRoleSvrIP.c_str() );
  56. theConfigFile.WriteInteger( "Network", "RoleSvrPort", m_nRoleSvrPort );
  57. theConfigFile.WriteInteger( "Network", "ClientOpenPort", m_nClientOpenPort );
  58. theConfigFile.WriteInteger( "Network", "GameSvrOpenPort", m_nGameSvrOpenPort );
  59. }
  60. IClient *CNetwork::CreateAccSvrClient( const char * const pAddressToConnectServer, 
  61.   unsigned short usPortToConnectServer )
  62. {
  63. if ( m_pAccSvrClient )
  64. {
  65. IClient *pClonClient = NULL;
  66. m_pAccSvrClient->QueryInterface( IID_IESClient, reinterpret_cast< void ** >( &pClonClient ) );
  67. return pClonClient;
  68. }
  69. /*
  70.  * There is connectted the heaven by the rainbow
  71.  */
  72. pfnCreateClientInterface pClientFactroyFun = ( pfnCreateClientInterface )( m_theRainbowLib.GetProcAddress( _T( "CreateInterface" ) ) );
  73. IClientFactory *pClientFactory = NULL;
  74. if ( pClientFactroyFun && SUCCEEDED( pClientFactroyFun( IID_IClientFactory, reinterpret_cast< void ** >( &pClientFactory ) ) ) )
  75. {
  76. pClientFactory->SetEnvironment( 10, 1024 * 1024 );
  77. pClientFactory->CreateClientInterface( IID_IESClient, reinterpret_cast< void ** >( &m_pAccSvrClient ) );
  78. SAFE_RELEASE( pClientFactory );
  79. }
  80. if ( m_pAccSvrClient )
  81. {
  82. m_pAccSvrClient->Startup();
  83. m_pAccSvrClient->RegisterMsgFilter( reinterpret_cast< void * >( this ), AccSvrEventNotify );
  84. if ( FAILED( m_pAccSvrClient->ConnectTo( pAddressToConnectServer, usPortToConnectServer ) ) )
  85. {
  86. m_pAccSvrClient->Cleanup();
  87. SAFE_RELEASE( m_pAccSvrClient );
  88. return NULL;
  89. }
  90. /*
  91.  * Recorder
  92.  */
  93. m_sAccSvrIP = pAddressToConnectServer;
  94. m_nAccSvrPort = usPortToConnectServer;
  95. IClient *pClonClient = NULL;
  96. m_pAccSvrClient->QueryInterface( IID_IESClient, reinterpret_cast< void ** >( &pClonClient ) );
  97. return pClonClient;
  98. }
  99. return NULL;
  100. }
  101. void __stdcall CNetwork::AccSvrEventNotify( LPVOID lpParam, const unsigned long &ulnEventType )
  102. {
  103. CNetwork *pThis = reinterpret_cast< CNetwork * >( lpParam );
  104. ASSERT( lpParam );
  105. switch ( ulnEventType )
  106. {
  107. case enumServerConnectCreate:
  108. ::MessageBeep( -1 );
  109. break;
  110. case enumServerConnectClose:
  111. if ( pThis )
  112. {
  113. pThis->DistroyAccSvrClient();
  114. }
  115. break;
  116. }
  117. }
  118. void CNetwork::DistroyAccSvrClient()
  119. {
  120. SAFE_RELEASE( m_pAccSvrClient );
  121. }