chiark / gitweb /
actual updates wip
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 29 Jun 2020 00:42:29 +0000 (01:42 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 29 Jun 2020 00:42:29 +0000 (01:42 +0100)
src/bin/server.rs
src/global.rs

index 0ed614364294b19218a02f5cb19cf4e21514491b..1bd0a4f8dd91e788bc7ccc62a28e76b94d4fbaf4 100644 (file)
@@ -208,12 +208,23 @@ enum XUpdate {
   TestCounter { value: usize },
 }
 
-type TestCounter = BufReader<TestCounterInner>;
+const UPDATE_READER_SIZE : usize = 1024*32;
+const UPDATE_MAX_MSG_SIZE : usize = 1024;
+
 #[derive(Debug)]
-struct TestCounterInner { next : usize, }
-impl Read for TestCounterInner {
-        
-                    
+struct UpdateReader {
+  playerid : PlayerId,
+  client : ClientId,
+  startat : Counter,
+  amu : Arc<Mutex<Instance>>>,
+}
+impl Read for UpdateReader {
+  fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
+    let mug = amu.lock()?;
+    loop {
+         implement this! 
+    }
+                    e
     /*
     for (tclient, tcl) in &mut g.clients {
       if tclient == client {
@@ -228,7 +239,6 @@ impl Read for TestCounterInner {
      */
 
 
-  fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
     thread::sleep(Duration::from_millis(500));
     let message = XUpdate::TestCounter { value : self.next };
     let data = serde_json::to_string(&message)?;
index f32831c63284c024e6b60c6cf2da99845bab4ef6..6578a01956a94b5b8a7104a0f927fcc204f9d67b 100644 (file)
@@ -23,8 +23,16 @@ impl Client {
   }
 }
 
+pub struct PreparedUpdate {
+  gen : Counter,
+  client : ClientId,
+  piece : PieceId;
+  client_seq : ClientSequence,
+  json : Arc<String>,
+}
+
 pub struct PlayerUpdates {
-  pub log : VecDeque<(ClientId, Arc<Update>)>,
+  pub log : VecDeque<PreparedUpdate>,
   pub cv : Condvar,
 }
 
@@ -111,8 +119,8 @@ pub fn xxx_global_setup() {
     clients : Default::default(),
     updates : Default::default(),
   };
-  let g = Arc::new(Mutex::new(gi));
-  let mut ig = g.lock().unwrap();
+  let amu = Arc::new(Mutex::new(gi));
+  let mut ig = amu.lock().unwrap();
   for (token, nick) in XXX_PLAYERS_TOKENS {
     let np = Player {
       nick : nick.to_string(),