1#ifndef SKYWAY_ROOM_INTERFACE_ROOM_DOMAIN_FACTORY_HPP
2#define SKYWAY_ROOM_INTERFACE_ROOM_DOMAIN_FACTORY_HPP
4#include <skyway/core/interface/local_person.hpp>
5#include <skyway/plugin/remote_person_plugin/remote_person.hpp>
7#include "skyway/media/stream/interface/local/local_stream.hpp"
8#include "skyway/room/interface/local_room_member.hpp"
9#include "skyway/room/interface/remote_room_member.hpp"
10#include "skyway/room/interface/room_publication.hpp"
11#include "skyway/room/interface/room_subscription.hpp"
18class RoomDomainFactory {
20 virtual ~RoomDomainFactory() =
default;
22 virtual void SetWeakRoom(std::weak_ptr<Room> room) = 0;
24 virtual std::shared_ptr<RoomMember> GetOrCreateRoomMember(
25 std::shared_ptr<core::interface::Member> core) = 0;
27 virtual std::shared_ptr<LocalRoomMember> GetOrCreateLocalRoomMember(
28 std::shared_ptr<core::interface::LocalPerson> person) = 0;
30 virtual std::shared_ptr<RemoteRoomMember> GetOrCreateRemoteRoomMember(
31 std::shared_ptr<plugin::remote_person::RemotePerson> person) = 0;
33 virtual std::shared_ptr<RoomPublication> GetOrCreateRoomPublication(
34 std::shared_ptr<core::interface::Publication> core,
35 std::shared_ptr<media::stream::interface::local::LocalStream> stream =
nullptr) = 0;
37 virtual std::shared_ptr<RoomSubscription> GetOrCreateRoomSubscription(
38 std::shared_ptr<core::interface::Subscription> core) = 0;