SkyWay Linux SDK
読み取り中…
検索中…
一致する文字列を見つけられません
sfu_room.hpp
1#ifndef SKYWAY_ROOM_SFU_SFU_ROOM_HPP
2#define SKYWAY_ROOM_SFU_SFU_ROOM_HPP
3
4#include <skyway/plugin/sfu_bot_plugin/sfu_bot.hpp>
5
6#include "skyway/room/abstract/room.hpp"
7#include "skyway/room/sfu/local_sfu_room_member.hpp"
8#include "skyway/room/sfu/room_domain_factory.hpp"
9
10namespace skyway {
11namespace room {
12namespace sfu {
13
15class SFURoomFactory : public interface::RoomFactory {
16public:
17 std::shared_ptr<interface::Room> Create(
18 interface::RoomInitOptions options,
19 std::unique_ptr<interface::RoomDomainFactory> domain_factory) override;
20 std::shared_ptr<interface::Room> Find(
21 interface::RoomQuery query,
22 std::unique_ptr<interface::RoomDomainFactory> domain_factory) override;
23 std::shared_ptr<interface::Room> FindOrCreate(
24 interface::RoomInitOptions options,
25 std::unique_ptr<interface::RoomDomainFactory> domain_factory) override;
26};
28
30class SFURoom : public abstract::Room, public std::enable_shared_from_this<SFURoom> {
31public:
33 SFURoom(std::shared_ptr<core::interface::Channel> channel,
34 std::unique_ptr<interface::RoomDomainFactory> factory);
36
37 ~SFURoom() override;
38 RoomType Type() override;
39
41 std::vector<std::shared_ptr<interface::RoomPublication>> Publications() override;
42
44 std::vector<std::shared_ptr<interface::RoomSubscription>> Subscriptions() override;
45
47 std::vector<std::shared_ptr<interface::RoomMember>> Members() override;
48
50 static std::shared_ptr<SFURoom> Create(
52 std::unique_ptr<interface::RoomFactory> room_factory = std::make_unique<SFURoomFactory>(),
53 std::unique_ptr<interface::RoomDomainFactory> domain_factory =
54 std::make_unique<RoomDomainFactory>());
55
57 static std::shared_ptr<SFURoom> Create();
58
60 static std::shared_ptr<SFURoom> Find(
62 std::unique_ptr<interface::RoomFactory> room_factory = std::make_unique<SFURoomFactory>(),
63 std::unique_ptr<interface::RoomDomainFactory> domain_factory =
64 std::make_unique<RoomDomainFactory>());
65
67 static std::shared_ptr<SFURoom> FindOrCreate(
69 std::unique_ptr<interface::RoomFactory> room_factory = std::make_unique<SFURoomFactory>(),
70 std::unique_ptr<interface::RoomDomainFactory> domain_factory =
71 std::make_unique<RoomDomainFactory>());
72
74 std::shared_ptr<LocalSFURoomMember> Join(interface::RoomMemberInitOptions options);
75
77 std::shared_ptr<plugin::sfu_bot::SfuBot> GetSFUBot();
79
80protected:
82 // core::interface::Channel::EventListener
83 void OnMemberListChanged() override;
84 void OnMemberJoined(std::shared_ptr<core::interface::Member> member) override;
85 void OnMemberLeft(std::shared_ptr<core::interface::Member> member) override;
86 void OnMemberMetadataUpdated(std::shared_ptr<core::interface::Member> member,
87 const std::string& metadata) override;
88 void OnPublicationMetadataUpdated(std::shared_ptr<core::interface::Publication> publication,
89 const std::string& metadata) override;
90 void OnPublicationListChanged() override;
91 void OnStreamPublished(std::shared_ptr<core::interface::Publication> publication) override;
92 void OnStreamUnpublished(std::shared_ptr<core::interface::Publication> publication) override;
93 void OnPublicationEnabled(std::shared_ptr<core::interface::Publication> publication) override;
94 void OnPublicationDisabled(std::shared_ptr<core::interface::Publication> publication) override;
95 void OnSubscriptionListChanged() override;
96 void OnPublicationSubscribed(
97 std::shared_ptr<core::interface::Subscription> subscription) override;
98 void OnPublicationUnsubscribed(
99 std::shared_ptr<core::interface::Subscription> subscription) override;
101
102private:
103 static std::shared_ptr<SFURoom> CreateShared(
104 std::shared_ptr<core::interface::Channel> channel,
105 std::unique_ptr<interface::RoomDomainFactory> factory);
106
107public:
109 friend class SFURoomFactory;
110 friend class SFURoomTest;
111 friend class LocalSFURoomMemberTest;
113};
114
115} // namespace sfu
116} // namespace room
117} // namespace skyway
118
119#endif /* SKYWAY_ROOM_SFU_SFU_ROOM_HPP */
Roomの操作を行う抽象クラス
Definition room.hpp:19
SFURoomの操作を行うクラス
Definition sfu_room.hpp:30
std::vector< std::shared_ptr< interface::RoomMember > > Members() override
SFURoomに存在するMemberを取得します
std::shared_ptr< LocalSFURoomMember > Join(interface::RoomMemberInitOptions options)
SFURoomへ参加します。
std::vector< std::shared_ptr< interface::RoomSubscription > > Subscriptions() override
SFURoomに存在するSubscriptionを取得します。
static std::shared_ptr< SFURoom > Create()
SFURoomを作成します。
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を作成します。
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の検索をし、存在しなければ作成します。
RoomType Type() override
RoomのTypeを取得します。
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を取得します。
RoomType
Roomの種別
Definition types.hpp:18
RoomのCreate/FindOrCreateで扱うオプション
Definition room.hpp:21
MemberのCreateで扱うオプション
Definition room.hpp:53
RoomのFind/FindOrCreateで扱うオプション
Definition room.hpp:37