#pragma once #include #include #include #include enum class RtcEventType { LocalDescription, // id=pc, s1=sdp, s2=type LocalCandidate, // id=pc, s1=cand, s2=mid StateChange, // id=pc, arg=rtcState GatheringState, // id=pc, arg=rtcGatheringState DataChannel, // id=pc, arg=new dc id Open, // id=dc Closed, // id=dc Error, // id=dc, s1=error Message // id=dc, data=payload, isString=text frame }; struct RtcEvent { RtcEventType type; int id; int arg = 0; std::string s1; std::string s2; std::vector data; bool isString = false; }; int runt_rtc_init(); void runt_rtc_cleanup(); int runt_rtc_create_peer_connection(const std::vector &iceServers); void runt_rtc_close_peer_connection(int pc); void runt_rtc_delete_peer_connection(int pc); void runt_rtc_set_local_description(int pc, const char *type); int runt_rtc_set_remote_description(int pc, const char *sdp, const char *type); int runt_rtc_add_remote_candidate(int pc, const char *cand, const char *mid); std::string runt_rtc_get_local_description(int pc); std::string runt_rtc_get_local_description_type(int pc); int runt_rtc_create_data_channel(int pc, const char *label, bool unordered, int maxRetransmits); void runt_rtc_delete_data_channel(int dc); int runt_rtc_send_message(int id, const char *data, int size); void runt_rtc_close(int id); void runt_rtc_delete(int id); bool runt_rtc_is_open(int id); int runt_rtc_get_buffered_amount(int id); bool runt_rtc_random_bytes(char *out, int len); bool runt_rtc_poll_event(RtcEvent &out);