UserSocket.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #pragma once
  2. #include <stdint.h>
  3. #include <string>
  4. #include <unordered_map>
  5. #include "IOSocket.h"
  6. #include <vector>
  7. #include "../common/comm.h"
  8. template<typename T>
  9. class FNRedirector
  10. {
  11. public:
  12. typedef void (T::* FN)(int8_t*, int16_t Size);
  13. bool Process(T* lhs, int32_t cmd, int8_t*, int16_t);
  14. void Insert(int32_t, FN fn);
  15. private:
  16. std::unordered_map<int32_t, FN> m_fnmap;
  17. };
  18. template<typename T>
  19. bool FNRedirector<T>::Process(T* lhs, int32_t cmd, int8_t* Data, int16_t Size)
  20. {
  21. auto it = m_fnmap.find(cmd);
  22. if (it != m_fnmap.end())
  23. {
  24. (lhs->*it->second)(Data, Size);
  25. return true;
  26. }
  27. return false;
  28. }
  29. template<typename T>
  30. void FNRedirector<T>::Insert(int32_t cmd, FN fn)
  31. {
  32. m_fnmap.insert(std::make_pair(cmd, fn));
  33. }
  34. class CUserSocket :public CIOSocket
  35. {
  36. public:
  37. CUserSocket(HANDLE hCom, SOCKET s);
  38. virtual void OnCreate() override;
  39. virtual void OnRead() override;
  40. void Process(int32_t cmd, int8_t*, int32_t Size);
  41. static void InitFnDirector();
  42. virtual void OnClose() override;
  43. static FNRedirector<CUserSocket> Redirector;
  44. int32_t uid();
  45. int32_t cid();
  46. int32_t type();
  47. std::string name();
  48. RemoNet::VideoDesc ReqVideo(int32_t peer,int32_t index);
  49. void RepVideo(int32_t peer, int32_t index, RemoNet::VideoDesc desc);
  50. void LeaveVideo(int32_t peer,EgoType type);
  51. void CloseVideo(int32_t peer, int32_t index, EgoType type);
  52. //void CancelReq(int32_t peer);
  53. bool IsBusy();
  54. void KickOff();
  55. ULONGLONG GetTimeTick();
  56. void NotifyOffer(int32_t peer, int32_t index, const char* type, const char* sdp);
  57. void NotifyAnswer(int32_t peer, int32_t index, const char* type, const char* sdp);
  58. void NotifyCandidate(int32_t peer, int32_t index, const char* type, const char* candidate, int32_t sdp_mline_index, const char* sdp_mid);
  59. void OnTimeout();
  60. private:
  61. void OnReqVideo(int8_t* Data, int16_t Size);
  62. void OnRepVideo(int8_t* Data, int16_t Size);
  63. //void OnCancelReq(int8_t* Data, int16_t Size);
  64. void OnOffer(int8_t* Data, int16_t Size);
  65. void OnAnswer(int8_t* Data, int16_t Size);
  66. void OnCadidate(int8_t* Data, int16_t Size);
  67. void OnSigin(int8_t* Data, int16_t Size);
  68. void OnAdd(int8_t* Data, int16_t Size);
  69. void OnRobot(int8_t* Data, int16_t Size);
  70. void OnLeave(int8_t* Data, int16_t Size);
  71. //void OnCloseVideo(int8_t* Data,int16_t Size);
  72. void OnKeepAlive(int8_t* Data, int16_t Size);
  73. private:
  74. bool _loginsucc;
  75. int32_t _cid;
  76. int32_t _uid;
  77. EgoType _egoType;
  78. int32_t _userpeer;
  79. std::string _name;
  80. ULONGLONG TimeTick;
  81. };