Просмотр исходного кода

map: update view NodeInfo to HashMap and render nodeID

lunar-mining 4 лет назад
Родитель
Сommit
d8fc4aa2c2
3 измененных файлов с 42 добавлено и 49 удалено
  1. 8 18
      bin/map/src/main.rs
  2. 22 22
      bin/map/src/ui.rs
  3. 12 9
      bin/map/src/view.rs

+ 8 - 18
bin/map/src/main.rs

@@ -168,7 +168,7 @@ async fn poll(client: Map, model: Arc<Model>) -> Result<()> {
             } else {
                 index = index + 1;
             }
-            debug!("INDEX {}", index);
+            //debug!("INDEX {}", index);
 
             let out0 = Connection::new(
                 outgoing[0].get("id").unwrap().as_str().unwrap().to_string(),
@@ -194,27 +194,17 @@ async fn poll(client: Map, model: Arc<Model>) -> Result<()> {
             inconnects.push(in0);
             inconnects.push(in1);
 
-            let infos = NodeInfo {
-                // TODO: should never crash
-                //id: id.as_str().unwrap().to_string(),
-                outgoing: outconnects,
-                incoming: inconnects,
-            };
+            let infos = NodeInfo { outgoing: outconnects, incoming: inconnects };
 
             let mut node_info = HashMap::new();
             node_info.insert(id.as_str().unwrap().to_string(), infos);
-            let mut id_set = HashSet::new();
-            for (id, value) in node_info {
-                id_set.insert(id.clone());
-                // update node info if we don't have it already
-                //if !model.id_list.node_id.lock().await.contains(&node.clone().id) {
 
+            for (id, value) in node_info.clone() {
+                model.id_list.node_id.lock().await.insert(id.clone());
                 model.info_list.infos.lock().await.insert(id, value);
-                //debug!("Model ID list: {:?}", model.id_list.node_id.lock().await);
             }
-            model.id_list.node_id.lock().await.union(&id_set);
-            //debug!("Model INFO list: {:?}", model.info_list.infos.lock().await);
-            //}
+            //debug!("MODEL UPDATE HASHSET: {:?}", model.id_list.node_id.lock().await.clone());
+            //debug!("MODEL UPDATE HASHMAP: {:?}", model.info_list.infos.lock().await.clone());
         } else {
             // TODO: error handling
             debug!("Reply is empty");
@@ -235,7 +225,7 @@ async fn render<B: Backend>(
     terminal.clear()?;
 
     let id_list = IdListView::new(HashSet::new());
-    let info_list = InfoListView::new(Vec::new());
+    let info_list = InfoListView::new(HashMap::new());
     let mut view = View::new(id_list.clone(), info_list.clone());
 
     view.id_list.state.select(Some(0));
@@ -274,6 +264,6 @@ async fn render<B: Backend>(
                 _ => (),
             }
         }
-        //async_util::sleep(1).await;
+        //async_util::sleep(4).await;
     }
 }

+ 22 - 22
bin/map/src/ui.rs

@@ -21,8 +21,8 @@ pub fn ui<B: Backend>(f: &mut Frame<'_, B>, mut view: View) {
     //debug!("UI INFO LIST: {:?}", view.info_list.infos);
     let index = view.info_list.index;
 
-    let iconnects = info[index].incoming.clone();
-    let oconnects = info[index].outgoing.clone();
+    //let iconnects = info[index].incoming.clone();
+    //let oconnects = info[index].outgoing.clone();
 
     let nodes: Vec<ListItem> = view
         .id_list
@@ -30,26 +30,26 @@ pub fn ui<B: Backend>(f: &mut Frame<'_, B>, mut view: View) {
         .iter()
         .map(|id| {
             let mut lines = vec![Spans::from(id.to_string())];
-            for line in lines.clone() {
-                lines.push(Spans::from(Span::styled("  Outgoing:", Style::default())));
-                lines.push(Spans::from(format!(
-                    "    {}         [R: {}]",
-                    oconnects[0].id, oconnects[0].message
-                )));
-                lines.push(Spans::from(format!(
-                    "    {}         [S: {}]",
-                    oconnects[1].id, oconnects[1].message
-                )));
-                lines.push(Spans::from(Span::styled("  Incoming:", Style::default())));
-                lines.push(Spans::from(format!(
-                    "    {}         [R: {}]",
-                    iconnects[0].id, iconnects[0].message
-                )));
-                lines.push(Spans::from(format!(
-                    "    {}         [S: {}]",
-                    iconnects[1].id, iconnects[1].message
-                )));
-            }
+            //for line in lines.clone() {
+            //    lines.push(Spans::from(Span::styled("  Outgoing:", Style::default())));
+            //    lines.push(Spans::from(format!(
+            //        "    {}         [R: {}]",
+            //        oconnects[0].id, oconnects[0].message
+            //    )));
+            //    lines.push(Spans::from(format!(
+            //        "    {}         [S: {}]",
+            //        oconnects[1].id, oconnects[1].message
+            //    )));
+            //    lines.push(Spans::from(Span::styled("  Incoming:", Style::default())));
+            //    lines.push(Spans::from(format!(
+            //        "    {}         [R: {}]",
+            //        iconnects[0].id, iconnects[0].message
+            //    )));
+            //    lines.push(Spans::from(format!(
+            //        "    {}         [S: {}]",
+            //        iconnects[1].id, iconnects[1].message
+            //    )));
+            //}
             ListItem::new(lines).style(Style::default())
         })
         .collect();

+ 12 - 9
bin/map/src/view.rs

@@ -15,9 +15,12 @@ impl View {
     }
 
     pub fn update(&mut self, node_id: HashSet<String>, infos: HashMap<String, NodeInfo>) {
-        for node in node_id {
-            self.id_list.node_id.insert(node);
+        for (id, info) in infos.clone() {
+            self.id_list.node_id.insert(id.clone());
+            self.info_list.infos.insert(id, info);
         }
+        debug!("VIEW UPDATE HASHSET: {:?}", self.id_list.node_id);
+        debug!("VIEW UPDATE HASHMAP: {:?}", self.info_list.infos);
         // all node ids that are not contained
         //node_id.union(&self.id_list.node_id)
         //let new_node_ids =
@@ -105,11 +108,11 @@ impl IdListView {
 #[derive(Clone)]
 pub struct InfoListView {
     pub index: usize,
-    pub infos: Vec<NodeInfo>,
+    pub infos: HashMap<String, NodeInfo>,
 }
 
 impl InfoListView {
-    pub fn new(infos: Vec<NodeInfo>) -> InfoListView {
+    pub fn new(infos: HashMap<String, NodeInfo>) -> InfoListView {
         let index = 0;
 
         InfoListView { index, infos }
@@ -129,9 +132,9 @@ impl InfoListView {
         }
     }
 
-    pub fn update(&mut self, infos: Vec<NodeInfo>) {
-        for info in infos {
-            self.infos.push(info);
-        }
-    }
+    //pub fn update(&mut self, infos: Vec<NodeInfo>) {
+    //    for info in infos {
+    //        self.infos.push(info);
+    //    }
+    //}
 }