SkyWay Linux SDK
読み取り中…
検索中…
一致する文字列を見つけられません
p2p_room.hpp
1//
2// © NTT DOCOMO BUSINESS, Inc. All Rights Reserved.
3//
4
5#ifndef SKYWAY_ROOM_P2P_P2P_ROOM_HPP
6#define SKYWAY_ROOM_P2P_P2P_ROOM_HPP
7
8#include "skyway/room/abstract/room.hpp"
9#include "skyway/room/p2p/local_p2p_room_member.hpp"
10#include "skyway/room/p2p/room_domain_factory.hpp"
11
12namespace skyway {
13namespace room {
14namespace p2p {
15
17class P2PRoomFactory : public interface::RoomFactory {
18public:
19 std::shared_ptr<interface::Room> Create(
20 interface::RoomInitOptions options,
21 std::unique_ptr<interface::RoomDomainFactory> domain_factory) override;
22 std::shared_ptr<interface::Room> Find(
23 interface::RoomQuery query,
24 std::unique_ptr<interface::RoomDomainFactory> domain_factory) override;
25 std::shared_ptr<interface::Room> FindOrCreate(
26 interface::RoomInitOptions options,
27 std::unique_ptr<interface::RoomDomainFactory> domain_factory) override;
28};
30
32class P2PRoom : public abstract::Room, public std::enable_shared_from_this<P2PRoom> {
33public:
34 P2PRoom(std::shared_ptr<core::interface::Channel> channel,
35 std::unique_ptr<interface::RoomDomainFactory> factory);
36 interface::RoomType Type() override;
38 std::vector<std::shared_ptr<interface::RoomPublication>> Publications() override;
40 std::vector<std::shared_ptr<interface::RoomSubscription>> Subscriptions() override;
42 std::vector<std::shared_ptr<interface::RoomMember>> Members() override;
43
45 static std::shared_ptr<P2PRoom> Create(
47 std::unique_ptr<interface::RoomFactory> room_factory = std::make_unique<P2PRoomFactory>(),
48 std::unique_ptr<interface::RoomDomainFactory> domain_factory =
49 std::make_unique<RoomDomainFactory>());
51 static std::shared_ptr<P2PRoom> Create();
53 static std::shared_ptr<P2PRoom> Find(
55 std::unique_ptr<interface::RoomFactory> room_factory = std::make_unique<P2PRoomFactory>(),
56 std::unique_ptr<interface::RoomDomainFactory> domain_factory =
57 std::make_unique<RoomDomainFactory>());
59 static std::shared_ptr<P2PRoom> FindOrCreate(
61 std::unique_ptr<interface::RoomFactory> room_factory = std::make_unique<P2PRoomFactory>(),
62 std::unique_ptr<interface::RoomDomainFactory> domain_factory =
63 std::make_unique<RoomDomainFactory>());
65 std::shared_ptr<LocalP2PRoomMember> Join(interface::RoomMemberInitOptions options);
66
67protected:
68 // core::interface::Channel::EventListener
69 void OnMemberListChanged() override;
70 void OnMemberJoined(std::shared_ptr<core::interface::Member> member) override;
71 void OnMemberLeft(std::shared_ptr<core::interface::Member> member) override;
72 void OnMemberMetadataUpdated(std::shared_ptr<core::interface::Member> member,
73 const std::string& metadata) override;
74 void OnPublicationMetadataUpdated(std::shared_ptr<core::interface::Publication> publication,
75 const std::string& metadata) override;
76 void OnPublicationListChanged() override;
77 void OnStreamPublished(std::shared_ptr<core::interface::Publication> publication) override;
78 void OnStreamUnpublished(std::shared_ptr<core::interface::Publication> publication) override;
79 void OnPublicationEnabled(std::shared_ptr<core::interface::Publication> publication) override;
80 void OnPublicationDisabled(std::shared_ptr<core::interface::Publication> publication) override;
82 void OnPublicationSubscribed(
83 std::shared_ptr<core::interface::Subscription> subscription) override;
84 void OnPublicationUnsubscribed(
85 std::shared_ptr<core::interface::Subscription> subscription) override;
86
87private:
88 static std::shared_ptr<P2PRoom> CreateShared(
89 std::shared_ptr<core::interface::Channel> channel,
90 std::unique_ptr<interface::RoomDomainFactory> factory);
91
92public:
94 friend class P2PRoomFactory;
95 friend class P2PRoomTest;
96 friend class LocalP2PRoomMemberTest;
98};
99
100} // namespace p2p
101} // namespace room
102} // namespace skyway
103
104#endif /* SKYWAY_ROOM_P2P_P2P_ROOM_HPP */
Roomの操作を行う抽象クラス
Definition room.hpp:19
P2PRoomの操作を行うクラス
Definition p2p_room.hpp:32
static std::shared_ptr< P2PRoom > Create()
P2PRoomを作成します。
void OnPublicationListChanged() override
Publicationが作成または削除された時に発生するイベント
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を取得します。
void OnSubscriptionListChanged() override
StreamがSubscribeまたはUnsubscribeされた時に発生するイベント
std::shared_ptr< LocalP2PRoomMember > Join(interface::RoomMemberInitOptions options)
P2PRoomへ参加します。
interface::RoomType Type() override
RoomのTypeを取得します。
std::vector< std::shared_ptr< interface::RoomSubscription > > Subscriptions() override
P2PRoomに存在するSubscriptionを取得します。
void OnMemberListChanged() override
Member が入退出したときに発生するイベント
std::vector< std::shared_ptr< interface::RoomPublication > > Publications() override
P2PRoomに存在するPublicationを取得します。
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の検索をし、存在しなければ作成します。
RoomのCreate/FindOrCreateで扱うオプション
Definition room.hpp:20
MemberのCreateで扱うオプション
Definition room.hpp:52
RoomのFind/FindOrCreateで扱うオプション
Definition room.hpp:36