summaryrefslogtreecommitdiff
path: root/game_server/src/lobby.rs
diff options
context:
space:
mode:
authornatrixaeria <janng@gmx.de>2019-05-19 22:38:25 +0200
committernatrixaeria <janng@gmx.de>2019-05-19 22:38:25 +0200
commit054a2bfe069ed4118d2f9fd1f01428632049057b (patch)
treeba017b1597e3f140d260ef0f6a3218591136c600 /game_server/src/lobby.rs
parent2d815af3f6d062d55da2f2598ce5d506ee74cb6e (diff)
Add a client handling system
Diffstat (limited to 'game_server/src/lobby.rs')
-rw-r--r--game_server/src/lobby.rs30
1 files changed, 28 insertions, 2 deletions
diff --git a/game_server/src/lobby.rs b/game_server/src/lobby.rs
index fe3bdee..d03bd45 100644
--- a/game_server/src/lobby.rs
+++ b/game_server/src/lobby.rs
@@ -1,23 +1,49 @@
use std::collections::HashMap;
use super::group::{Group, GroupId};
+use super::scribble_group::ScribbleGroup;
+
+use super::server::{UserId, GameClient};
pub struct Lobby {
groups: HashMap<GroupId, Box<Group>>,
}
impl Lobby {
- pub fn new() -> Lobby {
+ pub fn new() -> Self {
Self {
groups: HashMap::new(),
}
}
+ fn generate_group(group_type: &str, id: GroupId, name: &str) -> Option<Box<Group>> {
+ match group_type {
+ "scribble" => {
+ Some(Box::new(ScribbleGroup::new(id, name.to_string())))
+ },
+ other => None,
+ }
+ }
+
pub fn add_group(&mut self, group: Box<Group>) {
self.groups.insert(group.id(), group);
}
- pub fn iter<'a>(&'a self) -> GroupIterator<'a> {
+ pub fn add_client(&mut self, group_type: &str, group_id: GroupId, group_name: &str,
+ user_id: UserId, client: GameClient) {
+ if !self.groups.contains_key(&group_id) {
+ let mut group = match Self::generate_group(group_type, group_id, group_name) {
+ Some(x) => x,
+ _ => return,
+ };
+ group.run();
+ self.groups.insert(group_id, group);
+ }
+ let group = self.groups.get_mut(&group_id).unwrap();
+ group.add_client(user_id, client);
+ }
+
+ pub fn iter<'b>(&'b self) -> GroupIterator<'b> {
GroupIterator { groups: self.groups.values() }
}
}