diff options
| author | Fuwn <[email protected]> | 2021-03-22 21:50:26 +0000 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2021-03-22 21:50:26 +0000 |
| commit | d4e5c30fd9d2eecdd2af55fd4ee5c0da4cda3f55 (patch) | |
| tree | 32b33ace94dbb89cc67aa3cad6e06e9376902b88 /src/server/auto/server.rs | |
| parent | feature: Use feature "hash_set_entry" (diff) | |
| download | whirl-d4e5c30fd9d2eecdd2af55fd4ee5c0da4cda3f55.tar.xz whirl-d4e5c30fd9d2eecdd2af55fd4ee5c0da4cda3f55.zip | |
etc: Correct struct names
Diffstat (limited to 'src/server/auto/server.rs')
| -rw-r--r-- | src/server/auto/server.rs | 47 |
1 files changed, 42 insertions, 5 deletions
diff --git a/src/server/auto/server.rs b/src/server/auto/server.rs index 87f5e07..361ae00 100644 --- a/src/server/auto/server.rs +++ b/src/server/auto/server.rs @@ -1,15 +1,20 @@ use mio::net::{TcpListener, TcpStream}; use std::io::{Read, Write}; use mio::{Poll, Token, Ready, PollOpt, Events}; -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; use std::str::from_utf8; use crate::cmd::buddy_list::create_buddy_list_notify_command; use crate::cmd::text::create_text_command; -// use crate::cmd::property::{create_property_update_command, create_property_request_command}; -use crate::server::auto::cmd::property::{create_property_update_command, create_property_request_command}; +use crate::cmd::property::{create_property_update_command, create_property_request_command}; +use super::cmd::room::create_room_id_redirect_command; use rand::Rng; use crate::server::utils::broadcast_to_all_clients; +// pub struct ClientSocket { +// tcp_stream: TcpStream, +// username: String, +// } + pub struct AutoServer; impl AutoServer { pub fn new(listener: TcpListener) { @@ -25,6 +30,8 @@ impl AutoServer { let mut sockets: HashMap<Token, TcpStream> = HashMap::new(); let mut requests: HashMap<Token, Vec<u8>> = HashMap::new(); let mut buffer = [0 as u8; 1024]; + // let mut room_ids: HashMap<&str, i32> = HashMap::new(); + let mut room_ids: HashSet<String> = HashSet::new(); let mut events = Events::with_capacity(1024); loop { @@ -102,10 +109,40 @@ impl AutoServer { sockets.get_mut(&token).unwrap() .write_all(&create_buddy_list_notify_command("Wirlaburla")) .unwrap(); - info!("sent buddy notify update command") + info!("sent buddy notify update command"); } // ROOMIDRQ - 20 => info!("received room id request command"), + 20 => { + info!("received room id request command"); + + let room_name = from_utf8( + &buffer[4..*&buffer.get(0).unwrap().to_owned() as usize] + ).unwrap(); + let mut room_id = 0; + if !room_ids.contains(room_name) { + room_ids.insert(room_name.to_string()); + let new = room_ids.iter() + .position(|i| i == room_name) + .unwrap(); + debug!("inserted room '{}' as '{}'", room_name, new); + } else { + let pos = room_ids + .iter() + .position(|i| i == room_name) + .unwrap(); + debug!("found room '{}' as '{}'", room_name, pos); + room_id = pos; + } + debug!("room name: {}, room id: {}", room_name, room_id); + debug!("{:?}", room_ids); + + // Passing `0` as `room_id` parameter as currently there is + // no way to find out a room's ID based on it's name. + sockets.get_mut(&token).unwrap() + .write_all(&create_room_id_redirect_command(room_name, room_id)) + .unwrap(); + info!("sent redirect id command") + } // TEXT 14 => { info!("received text command"); |