SkyWay for Linux
読み取り中…
検索中…
一致する文字列を見つけられません
room.hpp
1//
2// room.hpp
3// skyway
4//
5// Created by Naoto Takahashi on 2023/11/21.
6// Copyright © 2023 NTT Communications. 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_factory.hpp"
15
16namespace skyway {
17namespace room {
18namespace interface {
19
20enum class RoomType { kP2P, kSfu };
21
25 boost::optional<std::string> name;
27 boost::optional<std::string> metadata;
29 model::Channel::Init ToCore() {
31 core.name = name;
32 core.metadata = metadata;
33 return core;
34 }
36};
37
39struct RoomQuery {
41 boost::optional<std::string> id;
43 boost::optional<std::string> name;
45 model::Channel::Query ToCore() {
47 core.id = id;
48 core.name = name;
49 return core;
50 }
52};
53
57 boost::optional<std::string> name;
59 boost::optional<std::string> metadata;
61 boost::optional<int> keepalive_interval_sec;
63 boost::optional<int> keepalive_interval_gap_sec;
65 model::Member::Init ToCore() {
67 core.name = name;
68 core.metadata = metadata;
71 return core;
72 }
74};
75
77class Room {
78public:
81 public:
82 virtual ~EventListener() = default;
84 virtual void OnClosed() {}
85
88 virtual void OnMetadataUpdated(const std::string& metadata) {}
89
92 virtual void OnMemberListChanged() {}
93
96 virtual void OnMemberJoined(std::unique_ptr<RoomMember> member) {}
97
100 virtual void OnMemberLeft(std::unique_ptr<RoomMember> member) {}
101
105 virtual void OnMemberMetadataUpdated(std::unique_ptr<RoomMember> member,
106 const std::string& metadata) {}
107
111 virtual void OnPublicationMetadataUpdated(std::unique_ptr<RoomPublication> publication,
112 const std::string& metadata) {}
113
116 virtual void OnPublicationListChanged() {}
117
120 virtual void OnStreamPublished(std::unique_ptr<RoomPublication> publication) {}
121
124 virtual void OnStreamUnpublished(std::unique_ptr<RoomPublication> publication) {}
125
128 virtual void OnPublicationEnabled(std::unique_ptr<RoomPublication> publication) {}
129
132 virtual void OnPublicationDisabled(std::unique_ptr<RoomPublication> publication) {}
133
136
139 virtual void OnPublicationSubscribed(std::unique_ptr<RoomSubscription> subscription) {}
140
143 virtual void OnPublicationUnsubscribed(std::unique_ptr<RoomSubscription> subscription) {}
144
147 virtual void OnSubscriptionEnabled(std::unique_ptr<RoomSubscription> subscription) {}
148
151 virtual void OnSubscriptionDisabled(std::unique_ptr<RoomSubscription> subscription) {}
152 };
153 virtual ~Room() = default;
155 virtual std::string Id() = 0;
157 virtual boost::optional<std::string> Name() = 0;
159 virtual RoomType Type() = 0;
161 virtual boost::optional<std::string> Metadata() = 0;
163 virtual core::interface::ChannelState State() = 0;
165 virtual std::vector<std::unique_ptr<RoomPublication>> Publications() = 0;
167 virtual std::vector<std::unique_ptr<RoomSubscription>> Subscriptions() = 0;
169 virtual std::vector<std::unique_ptr<RoomMember>> Members() = 0;
170
172 virtual void AddEventListener(EventListener* listener) = 0;
174 virtual void RemoveEventListener(EventListener* listener) = 0;
176 virtual bool UpdateMetadata(const std::string& metadata) = 0;
178 virtual bool Leave(RoomMember* member) = 0;
180 virtual bool Close() = 0;
182 virtual void Dispose() = 0;
183};
184
186class RoomFactory {
187public:
188 virtual ~RoomFactory() = default;
189 virtual std::shared_ptr<Room> Create(
190 RoomInitOptions options, std::unique_ptr<interface::RoomDomainFactory> domain_factory) = 0;
191 virtual std::shared_ptr<Room> Find(
192 RoomQuery query, std::unique_ptr<interface::RoomDomainFactory> domain_factory) = 0;
193 virtual std::shared_ptr<Room> FindOrCreate(
194 RoomInitOptions options, std::unique_ptr<interface::RoomDomainFactory> domain_factory) = 0;
195};
197
198} // namespace interface
199} // namespace room
200} // namespace skyway
201
202#endif /* SKYWAY_ROOM_INTERFACE_ROOM_HPP */
イベントリスナ
Definition room.hpp:80
virtual void OnPublicationEnabled(std::unique_ptr< RoomPublication > publication)
RoomPublicationがEnableになった後に発生するイベント
Definition room.hpp:128
virtual void OnPublicationSubscribed(std::unique_ptr< RoomSubscription > subscription)
RoomPublicationがSubscribeされた後に発生するイベント
Definition room.hpp:139
virtual void OnSubscriptionDisabled(std::unique_ptr< RoomSubscription > subscription)
RoomSubscriptionがDisableになった後に発生するイベント
Definition room.hpp:151
virtual void OnMetadataUpdated(const std::string &metadata)
このRoomのMetadataが更新された後に発生するイベント
Definition room.hpp:88
virtual void OnSubscriptionEnabled(std::unique_ptr< RoomSubscription > subscription)
RoomSubscriptionがEnableになった後に発生するイベント
Definition room.hpp:147
virtual void OnStreamUnpublished(std::unique_ptr< RoomPublication > publication)
StreamがUnpublishされた後に発生するイベント
Definition room.hpp:124
virtual void OnClosed()
このRoomが閉じられた後に発生するイベント
Definition room.hpp:84
virtual void OnSubscriptionListChanged()
StreamがSubscribeまたはUnsubscribeされた後に発生するイベント
Definition room.hpp:135
virtual void OnPublicationListChanged()
RoomPublicationが作成または削除された後に発生するイベント
Definition room.hpp:116
virtual void OnMemberLeft(std::unique_ptr< RoomMember > member)
RoomからRoomMemberが退出した後に発生するイベント
Definition room.hpp:100
virtual void OnPublicationDisabled(std::unique_ptr< RoomPublication > publication)
RoomPublicationがDisableになった後に発生するイベント
Definition room.hpp:132
virtual void OnMemberListChanged()
RoomMemberが入退出したときに発生するイベント
Definition room.hpp:92
virtual void OnPublicationMetadataUpdated(std::unique_ptr< RoomPublication > publication, const std::string &metadata)
RoomPublicationのMetadataが更新された後に発生するイベント
Definition room.hpp:111
virtual void OnMemberMetadataUpdated(std::unique_ptr< RoomMember > member, const std::string &metadata)
RoomMemberのMetadataが更新された後に発生するイベント
Definition room.hpp:105
virtual void OnPublicationUnsubscribed(std::unique_ptr< RoomSubscription > subscription)
RoomPublicationがUnsubscribeされた後に発生するイベント
Definition room.hpp:143
virtual void OnStreamPublished(std::unique_ptr< RoomPublication > publication)
StreamがPublishされた後に発生するイベント
Definition room.hpp:120
virtual void OnMemberJoined(std::unique_ptr< RoomMember > member)
RoomにRoomMemberが参加した後に発生するイベント
Definition room.hpp:96
Roomの操作を行うインターフェース
Definition room.hpp:77
virtual void Dispose()=0
Roomを破棄します。破棄されたRoomではイベントが発火しなくなります。
virtual bool Close()=0
Roomを閉じます。
virtual void RemoveEventListener(EventListener *listener)=0
イベントの購読を中止します。
virtual std::vector< std::unique_ptr< RoomPublication > > Publications()=0
Roomインスタンスに紐づくPublicationの一覧を取得します。
virtual std::vector< std::unique_ptr< RoomSubscription > > Subscriptions()=0
Roomインスタンスに紐づくSubscriptionの一覧を取得します。
virtual bool UpdateMetadata(const std::string &metadata)=0
Metadataを更新します。
virtual bool Leave(RoomMember *member)=0
指定したMemberをRoomから退室させます。
virtual boost::optional< std::string > Name()=0
Nameを取得します。
virtual RoomType Type()=0
RoomのTypeを取得します。
virtual std::string Id()=0
Idを取得します。
virtual void AddEventListener(EventListener *listener)=0
イベントを購読します。
virtual std::vector< std::unique_ptr< RoomMember > > Members()=0
Roomインスタンスに紐づくRoomMemberの一覧を取得します。
virtual core::interface::ChannelState State()=0
Stateを取得します。
virtual boost::optional< std::string > Metadata()=0
Metadataを取得します。
RoomMemberの操作を行うインターフェース
Definition room_member.hpp:23
CreateもしくはFindOrCreateで指定する情報
Definition domain.hpp:160
boost::optional< std::string > metadata
ChannelのMetadata
Definition domain.hpp:164
boost::optional< std::string > name
Channelの名前
Definition domain.hpp:162
FindもしくはFindOrCreateで指定する情報
Definition domain.hpp:167
boost::optional< std::string > name
Channelの名前
Definition domain.hpp:169
boost::optional< std::string > id
ChannelのId
Definition domain.hpp:171
Join時に使用するメンバー情報
Definition domain.hpp:56
boost::optional< std::string > metadata
Metadata
Definition domain.hpp:64
boost::optional< int > keepalive_interval_gap_sec
生存確認の間隔を超えてChannelからMemberが削除されるまでの時間
Definition domain.hpp:68
boost::optional< std::string > name
名前
Definition domain.hpp:62
boost::optional< int > keepalive_interval_sec
生存確認の間隔
Definition domain.hpp:66
RoomのCreate/FindOrCreateで扱うオプション
Definition room.hpp:23
boost::optional< std::string > name
Name
Definition room.hpp:25
boost::optional< std::string > metadata
Metadata
Definition room.hpp:27
MemberのCreateで扱うオプション
Definition room.hpp:55
boost::optional< std::string > metadata
Metadata
Definition room.hpp:59
boost::optional< int > keepalive_interval_sec
生存確認の間隔
Definition room.hpp:61
boost::optional< int > keepalive_interval_gap_sec
生存確認の間隔を超えてChannelからMemberが削除されるまでの時間
Definition room.hpp:63
boost::optional< std::string > name
Name
Definition room.hpp:57
RoomのFind/FindOrCreateで扱うオプション
Definition room.hpp:39
boost::optional< std::string > name
Name
Definition room.hpp:43
boost::optional< std::string > id
Id
Definition room.hpp:41