aboutsummaryrefslogtreecommitdiff
path: root/examples/statetracker/src/main.rs
diff options
context:
space:
mode:
authorMax Audron <audron@cocaine.farm>2021-10-03 12:40:32 +0200
committerMax Audron <audron@cocaine.farm>2021-10-03 12:40:32 +0200
commit6d43a96c311a553cc6796e3edccb8a1c0e263e2d (patch)
tree16c13847cc5c3ea98bfa41565b01566c3ef24b69 /examples/statetracker/src/main.rs
parentsplit StatefulSyncable into client and server side traits (diff)
statetracker: rewrite sync handling
Diffstat (limited to 'examples/statetracker/src/main.rs')
-rw-r--r--examples/statetracker/src/main.rs32
1 files changed, 24 insertions, 8 deletions
diff --git a/examples/statetracker/src/main.rs b/examples/statetracker/src/main.rs
index 3177b39..65ee4ce 100644
--- a/examples/statetracker/src/main.rs
+++ b/examples/statetracker/src/main.rs
@@ -10,12 +10,15 @@ use druid::{
};
use druid::{AppLauncher, Data, Env, Lens, LocalizedString, Widget, WidgetExt, WindowDesc};
-use libquassel::message::objects::AliasManager;
-use libquassel::message::NetworkMap;
+use libquassel::message::{NetworkMap, StatefulSyncableServer};
+use libquassel::{
+ message::{objects::AliasManager, StatefulSyncableClient},
+ session::Session,
+};
use tracing::debug;
-use crate::server::{Message, ServerWidget};
+use crate::server::{Direction, Message, ServerWidget};
const SPACING: f64 = 10.0;
@@ -98,8 +101,6 @@ impl AppDelegate<StateTracker> for StateTrackerDelegate {
return druid::Handled::Yes;
} else if let Some(msg) = cmd.get(command::ADD_MESSAGE) {
- debug!("got ADD_MESSAGE command");
-
let list = Arc::make_mut(&mut data.messages);
list.push(msg.take().unwrap());
} else if let Some(alias) = cmd.get(command::ALIASMANAGER_ADD_ALIAS) {
@@ -109,9 +110,18 @@ impl AppDelegate<StateTracker> for StateTrackerDelegate {
} else if let Some(alias_manager) = cmd.get(command::ALIASMANAGER_INIT) {
data.alias_manager = Arc::new(alias_manager.take().unwrap());
} else if let Some(msg) = cmd.get(command::ALIASMANAGER_UPDATE) {
- let syncer = data.syncer.clone();
+ let (direction, msg) = msg.take().unwrap();
+
+ debug!("direction: {:#?}, msg: {:#?}", direction, msg);
+
let mut alias_manager = Arc::make_mut(&mut data.alias_manager).clone();
- alias_manager.handle_syncmessage(syncer, msg.take().unwrap());
+
+ if direction == Direction::ServerToClient {
+ StatefulSyncableClient::sync(&mut alias_manager, &data, msg);
+ } else {
+ StatefulSyncableServer::sync(&mut alias_manager, &data, msg);
+ }
+
data.alias_manager = Arc::new(alias_manager);
}
@@ -119,10 +129,16 @@ impl AppDelegate<StateTracker> for StateTrackerDelegate {
}
}
+// impl Session for StateTracker {
+// fn alias_manager(&mut self) -> &mut AliasManager {
+// &mut Arc::make_mut(&mut self.alias_manager).clone()
+// }
+// }
+
// TODO make this somehow deref or smth
#[derive(Clone)]
pub struct Syncer;
-impl libquassel::message::SyncProxy for Syncer {
+impl libquassel::message::SyncProxy for StateTracker {
fn sync(
&self,
class_name: &str,