// Copyright (C) 2020 Sebastian Dröge // // Licensed under the MIT license, see the LICENSE file or use crate::config::Config; use crate::rooms::{Room, Rooms}; use crate::subscriber::Subscriber; use std::sync::{Arc, Mutex}; use anyhow::Error; use actix::{Actor, Addr, Handler, Message, StreamHandler}; use actix_web_actors::ws; use log::debug; /// Actor that represents a WebRTC publisher. #[derive(Debug)] pub struct Publisher { cfg: Arc, rooms: Addr, room: Mutex>>, } impl Publisher { /// Create a new `Publisher` actor. pub fn new(cfg: Arc, rooms: Addr) -> Self { Publisher { cfg, rooms, room: Mutex::new(None), } } } impl Actor for Publisher { type Context = ws::WebsocketContext; } impl StreamHandler> for Publisher { fn handle(&mut self, _msg: Result, _ctx: &mut Self::Context) { // TODO } } /// New `Subscriber` joining the `Room` of this `Publisher`. #[derive(Debug)] pub struct NewSubscriberMessage { pub subscriber: Addr, } impl Message for NewSubscriberMessage { type Result = Result<(), Error>; } impl Handler for Publisher { type Result = Result<(), Error>; fn handle( &mut self, msg: NewSubscriberMessage, _ctx: &mut ws::WebsocketContext, ) -> Self::Result { debug!("New subscriber {:?} joining", msg.subscriber); // TODO Ok(()) } } /// Existing `Subscriber` leaving the `Room` of this `Publisher`. #[derive(Debug)] pub struct LeavingSubscriberMessage { pub subscriber: Addr, } impl Message for LeavingSubscriberMessage { type Result = Result<(), Error>; } impl Handler for Publisher { type Result = Result<(), Error>; fn handle( &mut self, msg: LeavingSubscriberMessage, _ctx: &mut ws::WebsocketContext, ) -> Self::Result { debug!("Subscriber {:?} leaving", msg.subscriber); // TODO Ok(()) } }