refactor
This commit is contained in:
parent
26a4b1f3eb
commit
252d3cb797
@ -62,15 +62,18 @@ impl Subscriber for ConnInner {
|
|||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn send(&mut self, msg: Arc<Message>) {
|
fn send(&mut self, msg: Arc<Message>) {
|
||||||
|
match &msg.union {
|
||||||
|
Some(message::Union::video_frame(_)) => {
|
||||||
|
self.tx_video.as_mut().map(|tx| {
|
||||||
|
allow_err!(tx.send((Instant::now(), msg)));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
self.tx.as_mut().map(|tx| {
|
self.tx.as_mut().map(|tx| {
|
||||||
allow_err!(tx.send((Instant::now(), msg)));
|
allow_err!(tx.send((Instant::now(), msg)));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
fn send_video_frame(&mut self, tm: std::time::Instant, msg: Arc<Message>) {
|
|
||||||
self.tx_video.as_mut().map(|tx| {
|
|
||||||
allow_err!(tx.send((tm.into(), msg)));
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,8 +79,6 @@ impl Subscriber for MouseCursorSub {
|
|||||||
self.inner.send(msg);
|
self.inner.send(msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn send_video_frame(&mut self, _: std::time::Instant, _: Arc<Message>) {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const NAME_CURSOR: &'static str = "mouse_cursor";
|
pub const NAME_CURSOR: &'static str = "mouse_cursor";
|
||||||
|
@ -16,7 +16,6 @@ pub trait Service: Send + Sync {
|
|||||||
pub trait Subscriber: Default + Send + Sync + 'static {
|
pub trait Subscriber: Default + Send + Sync + 'static {
|
||||||
fn id(&self) -> i32;
|
fn id(&self) -> i32;
|
||||||
fn send(&mut self, msg: Arc<Message>);
|
fn send(&mut self, msg: Arc<Message>);
|
||||||
fn send_video_frame(&mut self, tm: time::Instant, msg: Arc<Message>);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
@ -145,15 +144,15 @@ impl<T: Subscriber + From<ConnInner>> ServiceTmpl<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn send_video_frame(&self, tm: time::Instant, msg: Message) -> HashSet<i32> {
|
pub fn send_video_frame(&self, msg: Message) -> HashSet<i32> {
|
||||||
self.send_video_frame_shared(tm, Arc::new(msg))
|
self.send_video_frame_shared(Arc::new(msg))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn send_video_frame_shared(&self, tm: time::Instant, msg: Arc<Message>) -> HashSet<i32> {
|
pub fn send_video_frame_shared(&self, msg: Arc<Message>) -> HashSet<i32> {
|
||||||
let mut conn_ids = HashSet::new();
|
let mut conn_ids = HashSet::new();
|
||||||
let mut lock = self.0.write().unwrap();
|
let mut lock = self.0.write().unwrap();
|
||||||
for s in lock.subscribes.values_mut() {
|
for s in lock.subscribes.values_mut() {
|
||||||
s.send_video_frame(tm, msg.clone());
|
s.send(msg.clone());
|
||||||
conn_ids.insert(s.id());
|
conn_ids.insert(s.id());
|
||||||
}
|
}
|
||||||
conn_ids
|
conn_ids
|
||||||
|
@ -108,7 +108,7 @@ impl VideoFrameController {
|
|||||||
fetched_conn_ids.insert(id);
|
fetched_conn_ids.insert(id);
|
||||||
|
|
||||||
// break if all connections have received current frame
|
// break if all connections have received current frame
|
||||||
if fetched_conn_ids.is_superset(&send_conn_ids) {
|
if fetched_conn_ids.len() >= send_conn_ids.len() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -257,7 +257,7 @@ fn run(sp: GenericService) -> ResultType<()> {
|
|||||||
Ok(frame) => {
|
Ok(frame) => {
|
||||||
let time = now - start;
|
let time = now - start;
|
||||||
let ms = (time.as_secs() * 1000 + time.subsec_millis() as u64) as i64;
|
let ms = (time.as_secs() * 1000 + time.subsec_millis() as u64) as i64;
|
||||||
let send_conn_ids = handle_one_frame(&sp, now, &frame, ms, &mut crc, &mut vpx)?;
|
let send_conn_ids = handle_one_frame(&sp, &frame, ms, &mut crc, &mut vpx)?;
|
||||||
frame_controller.set_send(now, send_conn_ids);
|
frame_controller.set_send(now, send_conn_ids);
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
{
|
{
|
||||||
@ -327,7 +327,6 @@ fn create_frame(frame: &EncodeFrame) -> VP9 {
|
|||||||
#[inline]
|
#[inline]
|
||||||
fn handle_one_frame(
|
fn handle_one_frame(
|
||||||
sp: &GenericService,
|
sp: &GenericService,
|
||||||
now: Instant,
|
|
||||||
frame: &[u8],
|
frame: &[u8],
|
||||||
ms: i64,
|
ms: i64,
|
||||||
crc: &mut (u32, u32),
|
crc: &mut (u32, u32),
|
||||||
@ -365,7 +364,7 @@ fn handle_one_frame(
|
|||||||
|
|
||||||
// to-do: flush periodically, e.g. 1 second
|
// to-do: flush periodically, e.g. 1 second
|
||||||
if frames.len() > 0 {
|
if frames.len() > 0 {
|
||||||
send_conn_ids = sp.send_video_frame(now, create_msg(frames));
|
send_conn_ids = sp.send_video_frame(create_msg(frames));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(send_conn_ids)
|
Ok(send_conn_ids)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user