// // Copyright (c) 2013-2025 The SRS Authors // // SPDX-License-Identifier: MIT // #ifndef SRS_APP_SRT_SERVER_HPP #define SRS_APP_SRT_SERVER_HPP #include #include #include class SrsSrtServer; class SrsHourGlass; class ISrsSrtClientHandler; // Interface for SRT client acceptance class ISrsSrtClientHandler { public: ISrsSrtClientHandler(); virtual ~ISrsSrtClientHandler(); public: virtual srs_error_t accept_srt_client(srs_srt_t srt_fd) = 0; }; // A common srt acceptor, for SRT server. class SrsSrtAcceptor : public ISrsSrtHandler { private: std::string ip_; int port_; ISrsSrtClientHandler *srt_handler_; private: SrsSrtListener *listener_; public: SrsSrtAcceptor(ISrsSrtClientHandler *srt_handler); virtual ~SrsSrtAcceptor(); public: virtual srs_error_t listen(std::string ip, int port); private: virtual srs_error_t set_srt_opt(); // Interface ISrsSrtHandler public: virtual srs_error_t on_srt_client(srs_srt_t srt_fd); }; // Start a coroutine to drive the SRT events with state-threads. class SrsSrtEventLoop : public ISrsCoroutineHandler { public: SrsSrtEventLoop(); virtual ~SrsSrtEventLoop(); public: ISrsSrtPoller *poller() { return srt_poller_; } public: srs_error_t initialize(); srs_error_t start(); // Interface ISrsCoroutineHandler. public: virtual srs_error_t cycle(); private: ISrsSrtPoller *srt_poller_; ISrsCoroutine *trd_; }; // SrsSrtEventLoop is global singleton instance. extern SrsSrtEventLoop *_srt_eventloop; #endif