use crate::embedding::EmbeddableControlRoot;
use crate::remote::server::RemoteServerTopLevelImpl;
use ferroui_base::{BoxedValue, Ref};
use ferroui_remote_protocol::IFerroRemoteTransportConnection;
use std::rc::Rc;
use std::sync::Arc;
pub struct RemoteServer {
top_level: Ref<EmbeddableControlRoot>,
#[cfg_attr(not(test), allow(dead_code))]
platform_impl: Rc<RemoteServerTopLevelImpl>,
}
impl RemoteServer {
pub fn new(transport: Arc<dyn IFerroRemoteTransportConnection>) -> RemoteServer {
let platform_impl = RemoteServerTopLevelImpl::new(transport);
let top_level = EmbeddableControlRoot::with_impl(platform_impl.as_top_level_impl());
top_level.prepare();
top_level.start_rendering();
RemoteServer { top_level, platform_impl }
}
pub fn content(&self) -> Option<BoxedValue> {
self.top_level.content()
}
pub fn set_content(&self, value: Option<BoxedValue>) {
self.top_level.set_content(value)
}
pub fn dispose(&self) {
self.top_level.stop_rendering();
self.top_level.dispose();
}
#[cfg(test)]
pub(crate) fn top_level(&self) -> &Ref<EmbeddableControlRoot> {
&self.top_level
}
#[cfg(test)]
pub(crate) fn platform_impl(&self) -> &Rc<RemoteServerTopLevelImpl> {
&self.platform_impl
}
}