SkyWay Linux SDK
読み取り中…
検索中…
一致する文字列を見つけられません
room.hpp
1#ifndef SKYWAY_ROOM_ABSTRACT_ROOM_HPP
2#define SKYWAY_ROOM_ABSTRACT_ROOM_HPP
3
4#include <memory>
5#include <mutex>
6
7#include <skyway/global/interface/worker.hpp>
8
9#include "skyway/room/interface/room.hpp"
10#include "skyway/room/interface/room_domain_cache_manager.hpp"
11#include "skyway/room/interface/room_domain_factory.hpp"
12#include "skyway/room/interface/room_subscription.hpp"
13
14namespace skyway {
15namespace room {
16namespace abstract {
17
19class Room : public interface::Room {
20public:
21 virtual ~Room();
22 std::string Id() override;
23 std::optional<std::string> Name() override;
24 std::optional<std::string> Metadata() override;
25 RoomState State() override;
28 bool UpdateMetadata(const std::string& metadata) override;
29 bool Leave(interface::RoomMember* member) override;
30 bool Close() override;
31 void Dispose() override;
32
34 std::shared_ptr<interface::RoomDomainCacheManager<interface::RoomPublication>>
35 GetRoomPublicationCacheManager() override;
36 std::shared_ptr<interface::RoomDomainCacheManager<interface::RoomSubscription>>
37 GetRoomSubscriptionCacheManager() override;
38 std::shared_ptr<interface::RoomDomainCacheManager<interface::LocalRoomMember>>
39 GetLocalRoomMemberCacheManager() override;
40 std::shared_ptr<interface::RoomDomainCacheManager<interface::RemoteRoomMember>>
41 GetRemoteRoomMemberCacheManager() override;
42 void RunWithRoomEventListenerLock(std::function<void()> function) override;
44protected:
46 class CoreEventListenerAdapter : public core::interface::Channel::EventListener {
47 public:
48 CoreEventListenerAdapter(Room* outer);
49 void OnClosed() override;
50 void OnMetadataUpdated(const std::string& metadata) override;
51 void OnMemberListChanged() override;
52 void OnMemberJoined(std::shared_ptr<core::interface::Member> member) override;
53 void OnMemberLeft(std::shared_ptr<core::interface::Member> member) override;
54 void OnMemberMetadataUpdated(std::shared_ptr<core::interface::Member> member,
55 const std::string& metadata) override;
56 void OnPublicationMetadataUpdated(std::shared_ptr<core::interface::Publication> publication,
57 const std::string& metadata) override;
58 void OnPublicationListChanged() override;
59 void OnStreamPublished(std::shared_ptr<core::interface::Publication> publication) override;
60 void OnStreamUnpublished(
61 std::shared_ptr<core::interface::Publication> publication) override;
62 void OnPublicationEnabled(
63 std::shared_ptr<core::interface::Publication> publication) override;
64 void OnPublicationDisabled(
65 std::shared_ptr<core::interface::Publication> publication) override;
66 void OnSubscriptionListChanged() override;
67 void OnPublicationSubscribed(
68 std::shared_ptr<core::interface::Subscription> subscription) override;
69 void OnPublicationUnsubscribed(
70 std::shared_ptr<core::interface::Subscription> subscription) override;
71
72 private:
73 Room* outer_;
74 };
75
76 Room(std::shared_ptr<core::interface::Channel> core,
77 std::unique_ptr<interface::RoomDomainFactory> factory,
78 std::shared_ptr<interface::RoomDomainCacheManager<interface::RoomPublication>>
79 room_publication_cache_manager,
80 std::shared_ptr<interface::RoomDomainCacheManager<interface::RoomSubscription>>
81 room_subscription_cache_manager,
82 std::shared_ptr<interface::RoomDomainCacheManager<interface::LocalRoomMember>>
83 local_room_member_cache_manager,
84 std::shared_ptr<interface::RoomDomainCacheManager<interface::RemoteRoomMember>>
85 remote_room_member_cache_manager);
86
87 virtual void OnClosed();
88 virtual void OnMetadataUpdated(const std::string& metadata);
89 virtual void OnMemberListChanged() = 0;
90 virtual void OnMemberJoined(std::shared_ptr<core::interface::Member> member) = 0;
91 virtual void OnMemberLeft(std::shared_ptr<core::interface::Member> member) = 0;
92 virtual void OnMemberMetadataUpdated(std::shared_ptr<core::interface::Member> member,
93 const std::string& metadata) = 0;
94 virtual void OnPublicationMetadataUpdated(
95 std::shared_ptr<core::interface::Publication> publication, const std::string& metadata) = 0;
96 virtual void OnPublicationListChanged() = 0;
97 virtual void OnStreamPublished(std::shared_ptr<core::interface::Publication> publication) = 0;
98 virtual void OnStreamUnpublished(std::shared_ptr<core::interface::Publication> publication) = 0;
99 virtual void OnPublicationEnabled(
100 std::shared_ptr<core::interface::Publication> publication) = 0;
101 virtual void OnPublicationDisabled(
102 std::shared_ptr<core::interface::Publication> publication) = 0;
103 virtual void OnSubscriptionListChanged() = 0;
104 virtual void OnPublicationSubscribed(
105 std::shared_ptr<core::interface::Subscription> subscription) = 0;
106 virtual void OnPublicationUnsubscribed(
107 std::shared_ptr<core::interface::Subscription> subscription) = 0;
108
109 std::shared_ptr<core::interface::Channel> core_;
110 std::unique_ptr<interface::RoomDomainFactory> factory_;
111 std::unique_ptr<CoreEventListenerAdapter> core_event_listener_adapter_;
112 std::unique_ptr<global::interface::Worker> event_worker_;
113
114 std::mutex listener_mtx_;
117
118private:
119 RoomState ConvertToPlatformRoomState(core::interface::ChannelState state);
120
121 const std::shared_ptr<interface::RoomDomainCacheManager<interface::RoomPublication>>
122 room_publication_cache_manager_;
123 const std::shared_ptr<interface::RoomDomainCacheManager<interface::RoomSubscription>>
124 room_subscription_cache_manager_;
125 const std::shared_ptr<interface::RoomDomainCacheManager<interface::LocalRoomMember>>
126 local_room_member_cache_manager_;
127 const std::shared_ptr<interface::RoomDomainCacheManager<interface::RemoteRoomMember>>
128 remote_room_member_cache_manager_;
129};
130
131bool EnsureSfuBotExists(std::shared_ptr<core::interface::Channel> channel);
132
133} // namespace abstract
134} // namespace room
135} // namespace skyway
136
137#endif /* SKYWAY_ROOM_ABSTRACT_ROOM_HPP */
Roomの操作を行う抽象クラス
Definition room.hpp:19
std::optional< std::string > Metadata() override
Metadataを取得します。
std::string Id() override
Idを取得します。
RoomState State() override
Stateを取得します。
void RemoveEventListener(interface::Room::EventListener *listener) override
イベントの購読を中止します。
bool Leave(interface::RoomMember *member) override
指定したMemberをRoomから退室させます。
void Dispose() override
Roomを破棄します。破棄されたRoomではイベントが発火しなくなります。
bool Close() override
Roomを閉じます。
void AddEventListener(interface::Room::EventListener *listener) override
イベントを購読します。
std::optional< std::string > Name() override
Nameを取得します。
bool UpdateMetadata(const std::string &metadata) override
Metadataを更新します。
イベントリスナ
Definition room.hpp:78
Roomの操作を行うインターフェース
Definition room.hpp:75
RoomMemberの操作を行うインターフェース
Definition room_member.hpp:23
RoomState
Roomの状態
Definition types.hpp:21