1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
use crate::prelude::*;
const LIST_URL: &str = "http://127.0.0.1:4145/list";
const WATCH_URL: &str = "ws://127.0.0.1:4145/watch";
struct WatchConn {
id: String,
#[allow(dead_code)] // no idea why it thinks this is dead
ws: WebSocket,
}
#[derive(Clone, Debug, serde::Deserialize)]
pub struct Session {
pub id: String,
pub username: String,
}
#[derive(Default)]
pub struct Model {
sessions: Vec<Session>,
watch_conn: Option<WatchConn>,
}
impl Model {
pub(crate) fn list(
&self,
) -> impl futures::Future<Item = crate::Msg, Error = crate::Msg> {
seed::Request::new(LIST_URL).fetch_json_data(crate::Msg::List)
}
pub(crate) fn watch(
&mut self,
id: &str,
orders: &mut impl Orders<crate::Msg>,
) {
let ws = crate::ws::connect(
&format!("{}?id={}", WATCH_URL, id),
crate::Msg::Watch,
orders,
);
self.watch_conn = Some(WatchConn {
id: id.to_string(),
ws,
})
}
pub fn sessions(&self) -> &[Session] {
&self.sessions
}
pub fn update_sessions(&mut self, sessions: Vec<Session>) {
self.sessions = sessions;
}
pub fn watch_id(&self) -> Option<&str> {
if let Some(conn) = &self.watch_conn {
Some(&conn.id)
} else {
None
}
}
pub fn watch_disconnect(&mut self) {
self.watch_conn = None;
}
}
|