summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gameserver.rs4
-rw-r--r--src/main.rs19
-rw-r--r--src/world.rs5
3 files changed, 23 insertions, 5 deletions
diff --git a/src/gameserver.rs b/src/gameserver.rs
index 9778275..7136399 100644
--- a/src/gameserver.rs
+++ b/src/gameserver.rs
@@ -93,6 +93,10 @@ impl GameServer {
}
}
+ pub fn send_player_error(&mut self, player: &PlayerId, errname: &str, err_text: &str) -> Result<(), io::Error> {
+ self.send(player, json!(["error", errname, err_text]))
+ }
+
fn handle_message(&mut self, (serverid, connectionid): (usize, usize), msg: Message) -> Option<Action> {
let id = (serverid, connectionid);
match msg {
diff --git a/src/main.rs b/src/main.rs
index b4e8d82..3f2cc90 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -124,13 +124,22 @@ fn main(){
for action in actions {
match action {
Action::Input(player, control) => {
- let _ = world.control_player(player, control);
+ if let Err(err) = world.control_player(player.clone(), control){
+ println!("error controlling player {:?}: {:?}", player, err);
+ }
}
Action::Join(player) => {
- world.add_player(&player).expect("can not add player");
+ if let Err(err) = world.add_player(&player) {
+ println!("Error: can not add player {:?}: {:?}", player, err);
+ if let Err(senderr) = gameserver.send_player_error(&player, "worlderror", "invalid room or savefile") {
+ println!("Error: can not send error message to {:?}: {:?}", player, senderr);
+ }
+ }
}
Action::Leave(player) => {
- world.remove_player(&player).expect("can not remove player");
+ if let Err(err) = world.remove_player(&player) {
+ println!("Error: can not remove player {:?}: {:?}", player, err);
+ }
message_cache.remove(&player);
}
}
@@ -147,7 +156,9 @@ fn main(){
continue;
}
// println!("m {}", message.to_json());
- let _ = gameserver.send(&player, message.to_json());
+ if let Err(err) = gameserver.send(&player, message.to_json()) {
+ println!("Error: failed to send to {:?}: {:?}", player, err);
+ }
}
count += 1;
diff --git a/src/world.rs b/src/world.rs
index 59b3aba..5105df2 100644
--- a/src/world.rs
+++ b/src/world.rs
@@ -66,7 +66,7 @@ impl <'a, 'b>World<'a, 'b> {
} else {
let mut room = Room::new(id.clone(), self.encyclopedia.clone(), None);
let template = self.template_loader.load_room(id.clone())?;
- room.load_from_template(&template);
+ room.load_from_template(&template)?;
room
};
if let Ok(state) = self.persistence.load_room(id.clone()){
@@ -96,6 +96,9 @@ impl <'a, 'b>World<'a, 'b> {
.unwrap_or_else(|_err| // todo: what if player exists but can't be loaded for another reason?
PlayerState::new(playerid.clone())
);
+ if &state.id != playerid {
+ return Err(aerr!("Player ids do not match. Wanted {:?}, got {:?}", playerid, state.id));
+ }
if state.room == Some(purgatory::purgatory_id()){
state.respawn();
}