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

模拟服务器

开发平台:

C/C++

  1. // testRainbow.cpp : Defines the entry point for the console application.
  2. //
  3. #include "stdafx.h"
  4. #include <objbase.h>
  5. #include <initguid.h>
  6. //#include <winsock2.h>
  7. #include <process.h>
  8. #include <iostream.h>
  9. #include <stdio.h>
  10. #include "....roledbserverKRoleBlockProcess.h"
  11. #include "IClient.h"
  12. #include "RainbowInterface.h"
  13. typedef HRESULT ( __stdcall * pfnCreateClientInterface )(
  14. REFIID riid,
  15. void **ppv
  16. );
  17. void __stdcall ClientEventNotify(
  18. LPVOID lpParam,
  19. const unsigned long &ulnEventType )
  20. {
  21. switch( ulnEventType )
  22. {
  23. case enumServerConnectCreate:
  24. break;
  25. case enumServerConnectClose:
  26. break;
  27. }
  28. }
  29. struct S3DBI_RoleBaseInfo
  30. {
  31. char szRoleName[32];
  32. int  nSex;
  33. int  nHelmType;
  34. int  nArmorType;
  35. int  nWeaponType;
  36. int  nLevel;
  37. };
  38. int main(int argc, char* argv[])
  39. {
  40. IClient *pClient = NULL;
  41. HMODULE hModule = ::LoadLibrary( "rainbow.dll" );
  42. if ( hModule )
  43. {
  44. pfnCreateClientInterface pFactroyFun = ( pfnCreateClientInterface )GetProcAddress( hModule, "CreateInterface" );
  45. IClientFactory *pClientFactory = NULL;
  46. if ( SUCCEEDED( pFactroyFun( IID_IClientFactory, reinterpret_cast< void ** >( &pClientFactory ) ) ) )
  47. {
  48. pClientFactory->SetEnvironment( 50, 8192 );
  49. pClientFactory->CreateClientInterface( IID_IESClient, reinterpret_cast< void ** >( &pClient ) );
  50. pClientFactory->Release();
  51. }
  52. }
  53. pClient->Startup();
  54. pClient->RegisterMsgFilter( reinterpret_cast< void * >( pClient ), ClientEventNotify );
  55. pClient->ConnectTo( "127.0.0.1", 5001 );
  56. IClient *pClonClient = NULL;
  57. pClient->QueryInterface( IID_IESClient, reinterpret_cast< void ** >( &pClonClient ) );
  58. size_t datalength = 0;
  59. {
  60. //test getrolelist
  61. //data[0] = GetRoleListCount
  62. //data[1...n] = AccountName
  63. char szAccoutName[]="huyi";
  64. TStreamData * pGetPlayerList =(TStreamData*) new char[sizeof(szAccoutName) + sizeof(TStreamData)];
  65. pGetPlayerList->nDataLen = sizeof(szAccoutName);
  66. pGetPlayerList->nProtoId = PROTOL_GETROLELIST;
  67. pGetPlayerList->ulNetId = 0;
  68. pGetPlayerList->pDataBuffer[0] = 3;//Max Get 3 RoleCount
  69. memcpy(&pGetPlayerList->pDataBuffer[1], szAccoutName, sizeof(szAccoutName));
  70. KRoleBlockProcess RoleBlocks(pGetPlayerList, sizeof(szAccoutName) + sizeof(TStreamData));
  71. //Send Command
  72. for (int t = 0 ; t < (int)RoleBlocks.GetBlockCount(1024); t++)
  73. {
  74. KBlock * pSendBlock = (KBlock *)new char[1024] ;
  75. size_t nSendSize = RoleBlocks.GetBlockPtr(pSendBlock, t, 1024);
  76. pClient->SendPackToServer(pSendBlock, nSendSize);
  77. delete []pSendBlock;
  78. }
  79. //Get RoleList Result
  80. KRoleBlockProcess RoleListMsg;
  81. int i = 0;
  82. while(1)
  83. {
  84. const void *pData = pClient->GetPackFromServer( datalength );
  85. if ( pData && datalength )
  86. {
  87. if (i == 0)
  88. {
  89. RoleListMsg.GenStream(((KBlock*)pData)->nOffset + sizeof(TStreamData) - 1);
  90. }
  91. RoleListMsg.SetBlock((KBlock * )pData);
  92. i++;
  93. if (RoleListMsg.IsComplete()) break;//When All Block Recv, Then Break;
  94. }
  95. Sleep(10);
  96. }
  97. //(char)data[0] = RoleCount
  98. //data[1...n] ListInfos
  99. S3DBI_RoleBaseInfo * pRoleList = (S3DBI_RoleBaseInfo *) ((char *)RoleListMsg.GetProcessData() + 1);
  100. for (i  = 0 ; i < *(char *)RoleListMsg.GetProcessData(); i ++)
  101. {
  102. printf("Name[%s],Sex[%d], Level[%d] n", pRoleList->szRoleName, pRoleList->nSex, pRoleList->nLevel);
  103. pRoleList ++;
  104. }
  105. //GetRoleAllInfomation
  106. pRoleList--;
  107. TStreamData * pGetRoleInfo = (TStreamData *) new char[sizeof(TStreamData) - 1 + strlen(pRoleList->szRoleName)];
  108. pGetRoleInfo->nDataLen = strlen(pRoleList->szRoleName);
  109. pGetRoleInfo->nProtoId = PROTOL_LOADROLE;
  110. memcpy(&pGetRoleInfo->pDataBuffer[0], pRoleList->szRoleName, strlen(pRoleList->szRoleName));
  111. KRoleBlockProcess RoleInfoMsg(pGetRoleInfo, sizeof(TStreamData) - 1 + strlen(pRoleList->szRoleName));
  112. for (t = 0 ; t < (int)RoleInfoMsg.GetBlockCount(MAX_BLOCK_SIZE); t++)
  113. {
  114. KBlock * pSendBlock = ( KBlock * )new char[MAX_BLOCK_SIZE] ;
  115. size_t nSendSize = RoleInfoMsg.GetBlockPtr(pSendBlock, t, MAX_BLOCK_SIZE);
  116. pClient->SendPackToServer(pSendBlock, nSendSize);
  117. delete []pSendBlock;
  118. }
  119. KRoleBlockProcess RoleInfo;
  120. i = 0;
  121. while(1)
  122. {
  123. const void *pData = pClient->GetPackFromServer( datalength );
  124. if ( pData && datalength )
  125. {
  126. if (i == 0)
  127. {
  128. RoleInfo.GenStream(((KBlock*)pData)->nOffset + sizeof(TStreamData) -1);
  129. }
  130. i++;
  131. RoleInfo.SetBlock((KBlock * )pData);
  132. if (RoleInfo.IsComplete()) break;
  133. }
  134. Sleep(10);
  135. }
  136. RoleInfo.m_pProcessData->nProtoId = PROTOL_ONLYSAVEROLE;
  137. for (i = 0; i < (int)RoleInfo.GetBlockCount(MAX_BLOCK_SIZE); i ++)
  138. {
  139. KBlock * pSendBlock = ( KBlock * )new char[MAX_BLOCK_SIZE] ;
  140. size_t nSendSize = RoleInfo.GetBlockPtr(pSendBlock, i, MAX_BLOCK_SIZE);
  141. pClient->SendPackToServer(pSendBlock, nSendSize);
  142. delete []pSendBlock;
  143. Sleep(10);
  144. }
  145. }
  146. pClient->Cleanup();
  147. pClient->Release();
  148. ::FreeLibrary( hModule );
  149. return 0;
  150. }