SkyWay Linux SDK
読み取り中…
検索中…
一致する文字列を見つけられません
subscription.hpp
1//
2// subscription.hpp
3// skyway
4//
5// Created by sandabu on 2022/01/13.
6// Copyright © 2022 NTT Communications. All rights reserved.
7//
8
9#ifndef SKYWAY_CORE_INTERFACE_SUBSCRIPTION_HPP_
10#define SKYWAY_CORE_INTERFACE_SUBSCRIPTION_HPP_
11
12#include "skyway/core/connection_state.hpp"
13#include "skyway/core/interface/member.hpp"
14#include "skyway/core/interface/remote_stream.hpp"
15#include "skyway/model/domain.hpp"
16
17namespace skyway {
18namespace core {
19namespace interface {
20
21class Publication;
22
24enum class SubscriptionState { kEnabled, kDisabled, kCanceled };
25
27// `std::enable_shared_from_this<T>` is supposed to be inherited by concrete classes.
28// (e.g. skyway/core/subscription.hpp)
29// however if so, compile failed on the Android SDK that includes interfaces.
30class Subscription : public std::enable_shared_from_this<Subscription>,
31 public ConnectionStateChangeNotifiable {
32public:
35 public:
38 [[deprecated]] virtual void OnCanceled() {}
40 virtual void OnConnectionStateChanged(const ConnectionState state) {}
41 };
43 class InternalListener {
44 public:
45 virtual void OnChangePreferredEncoding(std::shared_ptr<Subscription> subscription) = 0;
46 };
47 class Callback {
48 public:
49 virtual const std::optional<nlohmann::json> GetStatsReport(
50 std::shared_ptr<Subscription> subscription) = 0;
51 };
53 virtual ~Subscription() = default;
54
57 virtual void AddEventListener(EventListener* listener) = 0;
60 virtual void RemoveEventListener(EventListener* listener) = 0;
62 virtual void AddInternalListener(InternalListener* listener) = 0;
63 virtual void RemoveInternalListener(InternalListener* listener) = 0;
65
67 virtual std::string Id() const = 0;
69 virtual model::ContentType ContentType() const = 0;
71 virtual std::shared_ptr<interface::Publication> Publication() const = 0;
73 virtual std::shared_ptr<interface::Member> Subscriber() const = 0;
75 virtual SubscriptionState State() = 0;
80 virtual std::shared_ptr<RemoteStream> Stream() = 0;
82 virtual std::optional<std::string> PreferredEncodingId() const = 0;
84 virtual bool ChangePreferredEncoding(const std::string& id) = 0;
87 [[deprecated]] virtual bool Cancel() const = 0;
90 [[deprecated]] virtual std::optional<model::WebRTCStats> GetStats() = 0;
92 virtual void AddGetStatsCallback(Callback* callback) = 0;
93 virtual void RemoveGetStatsCallback() = 0;
94
95 virtual void SetStream(std::shared_ptr<RemoteStream> stream) = 0;
96 virtual void SetPreferredEncodingId(const std::string& id) = 0;
97
98 virtual void OnCanceled() = 0;
100};
101
102} // namespace interface
103} // namespace core
104} // namespace skyway
105
106#endif /* SKYWAY_CORE_INTERFACE_SUBSCRIPTION_HPP_ */
イベントリスナ
Definition subscription.hpp:34
virtual void OnCanceled()
このSubscriptionのSubscribeがキャンセルされた際に発火するイベント。
Definition subscription.hpp:38
virtual void OnConnectionStateChanged(const ConnectionState state)
このSubscriptionのメディア通信の状態が変化した時に発火するイベント
Definition subscription.hpp:40
Subscriptionのインターフェース
Definition subscription.hpp:31
virtual std::shared_ptr< interface::Publication > Publication() const =0
このSubscriptionに紐づくPublicationを取得します。
virtual bool ChangePreferredEncoding(const std::string &id)=0
受信するエンコード設定を切り替えます。
virtual model::ContentType ContentType() const =0
ContentType(VideoかAudioかDataか)を取得します。
virtual std::optional< model::WebRTCStats > GetStats()=0
統計情報を取得します。
virtual std::string Id() const =0
Idを取得します。
virtual std::shared_ptr< RemoteStream > Stream()=0
Publisherが持つStreamを取得します。
virtual void AddEventListener(EventListener *listener)=0
イベントを購読します。
virtual SubscriptionState State()=0
State(公開状態がEnableかDisabelかCancelか)を取得します。
virtual bool Cancel() const =0
Subscribeを中止します。
virtual std::optional< std::string > PreferredEncodingId() const =0
このSubscriptionの優先エンコーディングIDを取得します。
virtual std::shared_ptr< interface::Member > Subscriber() const =0
このSubscriptionをSubscribeしているMemberを取得します。
virtual void RemoveEventListener(EventListener *listener)=0
イベントの購読を中止します。