server.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #ifndef SERVER_H
  2. #define SERVER_H
  3. #include "common.h"
  4. #include <string>
  5. using namespace std;
  6. #ifdef __cplusplus
  7. extern "C" {
  8. #endif
  9. #include "net.h"
  10. #ifdef __cplusplus
  11. };
  12. #endif
  13. class Server
  14. {
  15. enum SERVER_START_STEP {
  16. SSS_NULL,
  17. SSS_PUSH,
  18. SSS_ENABLE_TUNNEL_REVERSE,
  19. SSS_ENABLE_TUNNEL_FORWARD,
  20. SSS_EXECUTE_SERVER,
  21. SSS_RUNNING,
  22. };
  23. public:
  24. struct ServerParams {
  25. string serial = ""; // 设备序列号
  26. unsigned short localPort = 27183; // reverse时本地监听端口
  27. unsigned short maxSize = 0; // 视频分辨率
  28. unsigned int bitRate = 0; // 视频比特率
  29. string crop = "-"; // 视频裁剪
  30. bool sendFrameMeta = false; // 是否发送mp4帧数据
  31. bool control = true; // 安卓端是否接收键鼠控制
  32. bool useReverse = true; // true:先使用adb reverse,失败后自动使用adb forward;false:直接使用adb forward
  33. };
  34. explicit Server();
  35. void SetServerStartResultCallback(void (*callback)(bool ,void*), void* parameter);
  36. void SetConnectToResultCallback(void (*callback)(bool, string, Size, void*), void* parameter);
  37. bool start(Server::ServerParams params);
  38. bool server_connect_to() ;
  39. bool isReverse();
  40. Server::ServerParams getParams();
  41. socket_t getVideoSocket();
  42. socket_t getControlSocket();
  43. void stop();
  44. protected:
  45. private:
  46. const string& getServerPath();
  47. bool pushServer();
  48. bool enableTunnelReverse();
  49. bool disableTunnelReverse();
  50. bool enableTunnelForward();
  51. bool disableTunnelForward();
  52. bool execute();
  53. bool startServerByStep();
  54. bool readInfo(socket_t videoSocket, string& deviceName, Size& size);
  55. private:
  56. string m_serverPath = "";
  57. public:
  58. socket_t m_serverSocket = INVALID_SOCKET;
  59. socket_t m_videoSocket = INVALID_SOCKET;
  60. socket_t m_controlSocket = INVALID_SOCKET;
  61. private:
  62. bool m_tunnelEnabled = false;
  63. bool m_tunnelForward = false; // use "adb forward" instead of "adb reverse"
  64. unsigned int m_acceptTimeoutTimer = 0;
  65. unsigned int m_connectTimeoutTimer = 0;
  66. unsigned int m_connectCount = 0;
  67. unsigned int m_restartCount = 0;
  68. string m_deviceName = "";
  69. Size m_deviceSize = {0, 0};
  70. ServerParams m_params;
  71. SERVER_START_STEP m_serverStartStep = SSS_NULL;
  72. void (*m_server_start_result_callback)(bool ,void*);
  73. void (*m_connect_to_result_callback)(bool, string, Size, void*);
  74. void *m_parameter;
  75. };
  76. #endif // SERVER_H