diff --git a/trunk/src/app/srs_app_srt_server.cpp b/trunk/src/app/srs_app_srt_server.cpp index 0a23fcc61..38baab9ab 100644 --- a/trunk/src/app/srs_app_srt_server.cpp +++ b/trunk/src/app/srs_app_srt_server.cpp @@ -359,7 +359,7 @@ srs_error_t SrsSrtEventLoop::initialize() { srs_error_t err = srs_success; - srt_poller_ = new SrsSrtPoller(); + srt_poller_ = srs_srt_poller_new(); if ((err = srt_poller_->initialize()) != srs_success) { return srs_error_wrap(err, "srt poller initialize"); diff --git a/trunk/src/app/srs_app_srt_server.hpp b/trunk/src/app/srs_app_srt_server.hpp index 886ac21f9..386806cf8 100644 --- a/trunk/src/app/srs_app_srt_server.hpp +++ b/trunk/src/app/srs_app_srt_server.hpp @@ -111,7 +111,7 @@ public: SrsSrtEventLoop(); virtual ~SrsSrtEventLoop(); public: - SrsSrtPoller* poller() { return srt_poller_; } + ISrsSrtPoller* poller() { return srt_poller_; } public: srs_error_t initialize(); srs_error_t start(); @@ -119,7 +119,7 @@ public: public: virtual srs_error_t cycle(); private: - SrsSrtPoller* srt_poller_; + ISrsSrtPoller* srt_poller_; SrsCoroutine* trd_; }; diff --git a/trunk/src/protocol/srs_protocol_srt.cpp b/trunk/src/protocol/srs_protocol_srt.cpp index 6892a4839..0e61aadfc 100644 --- a/trunk/src/protocol/srs_protocol_srt.cpp +++ b/trunk/src/protocol/srs_protocol_srt.cpp @@ -439,6 +439,24 @@ srs_error_t SrsSrtStat::fetch(SRTSOCKET srt_fd, bool clear) return err; } +class SrsSrtPoller : public ISrsSrtPoller +{ +public: + SrsSrtPoller(); + virtual ~SrsSrtPoller(); +public: + srs_error_t initialize(); + srs_error_t add_socket(SrsSrtSocket* srt_skt); + srs_error_t mod_socket(SrsSrtSocket* srt_skt); + srs_error_t del_socket(SrsSrtSocket* srt_skt); + srs_error_t wait(int timeout_ms, int* pn_fds); +private: + // Find SrsSrtSocket* context by SRTSOCKET. + std::map fd_sockets_; + int srt_epoller_fd_; + std::vector events_; +}; + SrsSrtPoller::SrsSrtPoller() { srt_epoller_fd_ = -1; @@ -556,7 +574,20 @@ srs_error_t SrsSrtPoller::mod_socket(SrsSrtSocket* srt_skt) return err; } -SrsSrtSocket::SrsSrtSocket(SrsSrtPoller* srt_poller, SRTSOCKET srt_fd) +ISrsSrtPoller::ISrsSrtPoller() +{ +} + +ISrsSrtPoller::~ISrsSrtPoller() +{ +} + +ISrsSrtPoller* srs_srt_poller_new() +{ + return new SrsSrtPoller(); +} + +SrsSrtSocket::SrsSrtSocket(ISrsSrtPoller* srt_poller, SRTSOCKET srt_fd) { srt_poller_ = srt_poller; srt_fd_ = srt_fd; diff --git a/trunk/src/protocol/srs_protocol_srt.hpp b/trunk/src/protocol/srs_protocol_srt.hpp index 4cbb5a7f8..df2cb309b 100644 --- a/trunk/src/protocol/srs_protocol_srt.hpp +++ b/trunk/src/protocol/srs_protocol_srt.hpp @@ -86,31 +86,27 @@ public: }; // Srt poller, subscribe/unsubscribed events and wait them fired. -class SrsSrtPoller +class ISrsSrtPoller { public: - SrsSrtPoller(); - virtual ~SrsSrtPoller(); + ISrsSrtPoller(); + virtual ~ISrsSrtPoller(); public: - srs_error_t initialize(); - srs_error_t add_socket(SrsSrtSocket* srt_skt); - srs_error_t mod_socket(SrsSrtSocket* srt_skt); - srs_error_t del_socket(SrsSrtSocket* srt_skt); + virtual srs_error_t initialize() = 0; + virtual srs_error_t add_socket(SrsSrtSocket* srt_skt) = 0; + virtual srs_error_t mod_socket(SrsSrtSocket* srt_skt) = 0; + virtual srs_error_t del_socket(SrsSrtSocket* srt_skt) = 0; // Wait for the fds in its epoll to be fired in specified timeout_ms, where the pn_fds is the number of active fds. // Note that for ST, please always use timeout_ms(0) and switch coroutine by yourself. - srs_error_t wait(int timeout_ms, int* pn_fds); -private: - // Find SrsSrtSocket* context by SRTSOCKET. - std::map fd_sockets_; - int srt_epoller_fd_; - std::vector events_; + virtual srs_error_t wait(int timeout_ms, int* pn_fds) = 0; }; +ISrsSrtPoller* srs_srt_poller_new(); // Srt ST socket, wrap SRT io and make it adapt to ST-thread. class SrsSrtSocket { public: - SrsSrtSocket(SrsSrtPoller* srt_poller, SRTSOCKET srt_fd); + SrsSrtSocket(ISrsSrtPoller* srt_poller, SRTSOCKET srt_fd); virtual ~SrsSrtSocket(); public: // IO API srs_error_t connect(const std::string& ip, int port); @@ -171,7 +167,7 @@ private: // Event of this socket subscribed. int events_; // Srt poller which this socket attach to. - SrsSrtPoller* srt_poller_; + ISrsSrtPoller* srt_poller_; }; #endif diff --git a/trunk/src/utest/srs_utest_srt.cpp b/trunk/src/utest/srs_utest_srt.cpp index 1fd5d966d..bd3dd49a1 100644 --- a/trunk/src/utest/srs_utest_srt.cpp +++ b/trunk/src/utest/srs_utest_srt.cpp @@ -23,7 +23,7 @@ VOID TEST(ServiceSrtPoller, SrtPollOperateSocket) { srs_error_t err = srs_success; - SrsSrtPoller* srt_poller = new SrsSrtPoller(); + ISrsSrtPoller* srt_poller = srs_srt_poller_new(); HELPER_EXPECT_SUCCESS(srt_poller->initialize()); SRTSOCKET srt_fd = SRT_INVALID_SOCK;