SkyWay Linux SDK
読み取り中…
検索中…
一致する文字列を見つけられません
room.hpp
1//
2// room.hpp
3// skyway
4//
5// Created by Naoto Takahashi on 2023/11/21.
6// Copyright © 2023 NTT DOCOMO BUSINESS, Inc. All rights reserved.
7//
8
9#ifndef SKYWAY_ROOM_INTERFACE_ROOM_HPP
10#define SKYWAY_ROOM_INTERFACE_ROOM_HPP
11
12#include <skyway/core/interface/channel.hpp>
13
14#include "skyway/room/interface/room_domain_cache_manager.hpp"
15#include "skyway/room/interface/room_domain_factory.hpp"
16
17namespace skyway {
18namespace room {
19namespace interface {
20
21enum class RoomType { kP2P, kSFU };
22
26 std::optional<std::string> name;
28 std::optional<std::string> metadata;
30 model::Channel::Init ToCore() {
32 core.name = name;
33 core.metadata = metadata;
34 return core;
35 }
37};
38
40struct RoomQuery {
42 std::optional<std::string> id;
44 std::optional<std::string> name;
46 model::Channel::Query ToCore() {
48 core.id = id;
49 core.name = name;
50 return core;
51 }
53};
54
58 std::optional<std::string> name;
60 std::optional<std::string> metadata;
62 std::optional<int> keepalive_interval_sec;
64 std::optional<int> keepalive_interval_gap_sec;
66 model::Member::Init ToCore() {
68 core.name = name;
69 core.metadata = metadata;
72 return core;
73 }
75};
76
78class Room {
79public:
82 public:
83 virtual ~EventListener() = default;
85 virtual void OnClosed() {}
86
89 virtual void OnMetadataUpdated(const std::string& metadata) {}
90
93 virtual void OnMemberListChanged() {}
94
97 virtual void OnMemberJoined(std::shared_ptr<RoomMember> member) {}
98
101 virtual void OnMemberLeft(std::shared_ptr<RoomMember> member) {}
102
106 virtual void OnMemberMetadataUpdated(std::shared_ptr<RoomMember> member,
107 const std::string& metadata) {}
108
112 virtual void OnPublicationMetadataUpdated(std::shared_ptr<RoomPublication> publication,
113 const std::string& metadata) {}
114
117 virtual void OnPublicationListChanged() {}
118
121 virtual void OnStreamPublished(std::shared_ptr<RoomPublication> publication) {}
122
125 virtual void OnStreamUnpublished(std::shared_ptr<RoomPublication> publication) {}
126
129 virtual void OnPublicationEnabled(std::shared_ptr<RoomPublication> publication) {}
130
133 virtual void OnPublicationDisabled(std::shared_ptr<RoomPublication> publication) {}
134
137
140 virtual void OnPublicationSubscribed(std::shared_ptr<RoomSubscription> subscription) {}
141
144 virtual void OnPublicationUnsubscribed(std::shared_ptr<RoomSubscription> subscription) {}
145
148 virtual void OnSubscriptionEnabled(std::shared_ptr<RoomSubscription> subscription) {}
149
152 virtual void OnSubscriptionDisabled(std::shared_ptr<RoomSubscription> subscription) {}
153 };
154 virtual ~Room() = default;
156 virtual std::string Id() = 0;
158 virtual std::optional<std::string> Name() = 0;
160 virtual RoomType Type() = 0;
162 virtual std::optional<std::string> Metadata() = 0;
164 virtual core::interface::ChannelState State() = 0;
166 virtual std::vector<std::shared_ptr<RoomPublication>> Publications() = 0;
168 virtual std::vector<std::shared_ptr<RoomSubscription>> Subscriptions() = 0;
170 virtual std::vector<std::shared_ptr<RoomMember>> Members() = 0;
171
173 virtual void AddEventListener(EventListener* listener) = 0;
175 virtual void RemoveEventListener(EventListener* listener) = 0;
177 virtual bool UpdateMetadata(const std::string& metadata) = 0;
179 virtual bool Leave(RoomMember* member) = 0;
181 virtual bool Close() = 0;
183 virtual void Dispose() = 0;
184
186 virtual std::shared_ptr<interface::RoomDomainCacheManager<interface::RoomPublication>>
187 GetRoomPublicationCacheManager() = 0;
188 virtual std::shared_ptr<interface::RoomDomainCacheManager<interface::RoomSubscription>>
189 GetRoomSubscriptionCacheManager() = 0;
190 virtual std::shared_ptr<interface::RoomDomainCacheManager<interface::LocalRoomMember>>
191 GetLocalRoomMemberCacheManager() = 0;
192 virtual std::shared_ptr<interface::RoomDomainCacheManager<interface::RemoteRoomMember>>
193 GetRemoteRoomMemberCacheManager() = 0;
195};
196
198class RoomFactory {
199public:
200 virtual ~RoomFactory() = default;
201 virtual std::shared_ptr<Room> Create(
202 RoomInitOptions options, std::unique_ptr<interface::RoomDomainFactory> domain_factory) = 0;
203 virtual std::shared_ptr<Room> Find(
204 RoomQuery query, std::unique_ptr<interface::RoomDomainFactory> domain_factory) = 0;
205 virtual std::shared_ptr<Room> FindOrCreate(
206 RoomInitOptions options, std::unique_ptr<interface::RoomDomainFactory> domain_factory) = 0;
207};
209
210} // namespace interface
211} // namespace room
212} // namespace skyway
213
214#endif /* SKYWAY_ROOM_INTERFACE_ROOM_HPP */
イベントリスナ
Definition room.hpp:81
virtual void OnMetadataUpdated(const std::string &metadata)
このRoomのMetadataが更新された後に発生するイベント
Definition room.hpp:89
virtual void OnPublicationEnabled(std::shared_ptr< RoomPublication > publication)
RoomPublicationがEnableになった後に発生するイベント
Definition room.hpp:129
virtual void OnClosed()
このRoomが閉じられた後に発生するイベント
Definition room.hpp:85
virtual void OnMemberMetadataUpdated(std::shared_ptr< RoomMember > member, const std::string &metadata)
RoomMemberのMetadataが更新された後に発生するイベント
Definition room.hpp:106
virtual void OnPublicationUnsubscribed(std::shared_ptr< RoomSubscription > subscription)
RoomPublicationがUnsubscribeされた後に発生するイベント
Definition room.hpp:144
virtual void OnPublicationDisabled(std::shared_ptr< RoomPublication > publication)
RoomPublicationがDisableになった後に発生するイベント
Definition room.hpp:133
virtual void OnSubscriptionListChanged()
StreamがSubscribeまたはUnsubscribeされた後に発生するイベント
Definition room.hpp:136
virtual void OnMemberJoined(std::shared_ptr< RoomMember > member)
RoomにRoomMemberが参加した後に発生するイベント
Definition room.hpp:97
virtual void OnStreamUnpublished(std::shared_ptr< RoomPublication > publication)
StreamがUnpublishされた後に発生するイベント
Definition room.hpp:125
virtual void OnPublicationListChanged()
RoomPublicationが作成または削除された後に発生するイベント
Definition room.hpp:117
virtual void OnPublicationSubscribed(std::shared_ptr< RoomSubscription > subscription)
RoomPublicationがSubscribeされた後に発生するイベント
Definition room.hpp:140
virtual void OnStreamPublished(std::shared_ptr< RoomPublication > publication)
StreamがPublishされた後に発生するイベント
Definition room.hpp:121
virtual void OnSubscriptionDisabled(std::shared_ptr< RoomSubscription > subscription)
RoomSubscriptionがDisableになった後に発生するイベント
Definition room.hpp:152
virtual void OnPublicationMetadataUpdated(std::shared_ptr< RoomPublication > publication, const std::string &metadata)
RoomPublicationのMetadataが更新された後に発生するイベント
Definition room.hpp:112
virtual void OnMemberListChanged()
RoomMemberが入退出したときに発生するイベント
Definition room.hpp:93
virtual void OnSubscriptionEnabled(std::shared_ptr< RoomSubscription > subscription)
RoomSubscriptionがEnableになった後に発生するイベント
Definition room.hpp:148
virtual void OnMemberLeft(std::shared_ptr< RoomMember > member)
RoomからRoomMemberが退出した後に発生するイベント
Definition room.hpp:101
Roomの操作を行うインターフェース
Definition room.hpp:78
virtual std::vector< std::shared_ptr< RoomPublication > > Publications()=0
Roomインスタンスに紐づくPublicationの一覧を取得します。
virtual void Dispose()=0
Roomを破棄します。破棄されたRoomではイベントが発火しなくなります。
virtual bool Close()=0
Roomを閉じます。
virtual std::optional< std::string > Name()=0
Nameを取得します。
virtual void RemoveEventListener(EventListener *listener)=0
イベントの購読を中止します。
virtual std::vector< std::shared_ptr< RoomMember > > Members()=0
Roomインスタンスに紐づくRoomMemberの一覧を取得します。
virtual bool UpdateMetadata(const std::string &metadata)=0
Metadataを更新します。
virtual bool Leave(RoomMember *member)=0
指定したMemberをRoomから退室させます。
virtual std::vector< std::shared_ptr< RoomSubscription > > Subscriptions()=0
Roomインスタンスに紐づくSubscriptionの一覧を取得します。
virtual RoomType Type()=0
RoomのTypeを取得します。
virtual std::string Id()=0
Idを取得します。
virtual std::optional< std::string > Metadata()=0
Metadataを取得します。
virtual void AddEventListener(EventListener *listener)=0
イベントを購読します。
virtual core::interface::ChannelState State()=0
Stateを取得します。
RoomMemberの操作を行うインターフェース
Definition room_member.hpp:23
CreateもしくはFindOrCreateで指定する情報
Definition domain.hpp:160
std::optional< std::string > name
Channelの名前
Definition domain.hpp:162
std::optional< std::string > metadata
ChannelのMetadata
Definition domain.hpp:164
FindもしくはFindOrCreateで指定する情報
Definition domain.hpp:167
std::optional< std::string > name
Channelの名前
Definition domain.hpp:169
std::optional< std::string > id
ChannelのId
Definition domain.hpp:171
Join時に使用するメンバー情報
Definition domain.hpp:56
std::optional< std::string > metadata
Metadata
Definition domain.hpp:64
std::optional< std::string > name
名前
Definition domain.hpp:62
std::optional< int > keepalive_interval_sec
生存確認の間隔
Definition domain.hpp:66
std::optional< int > keepalive_interval_gap_sec
生存確認の間隔を超えてChannelからMemberが削除されるまでの時間
Definition domain.hpp:68
RoomのCreate/FindOrCreateで扱うオプション
Definition room.hpp:24
std::optional< std::string > name
Name
Definition room.hpp:26
std::optional< std::string > metadata
Metadata
Definition room.hpp:28
MemberのCreateで扱うオプション
Definition room.hpp:56
std::optional< int > keepalive_interval_gap_sec
生存確認の間隔を超えてChannelからMemberが削除されるまでの時間
Definition room.hpp:64
std::optional< std::string > name
Name
Definition room.hpp:58
std::optional< std::string > metadata
Metadata
Definition room.hpp:60
std::optional< int > keepalive_interval_sec
生存確認の間隔
Definition room.hpp:62
RoomのFind/FindOrCreateで扱うオプション
Definition room.hpp:40
std::optional< std::string > name
Name
Definition room.hpp:44
std::optional< std::string > id
Id
Definition room.hpp:42