# HG changeset patch # User alfadur # Date 1534437183 -10800 # Node ID 09f4a30e50cc62ac3e4fcfa295cfaa097237a77c # Parent 5664650befcdf3ab3179f027c3b9f72c2c100238 Rust 2018 conversion diff -r 5664650befcd -r 09f4a30e50cc gameServer2/Cargo.toml --- a/gameServer2/Cargo.toml Tue Aug 14 15:25:05 2018 +0200 +++ b/gameServer2/Cargo.toml Thu Aug 16 19:33:03 2018 +0300 @@ -1,4 +1,7 @@ +cargo-features = ["edition"] + [package] +edition = "2018" name = "hedgewars-server" version = "0.0.1" authors = [ "Andrey Korotaev " ] @@ -7,7 +10,7 @@ rand = "0.5" mio = "0.6" slab = "0.4" -netbuf = "0.4.0" +netbuf = "0.4" nom = "4.0" env_logger = "0.4" log = "0.4" diff -r 5664650befcd -r 09f4a30e50cc gameServer2/src/main.rs --- a/gameServer2/src/main.rs Tue Aug 14 15:25:05 2018 +0200 +++ b/gameServer2/src/main.rs Thu Aug 16 19:33:03 2018 +0300 @@ -1,5 +1,6 @@ #![allow(unused_imports)] #![deny(bare_trait_objects)] +#![feature(rust_2018_preview)] extern crate rand; extern crate mio; @@ -27,7 +28,7 @@ mod server; mod protocol; -use server::network::NetworkLayer; +use crate::server::network::NetworkLayer; use std::time::Duration; fn main() { diff -r 5664650befcd -r 09f4a30e50cc gameServer2/src/protocol/messages.rs --- a/gameServer2/src/protocol/messages.rs Tue Aug 14 15:25:05 2018 +0200 +++ b/gameServer2/src/protocol/messages.rs Thu Aug 16 19:33:03 2018 +0300 @@ -1,4 +1,4 @@ -use server::coretypes::{ +use crate::server::coretypes::{ ServerVar, GameCfg, TeamInfo, HedgehogInfo, VoteType }; @@ -111,7 +111,7 @@ impl GameCfg { pub fn to_protocol(&self) -> (String, Vec) { - use server::coretypes::GameCfg::*; + use crate::server::coretypes::GameCfg::*; match self { FeatureSize(s) => ("FEATURE_SIZE".to_string(), vec![s.to_string()]), MapType(t) => ("MAP".to_string(), vec![t.to_string()]), @@ -260,7 +260,7 @@ Pong => msg!["PONG"], Connected(protocol_version) => msg![ "CONNECTED", - "Hedgewars server https://www.hedgewars.org/", + "Hedgewars server http://www.hedgewars.org/", protocol_version], Bye(msg) => msg!["BYE", msg], Nick(nick) => msg!["NICK", nick], diff -r 5664650befcd -r 09f4a30e50cc gameServer2/src/protocol/parser.rs --- a/gameServer2/src/protocol/parser.rs Tue Aug 14 15:25:05 2018 +0200 +++ b/gameServer2/src/protocol/parser.rs Thu Aug 16 19:33:03 2018 +0300 @@ -17,7 +17,7 @@ messages::{HWProtocolMessage, HWProtocolMessage::*}, test::gen_proto_msg }; -use server::coretypes::{ +use crate::server::coretypes::{ HedgehogInfo, TeamInfo, GameCfg, VoteType }; @@ -70,7 +70,7 @@ | do_parse!(tag!("GET_SERVER_VAR") >> (GetServerVar)) | do_parse!(tag!("TOGGLE_READY") >> (ToggleReady)) | do_parse!(tag!("START_GAME") >> (StartGame)) - | do_parse!(tag!("ROUNDFINISHED") >> m: opt_param >> (RoundFinished)) + | do_parse!(tag!("ROUNDFINISHED") >> _m: opt_param >> (RoundFinished)) | do_parse!(tag!("TOGGLE_RESTRICT_JOINS") >> (ToggleRestrictJoin)) | do_parse!(tag!("TOGGLE_RESTRICT_TEAMS") >> (ToggleRestrictTeams)) | do_parse!(tag!("TOGGLE_REGISTERED_ONLY") >> (ToggleRegisteredOnly)) diff -r 5664650befcd -r 09f4a30e50cc gameServer2/src/protocol/test.rs --- a/gameServer2/src/protocol/test.rs Tue Aug 14 15:25:05 2018 +0200 +++ b/gameServer2/src/protocol/test.rs Thu Aug 16 19:33:03 2018 +0300 @@ -4,7 +4,7 @@ strategy::{Strategy, BoxedStrategy, Just, Map}, }; -use server::coretypes::{GameCfg, TeamInfo, HedgehogInfo}; +use crate::server::coretypes::{GameCfg, TeamInfo, HedgehogInfo}; use super::messages::{ HWProtocolMessage, HWProtocolMessage::* @@ -53,7 +53,7 @@ impl Arbitrary for Ascii { type Parameters = ::Parameters; - fn arbitrary_with(args: Self::Parameters) -> Self::Strategy { + fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy { "[a-zA-Z0-9]+".prop_map(Ascii).boxed() } @@ -63,8 +63,8 @@ impl Arbitrary for GameCfg { type Parameters = (); - fn arbitrary_with(args: ::Parameters) -> ::Strategy { - use server::coretypes::GameCfg::*; + fn arbitrary_with(_args: ::Parameters) -> ::Strategy { + use crate::server::coretypes::GameCfg::*; (0..10).no_shrink().prop_flat_map(|i| { proto_msg_match!(i, def = FeatureSize(0), 0 => FeatureSize(u32), @@ -87,7 +87,7 @@ impl Arbitrary for TeamInfo { type Parameters = (); - fn arbitrary_with(args: ::Parameters) -> ::Strategy { + fn arbitrary_with(_args: ::Parameters) -> ::Strategy { ("[a-z]+", 0u8..127u8, "[a-z]+", "[a-z]+", "[a-z]+", "[a-z]+", 0u8..127u8) .prop_map(|(name, color, grave, fort, voice_pack, flag, difficulty)| { fn hog(n: u8) -> HedgehogInfo { diff -r 5664650befcd -r 09f4a30e50cc gameServer2/src/server/actions.rs --- a/gameServer2/src/server/actions.rs Tue Aug 14 15:25:05 2018 +0200 +++ b/gameServer2/src/server/actions.rs Thu Aug 16 19:33:03 2018 +0300 @@ -11,13 +11,15 @@ room::HWRoom, handlers }; -use protocol::messages::{ - HWProtocolMessage, - HWServerMessage, - HWServerMessage::*, - server_chat +use crate::{ + protocol::messages::{ + HWProtocolMessage, + HWServerMessage, + HWServerMessage::*, + server_chat + }, + utils::to_engine_msg }; -use utils::to_engine_msg; use rand::{thread_rng, Rng, distributions::Uniform}; pub enum Destination { @@ -118,15 +120,10 @@ match action { Send(msg) => server.send(client_id, &msg.destination, msg.message), ByeClient(msg) => { - let room_id; - let nick; - { - let c = &server.clients[client_id]; - room_id = c.room_id; - nick = c.nick.clone(); - } + let c = &server.clients[client_id]; + let nick = c.nick.clone(); - if let Some(id) = room_id{ + if let Some(id) = c.room_id{ if id != server.lobby_id { server.react(client_id, vec![ MoveToLobby(format!("quit: {}", msg.clone()))]); @@ -155,16 +152,14 @@ JoinLobby => { server.clients[client_id].room_id = Some(server.lobby_id); - let joined_msg; - { - let mut lobby_nicks = Vec::new(); - for (_, c) in server.clients.iter() { - if c.room_id.is_some() { - lobby_nicks.push(c.nick.clone()); - } + let mut lobby_nicks = Vec::new(); + for (_, c) in server.clients.iter() { + if c.room_id.is_some() { + lobby_nicks.push(c.nick.clone()); } - joined_msg = LobbyJoined(lobby_nicks); } + let joined_msg = LobbyJoined(lobby_nicks); + let everyone_msg = LobbyJoined(vec![server.clients[client_id].nick.clone()]); let flags_msg = ClientFlags( "+i".to_string(), @@ -188,105 +183,102 @@ }, AddRoom(name, password) => { let room_id = server.add_room();; - let actions = { - let r = &mut server.rooms[room_id]; - let c = &mut server.clients[client_id]; - r.master_id = Some(c.id); - r.name = name; - r.password = password; - r.protocol_number = c.protocol_number; - vec![ - RoomAdd(r.info(Some(&c))).send_all() - .with_protocol(r.protocol_number).action(), - MoveToRoom(room_id)] - }; + let r = &mut server.rooms[room_id]; + let c = &mut server.clients[client_id]; + r.master_id = Some(c.id); + r.name = name; + r.password = password; + r.protocol_number = c.protocol_number; + + let actions = vec![ + RoomAdd(r.info(Some(&c))).send_all() + .with_protocol(r.protocol_number).action(), + MoveToRoom(room_id)]; + server.react(client_id, actions); }, RemoveRoom(room_id) => { - let actions = { - let r = &mut server.rooms[room_id]; - vec![RoomRemove(r.name.clone()).send_all() - .with_protocol(r.protocol_number).action()] - }; + let r = &mut server.rooms[room_id]; + let actions = vec![RoomRemove(r.name.clone()).send_all() + .with_protocol(r.protocol_number).action()]; server.rooms.remove(room_id); server.react(client_id, actions); } MoveToRoom(room_id) => { - let actions = { - let r = &mut server.rooms[room_id]; - let c = &mut server.clients[client_id]; - r.players_number += 1; - c.room_id = Some(room_id); + let r = &mut server.rooms[room_id]; + let c = &mut server.clients[client_id]; + r.players_number += 1; + c.room_id = Some(room_id); + + let is_master = r.master_id == Some(c.id); + c.set_is_master(is_master); + c.set_is_ready(is_master); + c.set_is_joined_mid_game(false); + + if is_master { + r.ready_players_number += 1; + } + + let mut v = vec![ + RoomJoined(vec![c.nick.clone()]).send_all().in_room(room_id).action(), + ClientFlags("+i".to_string(), vec![c.nick.clone()]).send_all().action(), + SendRoomUpdate(None)]; + + if !r.greeting.is_empty() { + v.push(ChatMsg {nick: "[greeting]".to_string(), msg: r.greeting.clone()} + .send_self().action()); + } - let is_master = r.master_id == Some(c.id); - c.set_is_master(is_master); - c.set_is_ready(is_master); - c.set_is_joined_mid_game(false); + if !c.is_master() { + let team_names: Vec<_>; + if let Some(ref mut info) = r.game_info { + c.set_is_in_game(true); + c.set_is_joined_mid_game(true); - if is_master { - r.ready_players_number += 1; + { + let teams = info.client_teams(c.id); + c.teams_in_game = teams.clone().count() as u8; + c.clan = teams.clone().next().map(|t| t.color); + team_names = teams.map(|t| t.name.clone()).collect(); + } + + if !team_names.is_empty() { + info.left_teams.retain(|name| + !team_names.contains(&name)); + info.teams_in_game += team_names.len() as u8; + r.teams = info.teams_at_start.iter() + .filter(|(_, t)| !team_names.contains(&t.name)) + .cloned().collect(); + } + } else { + team_names = Vec::new(); } - let mut v = vec![ - RoomJoined(vec![c.nick.clone()]).send_all().in_room(room_id).action(), - ClientFlags("+i".to_string(), vec![c.nick.clone()]).send_all().action(), - SendRoomUpdate(None)]; - if !r.greeting.is_empty() { - v.push(ChatMsg {nick: "[greeting]".to_string(), msg: r.greeting.clone()} - .send_self().action()); - } - if !c.is_master() { - let team_names: Vec<_>; - if let Some(ref mut info) = r.game_info { - c.set_is_in_game(true); - c.set_is_joined_mid_game(true); - - { - let teams = info.client_teams(c.id); - c.teams_in_game = teams.clone().count() as u8; - c.clan = teams.clone().next().map(|t| t.color); - team_names = teams.map(|t| t.name.clone()).collect(); - } + v.push(SendRoomData{ to: client_id, teams: true, config: true, flags: true}); - if !team_names.is_empty() { - info.left_teams.retain(|name| - !team_names.contains(&name)); - info.teams_in_game += team_names.len() as u8; - r.teams = info.teams_at_start.iter() - .filter(|(_, t)| !team_names.contains(&t.name)) - .cloned().collect(); - } - } else { - team_names = Vec::new(); - } - - v.push(SendRoomData{ to: client_id, teams: true, config: true, flags: true}); + if let Some(ref info) = r.game_info { + v.push(RunGame.send_self().action()); + v.push(ClientFlags("+g".to_string(), vec![c.nick.clone()]) + .send_all().in_room(r.id).action()); + v.push(ForwardEngineMessage( + vec![to_engine_msg("e$spectate 1".bytes())]) + .send_self().action()); + v.push(ForwardEngineMessage(info.msg_log.clone()) + .send_self().action()); - if let Some(ref info) = r.game_info { - v.push(RunGame.send_self().action()); - v.push(ClientFlags("+g".to_string(), vec![c.nick.clone()]) - .send_all().in_room(r.id).action()); + for name in &team_names { v.push(ForwardEngineMessage( - vec![to_engine_msg("e$spectate 1".bytes())]) - .send_self().action()); - v.push(ForwardEngineMessage(info.msg_log.clone()) - .send_self().action()); - - for name in &team_names { - v.push(ForwardEngineMessage( - vec![to_engine_msg(once(b'G').chain(name.bytes()))]) - .send_all().in_room(r.id).action()); - } - if info.is_paused { - v.push(ForwardEngineMessage(vec![to_engine_msg(once(b'I'))]) - .send_all().in_room(r.id).action()) - } + vec![to_engine_msg(once(b'G').chain(name.bytes()))]) + .send_all().in_room(r.id).action()); + } + if info.is_paused { + v.push(ForwardEngineMessage(vec![to_engine_msg(once(b'I'))]) + .send_all().in_room(r.id).action()) } } - v - }; - server.react(client_id, actions); + } + server.react(client_id, v); } SendRoomData {to, teams, config, flags} => { let mut actions = Vec::new(); @@ -483,7 +475,9 @@ .send_all().in_room(r.id).action()); } } - if let Some(id) = new_id { server.clients[id].set_is_master(true) } + if let Some(id) = new_id { + server.clients[id].set_is_master(true) + } server.react(client_id, actions); } RemoveTeam(name) => { @@ -502,22 +496,18 @@ server.react(client_id, actions); }, RemoveClientTeams => { - let actions = if let (c, Some(r)) = server.client_and_room(client_id) { - r.client_teams(c.id).map(|t| RemoveTeam(t.name.clone())).collect() - } else { - Vec::new() - }; - server.react(client_id, actions); + if let (c, Some(r)) = server.client_and_room(client_id) { + let actions = r.client_teams(c.id).map(|t| RemoveTeam(t.name.clone())).collect(); + server.react(client_id, actions); + } } SendRoomUpdate(old_name) => { - let actions = if let (c, Some(r)) = server.client_and_room(client_id) { + if let (c, Some(r)) = server.client_and_room(client_id) { let name = old_name.unwrap_or_else(|| r.name.clone()); - vec![RoomUpdated(name, r.info(Some(&c))) - .send_all().with_protocol(r.protocol_number).action()] - } else { - Vec::new() - }; - server.react(client_id, actions); + let actions = vec![RoomUpdated(name, r.info(Some(&c))) + .send_all().with_protocol(r.protocol_number).action()]; + server.react(client_id, actions); + } }, StartRoomGame(room_id) => { let actions = { @@ -598,8 +588,7 @@ let nicks: Vec<_> = server.clients.iter_mut() .filter(|(_, c)| c.room_id == Some(room_id)) .map(|(_, c)| { - let is_master = c.is_master(); - c.set_is_ready(is_master); + c.set_is_ready(c.is_master()); c.set_is_joined_mid_game(false); c }).filter_map(|c| if !c.is_master() { diff -r 5664650befcd -r 09f4a30e50cc gameServer2/src/server/handlers/common.rs --- a/gameServer2/src/server/handlers/common.rs Tue Aug 14 15:25:05 2018 +0200 +++ b/gameServer2/src/server/handlers/common.rs Thu Aug 16 19:33:03 2018 +0300 @@ -1,8 +1,10 @@ -use protocol::messages::{ - HWProtocolMessage::{self, Rnd}, HWServerMessage::{self, ChatMsg}, +use crate::{ + server::{actions::Action, server::HWServer}, + protocol::messages::{ + HWProtocolMessage::{self, Rnd}, HWServerMessage::{self, ChatMsg}, + } }; use rand::{self, Rng, thread_rng}; -use server::{actions::Action, server::HWServer}; pub fn rnd_reply(options: &[String]) -> HWServerMessage { let mut rng = thread_rng(); diff -r 5664650befcd -r 09f4a30e50cc gameServer2/src/server/handlers/inroom.rs --- a/gameServer2/src/server/handlers/inroom.rs Tue Aug 14 15:25:05 2018 +0200 +++ b/gameServer2/src/server/handlers/inroom.rs Thu Aug 16 19:33:03 2018 +0300 @@ -1,17 +1,19 @@ use mio; -use protocol::messages::{ - HWProtocolMessage, - HWServerMessage::*, - server_chat +use crate::{ + server::{ + coretypes::{ClientId, RoomId, Voting, VoteType}, + server::HWServer, + room::{HWRoom, RoomFlags}, + actions::{Action, Action::*} + }, + protocol::messages::{ + HWProtocolMessage, + HWServerMessage::*, + server_chat + }, + utils::is_name_illegal }; -use server::{ - coretypes::{ClientId, RoomId, Voting, VoteType}, - server::HWServer, - room::{HWRoom, RoomFlags}, - actions::{Action, Action::*} -}; -use utils::is_name_illegal; use std::{ mem::swap, fs::{File, OpenOptions}, io::{Read, Write, Result, Error, ErrorKind} @@ -58,7 +60,7 @@ } } -fn is_msg_valid(msg: &[u8], team_indices: &[u8]) -> bool { +fn is_msg_valid(msg: &[u8], _team_indices: &[u8]) -> bool { if let Some(typ) = msg.get(1) { VALID_MESSAGES.contains(typ) } else { @@ -85,7 +87,7 @@ } fn room_message_flag(msg: &HWProtocolMessage) -> RoomFlags { - use protocol::messages::HWProtocolMessage::*; + use crate::protocol::messages::HWProtocolMessage::*; match msg { ToggleRestrictJoin => RoomFlags::RESTRICTED_JOIN, ToggleRestrictTeams => RoomFlags::RESTRICTED_TEAM_ADD, @@ -107,7 +109,7 @@ } pub fn handle(server: &mut HWServer, client_id: ClientId, room_id: RoomId, message: HWProtocolMessage) { - use protocol::messages::HWProtocolMessage::*; + use crate::protocol::messages::HWProtocolMessage::*; match message { Part(None) => server.react(client_id, vec![ MoveToLobby("part".to_string())]), @@ -154,7 +156,7 @@ server.react(client_id, actions); }, ToggleReady => { - let actions = if let (c, Some(r)) = server.client_and_room(client_id) { + if let (c, Some(r)) = server.client_and_room(client_id) { let flags = if c.is_ready() { r.ready_players_number -= 1; "-r" @@ -162,19 +164,15 @@ r.ready_players_number += 1; "+r" }; - let is_ready = !c.is_ready(); - c.set_is_ready(is_ready); + c.set_is_ready(!c.is_ready()); let mut v = vec![ClientFlags(flags.to_string(), vec![c.nick.clone()]) .send_all().in_room(r.id).action()]; if r.is_fixed() && r.ready_players_number == r.players_number { v.push(StartRoomGame(r.id)) } - v - } else { - Vec::new() - }; - server.react(client_id, actions); + server.react(client_id, v); + } } AddTeam(info) => { let mut actions = Vec::new(); @@ -224,9 +222,9 @@ server.react(client_id, actions); }, SetHedgehogsNumber(team_name, number) => { - let actions = if let (c, Some(r)) = server.client_and_room(client_id) { + if let (c, Some(r)) = server.client_and_room(client_id) { let addable_hedgehogs = r.addable_hedgehogs(); - if let Some((_, mut team)) = r.find_team_and_owner_mut(|t| t.name == team_name) { + let actions = if let Some((_, team)) = r.find_team_and_owner_mut(|t| t.name == team_name) { if !c.is_master() { vec![ProtocolError("You're not the room master!".to_string())] } else if number < 1 || number > 8 @@ -240,16 +238,14 @@ } } else { vec![(Warn("No such team.".to_string()))] - } - } else { - Vec::new() - }; - server.react(client_id, actions); + }; + server.react(client_id, actions); + } }, SetTeamColor(team_name, color) => { - let mut owner_id = None; - let actions = if let (c, Some(r)) = server.client_and_room(client_id) { - if let Some((owner, mut team)) = r.find_team_and_owner_mut(|t| t.name == team_name) { + if let (c, Some(r)) = server.client_and_room(client_id) { + let mut owner_id = None; + let actions = if let Some((owner, team)) = r.find_team_and_owner_mut(|t| t.name == team_name) { if !c.is_master() { vec![ProtocolError("You're not the room master!".to_string())] } else if false { @@ -262,20 +258,18 @@ } } else { vec![(Warn("No such team.".to_string()))] - } - } else { - Vec::new() - }; + }; - if let Some(id) = owner_id { - server.clients[id].clan = Some(color); - } + if let Some(id) = owner_id { + server.clients[id].clan = Some(color); + } - server.react(client_id, actions); + server.react(client_id, actions); + }; }, Cfg(cfg) => { - let actions = if let (c, Some(r)) = server.client_and_room(client_id) { - if r.is_fixed() { + if let (c, Some(r)) = server.client_and_room(client_id) { + let actions = if r.is_fixed() { vec![Warn("Access denied.".to_string())] } else if !c.is_master() { vec![ProtocolError("You're not the room master!".to_string())] @@ -284,11 +278,9 @@ .send_all().in_room(r.id).but_self().action()]; r.set_config(cfg); v - } - } else { - Vec::new() - }; - server.react(client_id, actions); + }; + server.react(client_id, actions); + } } Save(name, location) => { let actions = vec![server_chat(format!("Room config saved as {}", name)) @@ -297,8 +289,8 @@ server.react(client_id, actions); } SaveRoom(filename) => { - let actions = if server.clients[client_id].is_admin() { - match server.rooms[room_id].get_saves() { + if server.clients[client_id].is_admin() { + let actions = match server.rooms[room_id].get_saves() { Ok(text) => match write_file(&filename, &text) { Ok(_) => vec![server_chat("Room configs saved successfully.".to_string()) .send_self().action()], @@ -311,15 +303,13 @@ warn!("Error while serializing the room configs: {}", e); vec![Warn("Unable to serialize the room configs.".to_string())] } - } - } else { - Vec::new() - }; - server.react(client_id, actions); + }; + server.react(client_id, actions); + } } LoadRoom(filename) => { - let actions = if server.clients[client_id].is_admin() { - match read_file(&filename) { + if server.clients[client_id].is_admin() { + let actions = match read_file(&filename) { Ok(text) => match server.rooms[room_id].set_saves(&text) { Ok(_) => vec![server_chat("Room configs loaded successfully.".to_string()) .send_self().action()], @@ -332,11 +322,9 @@ warn!("Error while reading the config file \"{}\": {}", filename, e); vec![Warn("Unable to load the room configs.".to_string())] } - } - } else { - Vec::new() - }; - server.react(client_id, actions); + }; + server.react(client_id, actions); + } } Delete(name) => { let actions = if !server.rooms[room_id].delete_config(&name) { diff -r 5664650befcd -r 09f4a30e50cc gameServer2/src/server/handlers/lobby.rs --- a/gameServer2/src/server/handlers/lobby.rs Tue Aug 14 15:25:05 2018 +0200 +++ b/gameServer2/src/server/handlers/lobby.rs Thu Aug 16 19:33:03 2018 +0300 @@ -1,19 +1,21 @@ use mio; -use server::{ - server::HWServer, - coretypes::ClientId, - actions::{Action, Action::*} +use crate::{ + server::{ + server::HWServer, + coretypes::ClientId, + actions::{Action, Action::*} + }, + protocol::messages::{ + HWProtocolMessage, + HWServerMessage::* + }, + utils::is_name_illegal }; -use protocol::messages::{ - HWProtocolMessage, - HWServerMessage::* -}; -use utils::is_name_illegal; use super::common::rnd_reply; pub fn handle(server: &mut HWServer, client_id: ClientId, message: HWProtocolMessage) { - use protocol::messages::HWProtocolMessage::*; + use crate::protocol::messages::HWProtocolMessage::*; match message { CreateRoom(name, password) => { let actions = @@ -35,32 +37,29 @@ .send_all().in_room(server.lobby_id).but_self().action()]; server.react(client_id, actions); }, - JoinRoom(name, password) => { - let actions; - { - let room = server.rooms.iter().find(|(_, r)| r.name == name); - let room_id = room.map(|(_, r)| r.id); - let nicks = server.clients.iter() - .filter(|(_, c)| c.room_id == room_id) - .map(|(_, c)| c.nick.clone()) - .collect(); - let c = &mut server.clients[client_id]; + JoinRoom(name, _password) => { + let room = server.rooms.iter().find(|(_, r)| r.name == name); + let room_id = room.map(|(_, r)| r.id); + let nicks = server.clients.iter() + .filter(|(_, c)| c.room_id == room_id) + .map(|(_, c)| c.nick.clone()) + .collect(); + let c = &mut server.clients[client_id]; - actions = if let Some((_, r)) = room { - if c.protocol_number != r.protocol_number { - vec![Warn("Room version incompatible to your Hedgewars version!".to_string())] - } else if r.is_join_restricted() { - vec![Warn("Access denied. This room currently doesn't allow joining.".to_string())] - } else if r.players_number == u8::max_value() { - vec![Warn("This room is already full".to_string())] - } else { - vec![MoveToRoom(r.id), - RoomJoined(nicks).send_self().action()] - } + let actions = if let Some((_, r)) = room { + if c.protocol_number != r.protocol_number { + vec![Warn("Room version incompatible to your Hedgewars version!".to_string())] + } else if r.is_join_restricted() { + vec![Warn("Access denied. This room currently doesn't allow joining.".to_string())] + } else if r.players_number == u8::max_value() { + vec![Warn("This room is already full".to_string())] } else { - vec![Warn("No such room.".to_string())] - }; - } + vec![MoveToRoom(r.id), + RoomJoined(nicks).send_self().action()] + } + } else { + vec![Warn("No such room.".to_string())] + }; server.react(client_id, actions); }, Rnd(v) => { diff -r 5664650befcd -r 09f4a30e50cc gameServer2/src/server/handlers/loggingin.rs --- a/gameServer2/src/server/handlers/loggingin.rs Tue Aug 14 15:25:05 2018 +0200 +++ b/gameServer2/src/server/handlers/loggingin.rs Thu Aug 16 19:33:03 2018 +0300 @@ -1,55 +1,52 @@ use mio; -use server::{ - server::HWServer, - coretypes::ClientId, - actions::{Action, Action::*} +use crate::{ + server::{ + server::HWServer, + coretypes::ClientId, + actions::{Action, Action::*} + }, + protocol::messages::{ + HWProtocolMessage, HWServerMessage::* + }, + utils::is_name_illegal }; -use protocol::messages::{ - HWProtocolMessage, HWServerMessage::* -}; -use utils::is_name_illegal; pub fn handle(server: & mut HWServer, client_id: ClientId, message: HWProtocolMessage) { match message { HWProtocolMessage::Nick(nick) => { - let actions; - { - let client = &mut server.clients[client_id]; - debug!("{} {}", nick, is_name_illegal(&nick)); - actions = if client.room_id != None { - unreachable!() - } - else if !client.nick.is_empty() { - vec![ProtocolError("Nickname already provided.".to_string())] - } - else if is_name_illegal(&nick) { - vec![ByeClient("Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}".to_string())] - } - else { - client.nick = nick.clone(); - vec![Nick(nick).send_self().action(), - CheckRegistered] - }; + let client = &mut server.clients[client_id]; + debug!("{} {}", nick, is_name_illegal(&nick)); + let actions = if client.room_id != None { + unreachable!() + } + else if !client.nick.is_empty() { + vec![ProtocolError("Nickname already provided.".to_string())] } + else if is_name_illegal(&nick) { + vec![ByeClient("Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}".to_string())] + } + else { + client.nick = nick.clone(); + vec![Nick(nick).send_self().action(), + CheckRegistered] + }; + server.react(client_id, actions); }, HWProtocolMessage::Proto(proto) => { - let actions; - { - let client = &mut server.clients[client_id]; - actions = if client.protocol_number != 0 { - vec![ProtocolError("Protocol already known.".to_string())] - } - else if proto == 0 { - vec![ProtocolError("Bad number.".to_string())] - } - else { - client.protocol_number = proto; - vec![Proto(proto).send_self().action(), - CheckRegistered] - }; + let client = &mut server.clients[client_id]; + let actions = if client.protocol_number != 0 { + vec![ProtocolError("Protocol already known.".to_string())] } + else if proto == 0 { + vec![ProtocolError("Bad number.".to_string())] + } + else { + client.protocol_number = proto; + vec![Proto(proto).send_self().action(), + CheckRegistered] + }; server.react(client_id, actions); }, _ => warn!("Incorrect command in logging-in state"), diff -r 5664650befcd -r 09f4a30e50cc gameServer2/src/server/handlers/mod.rs --- a/gameServer2/src/server/handlers/mod.rs Tue Aug 14 15:25:05 2018 +0200 +++ b/gameServer2/src/server/handlers/mod.rs Thu Aug 16 19:33:03 2018 +0300 @@ -6,14 +6,17 @@ actions::{Action, Action::*}, coretypes::ClientId }; -use protocol::messages::{ - HWProtocolMessage, - HWServerMessage::* +use crate::{ + protocol::messages::{ + HWProtocolMessage, + HWServerMessage::* + } }; -mod common; + mod loggingin; mod lobby; mod inroom; +mod common; pub fn handle(server: &mut HWServer, client_id: ClientId, message: HWProtocolMessage) { match message { diff -r 5664650befcd -r 09f4a30e50cc gameServer2/src/server/network.rs --- a/gameServer2/src/server/network.rs Tue Aug 14 15:25:05 2018 +0200 +++ b/gameServer2/src/server/network.rs Thu Aug 16 19:33:03 2018 +0300 @@ -14,8 +14,10 @@ use netbuf; use slab::Slab; -use utils; -use protocol::{ProtocolDecoder, messages::*}; +use crate::{ + utils, + protocol::{ProtocolDecoder, messages::*} +}; use super::{ server::{HWServer}, coretypes::ClientId diff -r 5664650befcd -r 09f4a30e50cc gameServer2/src/server/room.rs --- a/gameServer2/src/server/room.rs Tue Aug 14 15:25:05 2018 +0200 +++ b/gameServer2/src/server/room.rs Thu Aug 16 19:33:03 2018 +0300 @@ -1,7 +1,7 @@ use std::{ iter, collections::HashMap }; -use server::{ +use crate::server::{ coretypes::{ClientId, RoomId, TeamInfo, GameCfg, GameCfg::*, Voting}, client::{HWClient} }; @@ -71,7 +71,7 @@ } fn game_config_from(c: &RoomConfig) -> Vec { - use server::coretypes::GameCfg::*; + use crate::server::coretypes::GameCfg::*; let mut v = vec![ Ammo(c.ammo.name.to_string(), c.ammo.settings.clone()), Scheme(c.scheme.name.to_string(), c.scheme.settings.clone()), diff -r 5664650befcd -r 09f4a30e50cc gameServer2/src/server/server.rs --- a/gameServer2/src/server/server.rs Tue Aug 14 15:25:05 2018 +0200 +++ b/gameServer2/src/server/server.rs Thu Aug 16 19:33:03 2018 +0300 @@ -1,11 +1,11 @@ use slab; -use utils; +use crate::utils; use super::{ client::HWClient, room::HWRoom, actions, handlers, coretypes::{ClientId, RoomId}, actions::{Destination, PendingMessage} }; -use protocol::messages::*; +use crate::protocol::messages::*; type Slab = slab::Slab;