SkyWay for Linux
読み取り中…
検索中…
一致する文字列を見つけられません
member.hpp
1//
2// member.hpp
3// skyway
4//
5// Created by sandabu on 2021/12/21.
6// Copyright © 2021 NTT Communications. All rights reserved.
7//
8
9#ifndef SKYWAY_CORE_INTERFACE_MEMBER_HPP_
10#define SKYWAY_CORE_INTERFACE_MEMBER_HPP_
11
12#include <atomic>
13#include <boost/optional.hpp>
14#include <mutex>
15#include <string>
16#include <unordered_set>
17
18#include "skyway/model/domain.hpp"
19
20namespace skyway {
21namespace core {
22namespace interface {
23
24class Channel;
25class Publication;
26class Subscription;
27
29enum class MemberState { kJoined, kLeft };
30
32class Member {
33public:
36 public:
38 virtual void OnLeft() {}
40 virtual void OnMetadataUpdated(const std::string& metadata) {}
42 virtual void OnPublicationListChanged() {}
44 virtual void OnSubscriptionListChanged() {}
45 };
46 virtual ~Member() = default;
47
54
56 bool UpdateMetadata(const std::string& metadata);
58 bool Leave();
59
61 std::string Id() const;
63 boost::optional<std::string> Name() const;
65 boost::optional<std::string> Metadata() const;
67 model::MemberType Type() const;
69 std::string Subtype() const;
71 model::Side Side() const;
73 MemberState State() const;
74
76 std::vector<Publication*> Publications() const;
78 std::vector<Subscription*> Subscriptions() const;
79
81 virtual void OnLeft();
82 void OnMetadataUpdated(const std::string& metadata);
83 virtual void OnPublicationListChanged();
84 virtual void OnSubscriptionListChanged();
86
87protected:
88 Member(Channel* channel, const model::Member& initial_dto, const model::Side& side);
89
90 Channel* channel_;
91 model::Member initial_dto_;
92 model::Side side_;
93 MemberState state_;
94 std::mutex listeners_mtx_;
95 std::unordered_set<EventListener*> listeners_;
96 std::atomic<bool> metadata_updated_;
97};
98
99} // namespace interface
100} // namespace core
101} // namespace skyway
102
103#endif /* SKYWAY_CORE_INTERFACE_MEMBER_HPP_ */
Channelのインターフェース
Definition channel.hpp:28
イベントリスナ
Definition member.hpp:35
virtual void OnSubscriptionListChanged()
MemberのSubscriptionの一覧が更新した時に発火するイベント
Definition member.hpp:44
virtual void OnLeft()
MemberがChannelから退出した時に発火するイベント
Definition member.hpp:38
virtual void OnPublicationListChanged()
MemberのPublicationの一覧が更新した時に発火するイベント
Definition member.hpp:42
virtual void OnMetadataUpdated(const std::string &metadata)
MemberのMetadataが更新した時に発火するイベント
Definition member.hpp:40
LocalPersonおよびRemoteMemberの基底クラス
Definition member.hpp:32
MemberState State() const
State(Memberの入室状態)を取得します。
std::vector< Subscription * > Subscriptions() const
自身が持つ全てのSubscriptionを取得します。
boost::optional< std::string > Metadata() const
Metadataを取得します。
bool UpdateMetadata(const std::string &metadata)
Metadataを更新します
bool Leave()
Channelから退室します。
std::string Subtype() const
Subtypeを取得します。
model::MemberType Type() const
MemberTypeを取得します。
std::vector< Publication * > Publications() const
自身が持つ全てのPublicationを取得します。
boost::optional< std::string > Name() const
Nameを取得します。
void AddEventListener(EventListener *listener)
イベントを購読します。
void RemoveEventListener(EventListener *listener)
イベントの購読を中止します。
model::Side Side() const
Side(LocalかRemoteか)を取得します。
std::string Id() const
Idを取得します。
メンバー情報
Definition domain.hpp:54