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

模拟服务器

开发平台:

C/C++

  1. /*****************************************************************************************
  2. // 网络连接,汇集欲发送消息包与派送抵达消息包的代理中心
  3. // Copyright : Kingsoft 2002
  4. // Author :   Wooy(Wu yue)
  5. // CreateTime: 2002-10-6
  6. ------------------------------------------------------------------------------------------
  7. Engine里的KNetClient模块包装实现了网络联接与传送包,此模块为KNetClient具体应用时的代理,
  8. 主要用于汇集具体应用中需要发送的网络包,以及把抵达的网络包派送到各相关处理接受模块。
  9. *****************************************************************************************/
  10. #pragma once
  11. //#include "KNetClient.h"
  12. #include "../../../Headers/KProtocol.h"
  13. #include "../../../Headers/iClient.h"
  14. struct iKNetMsgTargetObject;
  15. typedef void (*fnNetMsgCallbackFunc)(void* pMsgData);
  16. typedef HRESULT ( __stdcall * pfnCreateClientInterface )(
  17. REFIID riid,
  18. void **ppv
  19. );
  20. //====默认的超时时限====
  21. #define DEF_TIMEOUT_LIMIT 60000 //60sec
  22. class KNetConnectAgent
  23. {
  24. public:
  25. KNetConnectAgent();
  26. ~KNetConnectAgent();
  27. //初始化
  28. int Initialize();
  29. //退出
  30. void Exit();
  31. //建立连接
  32. int ClientConnectByNumericIp(const unsigned char* pIpAddress, unsigned short pszPort);
  33. //关闭连接
  34. void DisconnectClient();
  35. int ConnectToGameSvr(const unsigned char* pIpAddress, unsigned short uPort, GUID* pGuid);
  36. void DisconnectGameSvr();
  37. //发送消息
  38. int SendMsg(const void *pBuffer, int nSize);
  39. //持续性行为
  40. void Breathe();
  41. void UpdateClientRequestTime(bool bCancel, unsigned int uTimeLimit = DEF_TIMEOUT_LIMIT);
  42. //注册抵达消息响应函数
  43. void RegisterMsgTargetObject(PROTOCOL_MSG_TYPE Msg, iKNetMsgTargetObject* pObject);
  44. int IsConnecting(int bGameServ);
  45. void TobeDisconnect();
  46. private:
  47. bool ProcessSwitchGameSvrMsg(void* pMsgData); //处理游戏世界服务器的网络消息
  48. private:
  49. IClient* m_pClient;
  50. IClient* m_pGameSvrClient;
  51. private:
  52. #define MAX_MSG_COUNT 1 << (PROTOCOL_MSG_SIZE * 8)
  53. iKNetMsgTargetObject* m_MsgTargetObjs[MAX_MSG_COUNT];
  54. HMODULE     m_hModule;
  55. pfnCreateClientInterface    m_pFactroyFun;
  56. IClientFactory             *m_pClientFactory;
  57. bool m_bIsClientConnecting;
  58. bool m_bIsGameServConnecting;
  59. bool m_bTobeDisconnect;
  60. unsigned int m_uClientRequestTime; //发出情求的时间
  61. unsigned int m_uClientTimeoutLimit;
  62. };
  63. extern KNetConnectAgent g_NetConnectAgent;