SkyWay Linux SDK
読み取り中…
検索中…
一致する文字列を見つけられません
p2p_room.hpp
1#ifndef SKYWAY_ROOM_P2P_P2P_ROOM_HPP
2#define SKYWAY_ROOM_P2P_P2P_ROOM_HPP
3
4#include "skyway/room/abstract/room.hpp"
5#include "skyway/room/p2p/local_p2p_room_member.hpp"
6#include "skyway/room/p2p/room_domain_factory.hpp"
7
8namespace skyway {
9namespace room {
10namespace p2p {
11
13class P2PRoomFactory : public interface::RoomFactory {
14public:
15 std::shared_ptr<interface::Room> Create(
16 interface::RoomInitOptions options,
17 std::unique_ptr<interface::RoomDomainFactory> domain_factory) override;
18 std::shared_ptr<interface::Room> Find(
19 interface::RoomQuery query,
20 std::unique_ptr<interface::RoomDomainFactory> domain_factory) override;
21 std::shared_ptr<interface::Room> FindOrCreate(
22 interface::RoomInitOptions options,
23 std::unique_ptr<interface::RoomDomainFactory> domain_factory) override;
24};
26
28class P2PRoom : public abstract::Room, public std::enable_shared_from_this<P2PRoom> {
29public:
31 P2PRoom(std::shared_ptr<core::interface::Channel> channel,
32 std::unique_ptr<interface::RoomDomainFactory> factory);
34
35 ~P2PRoom() override;
36 RoomType Type() override;
37
39 std::vector<std::shared_ptr<interface::RoomPublication>> Publications() override;
40
42 std::vector<std::shared_ptr<interface::RoomSubscription>> Subscriptions() override;
43
45 std::vector<std::shared_ptr<interface::RoomMember>> Members() override;
46
48 static std::shared_ptr<P2PRoom> Create(
50 std::unique_ptr<interface::RoomFactory> room_factory = std::make_unique<P2PRoomFactory>(),
51 std::unique_ptr<interface::RoomDomainFactory> domain_factory =
52 std::make_unique<RoomDomainFactory>());
53
55 static std::shared_ptr<P2PRoom> Create();
56
58 static std::shared_ptr<P2PRoom> Find(
60 std::unique_ptr<interface::RoomFactory> room_factory = std::make_unique<P2PRoomFactory>(),
61 std::unique_ptr<interface::RoomDomainFactory> domain_factory =
62 std::make_unique<RoomDomainFactory>());
63
65 static std::shared_ptr<P2PRoom> FindOrCreate(
67 std::unique_ptr<interface::RoomFactory> room_factory = std::make_unique<P2PRoomFactory>(),
68 std::unique_ptr<interface::RoomDomainFactory> domain_factory =
69 std::make_unique<RoomDomainFactory>());
70
72 std::shared_ptr<LocalP2PRoomMember> Join(interface::RoomMemberInitOptions options);
73
74protected:
76 // core::interface::Channel::EventListener
77 void OnMemberListChanged() override;
78 void OnMemberJoined(std::shared_ptr<core::interface::Member> member) override;
79 void OnMemberLeft(std::shared_ptr<core::interface::Member> member) override;
80 void OnMemberMetadataUpdated(std::shared_ptr<core::interface::Member> member,
81 const std::string& metadata) override;
82 void OnPublicationMetadataUpdated(std::shared_ptr<core::interface::Publication> publication,
83 const std::string& metadata) override;
84 void OnPublicationListChanged() override;
85 void OnStreamPublished(std::shared_ptr<core::interface::Publication> publication) override;
86 void OnStreamUnpublished(std::shared_ptr<core::interface::Publication> publication) override;
87 void OnPublicationEnabled(std::shared_ptr<core::interface::Publication> publication) override;
88 void OnPublicationDisabled(std::shared_ptr<core::interface::Publication> publication) override;
89 void OnSubscriptionListChanged() override;
90 void OnPublicationSubscribed(
91 std::shared_ptr<core::interface::Subscription> subscription) override;
92 void OnPublicationUnsubscribed(
93 std::shared_ptr<core::interface::Subscription> subscription) override;
95
96private:
97 static std::shared_ptr<P2PRoom> CreateShared(
98 std::shared_ptr<core::interface::Channel> channel,
99 std::unique_ptr<interface::RoomDomainFactory> factory);
100
101public:
103 friend class P2PRoomFactory;
104 friend class P2PRoomTest;
105 friend class LocalP2PRoomMemberTest;
107};
108
109} // namespace p2p
110} // namespace room
111} // namespace skyway
112
113#endif /* SKYWAY_ROOM_P2P_P2P_ROOM_HPP */
Roomの操作を行う抽象クラス
Definition room.hpp:19
P2PRoomの操作を行うクラス
Definition p2p_room.hpp:28
static std::shared_ptr< P2PRoom > Create()
P2PRoomを作成します。
static std::shared_ptr< P2PRoom > Find(interface::RoomQuery query, std::unique_ptr< interface::RoomFactory > room_factory=std::make_unique< P2PRoomFactory >(), std::unique_ptr< interface::RoomDomainFactory > domain_factory=std::make_unique< RoomDomainFactory >())
P2PRoomの検索をします。
std::vector< std::shared_ptr< interface::RoomMember > > Members() override
P2PRoomに存在するMemberを取得します。
std::shared_ptr< LocalP2PRoomMember > Join(interface::RoomMemberInitOptions options)
P2PRoomへ参加します。
std::vector< std::shared_ptr< interface::RoomSubscription > > Subscriptions() override
P2PRoomに存在するSubscriptionを取得します。
std::vector< std::shared_ptr< interface::RoomPublication > > Publications() override
P2PRoomに存在するPublicationを取得します。
RoomType Type() override
RoomのTypeを取得します。
static std::shared_ptr< P2PRoom > Create(interface::RoomInitOptions options, std::unique_ptr< interface::RoomFactory > room_factory=std::make_unique< P2PRoomFactory >(), std::unique_ptr< interface::RoomDomainFactory > domain_factory=std::make_unique< RoomDomainFactory >())
P2PRoomを作成します。
static std::shared_ptr< P2PRoom > FindOrCreate(interface::RoomInitOptions options, std::unique_ptr< interface::RoomFactory > room_factory=std::make_unique< P2PRoomFactory >(), std::unique_ptr< interface::RoomDomainFactory > domain_factory=std::make_unique< RoomDomainFactory >())
P2PRoomの検索をし、存在しなければ作成します。
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