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

模拟服务器

开发平台:

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 <conio.h>
  8. #include <process.h>
  9. #include "..rainbowinterfaceIClient.h"
  10. #include "..rainbowinterfaceRainbowInterface.h"
  11. typedef HRESULT ( __stdcall * pfnQueryClientInterface )(
  12. REFIID riid,
  13. void **ppv
  14. );
  15. void __stdcall ServerEventNotify(
  16. const unsigned long &ulnEventType )
  17. {
  18. switch( ulnEventType )
  19. {
  20. case SERVER_CONNECT_CREATE:
  21. break;
  22. case SERVER_CONNECT_CLOSE:
  23. break;
  24. }
  25. }
  26. unsigned _stdcall ThreadFunction( void *pParam )
  27. {
  28. IClient *pClient = reinterpret_cast< IClient * >( pParam );
  29. while ( pClient )
  30. {
  31. Sleep( 1 );
  32. size_t datalength = 0;
  33. const void *pData = pClient->GetPackFromServer( datalength );
  34. if ( !pData || 0 == datalength )
  35. {
  36. continue;
  37. }
  38. //cprintf( "get a package from clientn" );
  39. }
  40. if ( pClient )
  41. {
  42. pClient->Release();
  43. pClient = NULL;
  44. }
  45. return 0L;
  46. }
  47. int main(int argc, char* argv[])
  48. {
  49. #ifdef _DEBUG
  50. HMODULE hModule = LoadLibrary( "..\Rainbow\Debug\Rainbow.dll" );
  51. #else
  52. HMODULE hModule = LoadLibrary( "..\Rainbow\Release\Rainbow.dll" );
  53. #endif
  54. pfnQueryClientInterface pfn = ( pfnQueryClientInterface )GetProcAddress( hModule, "QueryClientInterface" );
  55. IClient *pClient = NULL;
  56. if ( FAILED( pfn( IID_IESClient, reinterpret_cast< void ** >( &pClient ) ) ) )
  57. {
  58. printf( "Query client interface failed!" );
  59. exit( 0 );
  60. }
  61. pClient->Startup();
  62. pClient->RegisterMsgFilter( ServerEventNotify );
  63. pClient->ConnectTo( "127.0.0.1", 5001 );
  64. IClient *pClonClient = NULL;
  65. pClient->QueryInterface( IID_IESClient, reinterpret_cast< void ** >( &pClonClient ) );
  66. unsigned int threadid = 0;
  67. HANDLE handle = (HANDLE)::_beginthreadex( 0, 0, ThreadFunction, reinterpret_cast< void * >( pClonClient ), 0, &threadid );
  68. CloseHandle( handle );
  69. while ( pClient )
  70. {
  71. pClient->SendPackToServer( "to server", strlen( "to server" ) );
  72. Sleep( 1 );
  73. }
  74. pClient->Shutdown();
  75. pClient->Cleanup();
  76. if ( pClient )
  77. {
  78. pClient->Release();
  79. pClient = NULL;
  80. }
  81. return 0;
  82. }