Skip to content
This repository was archived by the owner on Jul 15, 2023. It is now read-only.

Commit 6d2c557

Browse files
committed
feat: engine
1 parent 0290c61 commit 6d2c557

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

src/client.rs

Whitespace-only changes.

src/room.rs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
use crate::client::ClientTrait;
2+
use std::collections::HashMap;
3+
4+
trait RoomTrait<'a> {
5+
fn join(&mut self, c: &'a dyn ClientTrait) -> Result<(), anyhow::Error>;
6+
fn leave(&mut self, c: &'a dyn ClientTrait) -> Result<(), anyhow::Error>;
7+
}
8+
9+
struct Room<'a> {
10+
id: u16,
11+
clients: HashMap<u16, &'a dyn ClientTrait>,
12+
}
13+
14+
impl<'a> Room<'a> {
15+
pub fn new(id: u16) -> Self {
16+
Room {
17+
id,
18+
clients: HashMap::new(),
19+
}
20+
}
21+
}
22+
23+
impl<'a> RoomTrait<'a> for Room<'a> {
24+
fn join(&mut self, c: &'a dyn ClientTrait) -> Result<(), anyhow::Error> {
25+
let id = c.get_id();
26+
if self.clients.contains_key(&id) {
27+
return Err(anyhow::anyhow!("client already joined"));
28+
}
29+
self.clients.insert(id, c);
30+
Ok(())
31+
}
32+
33+
fn leave(&mut self, c: &'a dyn ClientTrait) -> Result<(), anyhow::Error> {
34+
let id = c.get_id();
35+
if !self.clients.contains_key(&id) {
36+
return Err(anyhow::anyhow!("client not joined"));
37+
}
38+
self.clients.remove(&id);
39+
Ok(())
40+
}
41+
}

0 commit comments

Comments
 (0)