SkyWay Linux SDK
読み取り中…
検索中…
一致する文字列を見つけられません
sfu_room.hpp
1//
2// © NTT DOCOMO BUSINESS, Inc. All Rights Reserved.
3//
4
5#ifndef SKYWAY_ROOM_SFU_SFU_ROOM_HPP
6#define SKYWAY_ROOM_SFU_SFU_ROOM_HPP
7
8#include <skyway/plugin/sfu_bot_plugin/sfu_bot.hpp>
9
10#include "skyway/room/abstract/room.hpp"
11#include "skyway/room/sfu/local_sfu_room_member.hpp"
12#include "skyway/room/sfu/room_domain_factory.hpp"
13
14namespace skyway {
15namespace room {
16namespace sfu {
17
19class SFURoomFactory : public interface::RoomFactory {
20public:
21 std::shared_ptr<interface::Room> Create(
22 interface::RoomInitOptions options,
23 std::unique_ptr<interface::RoomDomainFactory> domain_factory) override;
24 std::shared_ptr<interface::Room> Find(
25 interface::RoomQuery query,
26 std::unique_ptr<interface::RoomDomainFactory> domain_factory) override;
27 std::shared_ptr<interface::Room> FindOrCreate(
28 interface::RoomInitOptions options,
29 std::unique_ptr<interface::RoomDomainFactory> domain_factory) override;
30};
32
34class SFURoom : public abstract::Room, public std::enable_shared_from_this<SFURoom> {
35public:
36 SFURoom(std::shared_ptr<core::interface::Channel> channel,
37 std::unique_ptr<interface::RoomDomainFactory> factory);
38 interface::RoomType Type() override;
39
41 std::vector<std::shared_ptr<interface::RoomPublication>> Publications() override;
43 std::vector<std::shared_ptr<interface::RoomSubscription>> Subscriptions() override;
45 std::vector<std::shared_ptr<interface::RoomMember>> Members() override;
46
48 static std::shared_ptr<SFURoom> Create(
50 std::unique_ptr<interface::RoomFactory> room_factory = std::make_unique<SFURoomFactory>(),
51 std::unique_ptr<interface::RoomDomainFactory> domain_factory =
52 std::make_unique<RoomDomainFactory>());
54 static std::shared_ptr<SFURoom> Create();
56 static std::shared_ptr<SFURoom> Find(
58 std::unique_ptr<interface::RoomFactory> room_factory = std::make_unique<SFURoomFactory>(),
59 std::unique_ptr<interface::RoomDomainFactory> domain_factory =
60 std::make_unique<RoomDomainFactory>());
62 static std::shared_ptr<SFURoom> FindOrCreate(
64 std::unique_ptr<interface::RoomFactory> room_factory = std::make_unique<SFURoomFactory>(),
65 std::unique_ptr<interface::RoomDomainFactory> domain_factory =
66 std::make_unique<RoomDomainFactory>());
68 std::shared_ptr<LocalSFURoomMember> Join(interface::RoomMemberInitOptions options);
69
71 std::shared_ptr<plugin::sfu_bot::SfuBot> GetSFUBot();
73
74protected:
75 // core::interface::Channel::EventListener
76 void OnMemberListChanged() override;
77 void OnMemberJoined(std::shared_ptr<core::interface::Member> member) override;
78 void OnMemberLeft(std::shared_ptr<core::interface::Member> member) override;
79 void OnMemberMetadataUpdated(std::shared_ptr<core::interface::Member> member,
80 const std::string& metadata) override;
81 void OnPublicationMetadataUpdated(std::shared_ptr<core::interface::Publication> publication,
82 const std::string& metadata) override;
83 void OnPublicationListChanged() override;
84 void OnStreamPublished(std::shared_ptr<core::interface::Publication> publication) override;
85 void OnStreamUnpublished(std::shared_ptr<core::interface::Publication> publication) override;
86 void OnPublicationEnabled(std::shared_ptr<core::interface::Publication> publication) override;
87 void OnPublicationDisabled(std::shared_ptr<core::interface::Publication> publication) override;
89 void OnPublicationSubscribed(
90 std::shared_ptr<core::interface::Subscription> subscription) override;
91 void OnPublicationUnsubscribed(
92 std::shared_ptr<core::interface::Subscription> subscription) override;
93
94private:
95 static std::shared_ptr<SFURoom> CreateShared(
96 std::shared_ptr<core::interface::Channel> channel,
97 std::unique_ptr<interface::RoomDomainFactory> factory);
98
99public:
101 friend class SFURoomFactory;
102 friend class SFURoomTest;
103 friend class LocalSFURoomMemberTest;
105};
106
107} // namespace sfu
108} // namespace room
109} // namespace skyway
110
111#endif /* SKYWAY_ROOM_SFU_SFU_ROOM_HPP */
Roomの操作を行う抽象クラス
Definition room.hpp:19
SFURoomの操作を行うクラス
Definition sfu_room.hpp:34
void OnSubscriptionListChanged() override
StreamがSubscribeまたはUnsubscribeされた時に発生するイベント
std::vector< std::shared_ptr< interface::RoomMember > > Members() override
SFURoomに存在するMemberを取得します
std::shared_ptr< LocalSFURoomMember > Join(interface::RoomMemberInitOptions options)
SFURoomへ参加します。
interface::RoomType Type() override
RoomのTypeを取得します。
std::vector< std::shared_ptr< interface::RoomSubscription > > Subscriptions() override
SFURoomに存在するSubscriptionを取得します。
static std::shared_ptr< SFURoom > Create()
SFURoomを作成します。
void OnMemberListChanged() override
Member が入退出したときに発生するイベント
static std::shared_ptr< SFURoom > Create(interface::RoomInitOptions options, std::unique_ptr< interface::RoomFactory > room_factory=std::make_unique< SFURoomFactory >(), std::unique_ptr< interface::RoomDomainFactory > domain_factory=std::make_unique< RoomDomainFactory >())
SFURoomを作成します。
void OnPublicationListChanged() override
Publicationが作成または削除された時に発生するイベント
static std::shared_ptr< SFURoom > FindOrCreate(interface::RoomInitOptions options, std::unique_ptr< interface::RoomFactory > room_factory=std::make_unique< SFURoomFactory >(), std::unique_ptr< interface::RoomDomainFactory > domain_factory=std::make_unique< RoomDomainFactory >())
SFURoomの検索をし、存在しなければ作成します。
static std::shared_ptr< SFURoom > Find(interface::RoomQuery query, std::unique_ptr< interface::RoomFactory > room_factory=std::make_unique< SFURoomFactory >(), std::unique_ptr< interface::RoomDomainFactory > domain_factory=std::make_unique< RoomDomainFactory >())
SFURoomの検索をします。
std::vector< std::shared_ptr< interface::RoomPublication > > Publications() override
SFURoomに存在するPublicationを取得します。
RoomのCreate/FindOrCreateで扱うオプション
Definition room.hpp:20
MemberのCreateで扱うオプション
Definition room.hpp:52
RoomのFind/FindOrCreateで扱うオプション
Definition room.hpp:36