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

模拟服务器

开发平台:

C/C++

  1. // Sample.cpp: implementation of the CSample class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "S3AccClientSample.h"
  6. #include "S3PDBSocketParser.h"
  7. #include "Sample.h"
  8. #ifdef _DEBUG
  9. #undef THIS_FILE
  10. static char THIS_FILE[]=__FILE__;
  11. #define new DEBUG_NEW
  12. #endif
  13. //////////////////////////////////////////////////////////////////////
  14. // Construction/Destruction
  15. //////////////////////////////////////////////////////////////////////
  16. CSample* CSample::m_pInstance = NULL;
  17. CSample::CSample()
  18. {
  19. }
  20. CSample::~CSample()
  21. {
  22. }
  23. CSample* CSample::Instance()
  24. {
  25. if ( NULL == m_pInstance )
  26. {
  27. m_pInstance = new CSample;
  28. if ( NULL != m_pInstance )
  29. {
  30. if ( !m_pInstance->CreateClientSocket() )
  31. {
  32. delete m_pInstance;
  33. }
  34. }
  35. }
  36. return m_pInstance;
  37. }
  38. void CSample::ReleaseInstance()
  39. {
  40. if ( NULL != m_pInstance )
  41. {
  42. m_pInstance->ReleaseClientSocket();
  43. delete m_pInstance;
  44. }
  45. }
  46. BOOL CSample::CreateClientSocket()
  47. {
  48. BOOL bRet = FALSE;
  49. try
  50. {
  51. m_pS = new CGameClient( 10, 1024 );
  52. if ( NULL != m_pS )
  53. {
  54. bRet = TRUE;
  55. }
  56. }
  57. catch ( ... )
  58. {
  59. bRet = FALSE;
  60. }
  61. return bRet;
  62. }
  63. void CSample::ReleaseClientSocket()
  64. {
  65. if ( m_pS )
  66. {
  67. delete m_pS;
  68. m_pS = NULL;
  69. }
  70. }
  71. BOOL CSample::Connect( LPCTSTR lpszAddr, short siPort )
  72. {
  73. BOOL bRet = FALSE;
  74. if ( NULL != m_pS )
  75. {
  76. try
  77. {
  78. m_pS->ConnectTo( lpszAddr, siPort );
  79. m_pS->StartConnections();
  80. bRet = TRUE;
  81. }
  82. catch ( ... )
  83. {
  84. bRet = FALSE;
  85. }
  86. }
  87. return bRet;
  88. }
  89. BOOL CSample::Start()
  90. {
  91. BOOL bRet = FALSE;
  92. if ( NULL != m_pS )
  93. {
  94. try
  95. {
  96. m_pS->Start();
  97. bRet = TRUE;
  98. }
  99. catch ( ... )
  100. {
  101. bRet = FALSE;
  102. }
  103. }
  104. return bRet;
  105. }
  106. void CSample::Login( const char *lpszAccName,
  107. const char *lpszPassword,
  108. const DWORD dwServerID )
  109. {
  110. ASSERT(NULL!=lpszAccName);
  111. ASSERT(NULL!=lpszPassword);
  112. ASSERT(strlen(lpszAccName)<=LOGIN_ACCOUNT_MAX_LEN);
  113. ASSERT(strlen(lpszPassword)<=LOGIN_PASSWORD_MAX_LEN);
  114. ASSERT(NULL!=m_pS);
  115. KLoginAccountInfo loginStruct;
  116. memset( &loginStruct, 0, sizeof( KLoginAccountInfo ) );
  117. strcpy( loginStruct.Account, lpszAccName );
  118. strcpy( loginStruct.Password, lpszPassword );
  119. loginStruct.Param = LOGIN_A_LOGIN;
  120. loginStruct.Size = sizeof( KLoginAccountInfo ) + sizeof( DWORD );
  121. DWORD dwTempSize = 1 + sizeof( KLoginAccountInfo ) + sizeof( DWORD );
  122. IBYTE* pTemp = new IBYTE[dwTempSize];
  123. if ( NULL != pTemp )
  124. {
  125. // 数据打包
  126. //------>BEGIN
  127. pTemp[0] = LOGIN_A_TAG;
  128. memcpy( &pTemp[1], &loginStruct, sizeof( KLoginAccountInfo ) );
  129. memcpy( &pTemp[1 + sizeof( KLoginAccountInfo )], &dwServerID, sizeof( DWORD ) );
  130. //<------END
  131. unsigned long ulEncodedSize;
  132. if ( S3PDBSocketParser::Encode( pTemp,
  133. dwTempSize,
  134. NULL,
  135. ulEncodedSize ) ) // 计算加密后数据包尺寸
  136. {
  137. IBYTE* pSendBuf = new IBYTE[ulEncodedSize];
  138. if ( NULL != pSendBuf )
  139. {
  140. if ( S3PDBSocketParser::Encode( pTemp,
  141. dwTempSize,
  142. pSendBuf,
  143. ulEncodedSize ) ) // 加密数据包
  144. {
  145. try
  146. {
  147. m_pS->Write( pSendBuf, ulEncodedSize );
  148. DWORD dwWaitResult =
  149. WaitForSingleObject( m_pS->m_hHasRecvdata, 6000 );
  150. if ( WAIT_OBJECT_0 == dwWaitResult )
  151. {
  152. ResetEvent( m_pS->m_hHasRecvdata );
  153. m_pS->m_pRecvBuf; // 接收到的数据
  154. m_pS->m_dwRecvSize; // 接收到的数据的尺寸
  155. // 其它数据处理
  156. //------>BEGIN
  157. // ...
  158. //<------END
  159. }
  160. else
  161. {
  162. // 错误处理
  163. }
  164. }
  165. catch ( ... )
  166. {
  167. // 错误处理
  168. }
  169. }
  170. delete []pSendBuf;
  171. pSendBuf = NULL;
  172. }
  173. }
  174. delete []pTemp;
  175. pTemp = NULL;
  176. }
  177. }
  178. void CSample::QueryGSList()
  179. {
  180. }
  181. void CSample::DecAccountDeposit(DWORD dwGamerID, DWORD dwServerID, DWORD dwDecSeconds)
  182. {
  183. }
  184. void CSample::Logout(DWORD dwGamerID, DWORD dwServerID)
  185. {
  186. }