SkyWay Linux SDK
読み取り中…
検索中…
一致する文字列を見つけられません
room.hpp
1#ifndef SKYWAY_ROOM_ROOM_HPP
2#define SKYWAY_ROOM_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/local_room_member.hpp"
8#include "skyway/room/room_domain_factory.hpp"
9
10namespace skyway {
11namespace room {
12
14class RoomFactory : public interface::RoomFactory {
15public:
16 std::shared_ptr<interface::Room> Create(
17 interface::RoomInitOptions options,
18 std::unique_ptr<interface::RoomDomainFactory> domain_factory) override;
19 std::shared_ptr<interface::Room> Find(
20 interface::RoomQuery query,
21 std::unique_ptr<interface::RoomDomainFactory> domain_factory) override;
22 std::shared_ptr<interface::Room> FindOrCreate(
23 interface::RoomInitOptions options,
24 std::unique_ptr<interface::RoomDomainFactory> domain_factory) override;
25};
27
29class Room : public abstract::Room, public std::enable_shared_from_this<Room> {
30public:
32 Room(std::shared_ptr<core::interface::Channel> channel,
33 std::unique_ptr<interface::RoomDomainFactory> factory);
35
36 ~Room() override;
37 RoomType Type() override;
38
40 std::vector<std::shared_ptr<interface::RoomPublication>> Publications() override;
41
43 std::vector<std::shared_ptr<interface::RoomSubscription>> Subscriptions() override;
44
46 std::vector<std::shared_ptr<interface::RoomMember>> Members() override;
47
49 static std::shared_ptr<Room> Create(
51 std::unique_ptr<interface::RoomFactory> room_factory = std::make_unique<RoomFactory>(),
52 std::unique_ptr<interface::RoomDomainFactory> domain_factory =
53 std::make_unique<RoomDomainFactory>());
54
56 static std::shared_ptr<Room> Create();
57
59 static std::shared_ptr<Room> Find(
61 std::unique_ptr<interface::RoomFactory> room_factory = std::make_unique<RoomFactory>(),
62 std::unique_ptr<interface::RoomDomainFactory> domain_factory =
63 std::make_unique<RoomDomainFactory>());
64
66 static std::shared_ptr<Room> FindOrCreate(
68 std::unique_ptr<interface::RoomFactory> room_factory = std::make_unique<RoomFactory>(),
69 std::unique_ptr<interface::RoomDomainFactory> domain_factory =
70 std::make_unique<RoomDomainFactory>());
71
73 std::shared_ptr<LocalRoomMember> Join(interface::RoomMemberInitOptions options);
74
76 std::shared_ptr<plugin::sfu_bot::SfuBot> GetSfuBot();
78
79protected:
81 // core::interface::Channel::EventListener
82 void OnMemberListChanged() override;
83 void OnMemberJoined(std::shared_ptr<core::interface::Member> member) override;
84 void OnMemberLeft(std::shared_ptr<core::interface::Member> member) override;
85 void OnMemberMetadataUpdated(std::shared_ptr<core::interface::Member> member,
86 const std::string& metadata) override;
87 void OnPublicationMetadataUpdated(std::shared_ptr<core::interface::Publication> publication,
88 const std::string& metadata) override;
89 void OnPublicationListChanged() override;
90 void OnStreamPublished(std::shared_ptr<core::interface::Publication> publication) override;
91 void OnStreamUnpublished(std::shared_ptr<core::interface::Publication> publication) override;
92 void OnPublicationEnabled(std::shared_ptr<core::interface::Publication> publication) override;
93 void OnPublicationDisabled(std::shared_ptr<core::interface::Publication> publication) override;
94 void OnSubscriptionListChanged() override;
95 void OnPublicationSubscribed(
96 std::shared_ptr<core::interface::Subscription> subscription) override;
97 void OnPublicationUnsubscribed(
98 std::shared_ptr<core::interface::Subscription> subscription) override;
100
101private:
102 static std::shared_ptr<Room> CreateShared(
103 std::shared_ptr<core::interface::Channel> channel,
104 std::unique_ptr<interface::RoomDomainFactory> factory);
105
106 bool IsSfuOriginPublication(std::shared_ptr<core::interface::Publication> publication);
107
108public:
110 friend class RoomFactory;
112};
113
114} // namespace room
115} // namespace skyway
116
117#endif /* SKYWAY_ROOM_ROOM_HPP */
DefaultRoomの操作を行うクラス
Definition room.hpp:29
std::shared_ptr< LocalRoomMember > Join(interface::RoomMemberInitOptions options)
Roomへ参加します。
static std::shared_ptr< Room > FindOrCreate(interface::RoomInitOptions options, std::unique_ptr< interface::RoomFactory > room_factory=std::make_unique< RoomFactory >(), std::unique_ptr< interface::RoomDomainFactory > domain_factory=std::make_unique< RoomDomainFactory >())
Roomの検索をし、存在しなければ作成します。
std::vector< std::shared_ptr< interface::RoomPublication > > Publications() override
Roomに存在するPublicationを取得します。
static std::shared_ptr< Room > Find(interface::RoomQuery query, std::unique_ptr< interface::RoomFactory > room_factory=std::make_unique< RoomFactory >(), std::unique_ptr< interface::RoomDomainFactory > domain_factory=std::make_unique< RoomDomainFactory >())
Roomの検索をします。
std::vector< std::shared_ptr< interface::RoomSubscription > > Subscriptions() override
Roomに存在するSubscriptionを取得します。
std::vector< std::shared_ptr< interface::RoomMember > > Members() override
Roomに存在するMemberを取得します。
static std::shared_ptr< Room > Create()
Roomを作成します。
RoomType Type() override
RoomのTypeを取得します。
static std::shared_ptr< Room > Create(interface::RoomInitOptions options, std::unique_ptr< interface::RoomFactory > room_factory=std::make_unique< RoomFactory >(), std::unique_ptr< interface::RoomDomainFactory > domain_factory=std::make_unique< RoomDomainFactory >())
Roomを作成します。
Roomの操作を行う抽象クラス
Definition room.hpp:19
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