#ifndef _PEER_CONNECTION_H_ #define _PEER_CONNECTION_H_ #include #include #include "ice_transmission.h" #include "ws_transmission.h" enum SignalStatus { Connecting = 0, Connected, Closed }; typedef void (*OnReceiveBuffer)(unsigned char *, size_t, const char *, const size_t); typedef void (*NetStatusReport)(const unsigned short, const unsigned short); typedef struct { const char *cfg_path; OnReceiveBuffer on_receive_buffer; NetStatusReport net_status_report; } PeerConnectionParams; class PeerConnection { public: PeerConnection(); ~PeerConnection(); public: int Create(PeerConnectionParams params, const std::string &transmission_id = "", const std::string &user_id = ""); int Join(PeerConnectionParams params, const std::string &transmission_id, const std::string &user_id = ""); int Destroy(); int RequestTransmissionMemberList(const std::string &transmission_id); SignalStatus GetSignalStatus(); int SendData(const char *data, size_t size); private: std::string uri_ = ""; std::string cfg_signal_server_ip_; std::string cfg_signal_server_port_; std::string cfg_stun_server_ip_; std::string cfg_stun_server_port_; int signal_server_port_ = 0; int stun_server_port_ = 0; WsTransmission *ws_transport_ = nullptr; IceTransmission *ice_transmission_ = nullptr; std::map ice_transmission_list_; std::function on_receive_ws_msg_ = nullptr; std::function on_receive_ice_msg_ = nullptr; unsigned int ws_connection_id_ = 0; std::string user_id_ = ""; std::string transmission_id_ = ""; std::vector user_id_list_; SignalStatus signal_status_ = SignalStatus::Closed; }; #endif