mirror of
https://git.ngram.ca/OpenJam/rc-servers
synced 2026-08-23 23:08:52 +00:00
Don't revalidate client connection when client tries to revalidate game GUID, add more logging in this case of the client being glitchy
This commit is contained in:
@@ -599,43 +599,72 @@ impl <L: super::CustomGameLogic> GenericGamemodeEngine<L> {
|
|||||||
}
|
}
|
||||||
let player_info = player_info_opt.unwrap();
|
let player_info = player_info_opt.unwrap();
|
||||||
let id = player_info.descriptor.player_id;
|
let id = player_info.descriptor.player_id;
|
||||||
let aliases = self.fakes_handler.get_client_ais().await.into_iter().find(|(key, _val)| *key == id).map(|(_key, val)| val).unwrap_or_default();
|
let is_already_connected = self.users.read().await.contains_key(&id);
|
||||||
log::info!("AIs running on new player {}: {:?}", id, aliases);
|
if is_already_connected {
|
||||||
let new_user = UserConnection {
|
log::warn!("Player {} (user {}) is trying to connect again to game {}, they're probably in a bad state (short-circuiting approval)", id, player_info.descriptor.public_id, game_guid);
|
||||||
user,
|
let mut users = self.users.write().await;
|
||||||
connection: UserSender {
|
let old_user = users.remove(&id).unwrap();
|
||||||
connection,
|
let new_user = UserConnection {
|
||||||
sender,
|
user,
|
||||||
},
|
connection: UserSender {
|
||||||
aliases,
|
connection,
|
||||||
};
|
sender,
|
||||||
if self.custom_logic_handler.on_player_join(self, &new_user, player_info).await {
|
},
|
||||||
//self.spawn_send_loading_events(&new_user, id, self.players_info.clone());
|
aliases: old_user.aliases.clone(),
|
||||||
|
};
|
||||||
|
let new_user = std::sync::Arc::new(new_user);
|
||||||
|
for fake_id in new_user.aliases.iter() {
|
||||||
|
users.insert(*fake_id, new_user.clone());
|
||||||
|
}
|
||||||
crate::events::log_lnl_send_failure(new_user.connection.rlnl().send_data(
|
crate::events::log_lnl_send_failure(new_user.connection.rlnl().send_data(
|
||||||
&rlnl::events::ingame::PlayerId { player: id },
|
&rlnl::events::ingame::PlayerId { player: id },
|
||||||
rlnl::event_code::NetworkEvent::GameGuidValidated,
|
rlnl::event_code::NetworkEvent::GameGuidValidated,
|
||||||
literustlib::packet::Property::ReliableOrdered,
|
literustlib::packet::Property::ReliableOrdered,
|
||||||
&new_user.connection.connection
|
&new_user.connection.connection
|
||||||
).await);
|
).await);
|
||||||
log::debug!("User {} is validated to play game {}", new_user.user.account_id(), game_guid);
|
} else {
|
||||||
let new_user = std::sync::Arc::new(new_user);
|
let aliases = self.fakes_handler.get_client_ais().await.into_iter().find(|(key, _val)| *key == id).map(|(_key, val)| val).unwrap_or_default();
|
||||||
if let Err(e) = new_user.user.save_player_connected_status(self.game_guid(), true).await {
|
log::info!("AIs running on new player {} in game {}: {:?}", id, game_guid, aliases);
|
||||||
log::error!("Failed to mark player {} (user {}) as connected to game {}: {}", id, user_id, self.game_guid(), e);
|
let new_user = UserConnection {
|
||||||
}
|
user,
|
||||||
let mut users = self.users.write().await;
|
connection: UserSender {
|
||||||
let was_empty = users.is_empty();
|
connection,
|
||||||
users.insert(id, new_user.clone());
|
sender,
|
||||||
for fake_id in new_user.aliases.iter() {
|
},
|
||||||
if let Some(player_desc) = self.user_descriptor(*fake_id) {
|
aliases,
|
||||||
if self.custom_logic_handler.on_player_join(self, &new_user, player_desc).await {
|
};
|
||||||
users.insert(*fake_id, new_user.clone());
|
if self.custom_logic_handler.on_player_join(self, &new_user, player_info).await {
|
||||||
}
|
//self.spawn_send_loading_events(&new_user, id, self.players_info.clone());
|
||||||
} else {
|
crate::events::log_lnl_send_failure(new_user.connection.rlnl().send_data(
|
||||||
log::warn!("Non-existent fake player id {} was encountered while connecting, ignoring", *fake_id);
|
&rlnl::events::ingame::PlayerId { player: id },
|
||||||
|
rlnl::event_code::NetworkEvent::GameGuidValidated,
|
||||||
|
literustlib::packet::Property::ReliableOrdered,
|
||||||
|
&new_user.connection.connection
|
||||||
|
).await);
|
||||||
|
log::debug!("User {} is validated to play game {}", new_user.user.account_id(), game_guid);
|
||||||
|
let new_user = std::sync::Arc::new(new_user);
|
||||||
|
if let Err(e) = new_user.user.save_player_connected_status(self.game_guid(), true).await {
|
||||||
|
log::error!("Failed to mark player {} (user {}) as connected to game {}: {}", id, user_id, self.game_guid(), e);
|
||||||
}
|
}
|
||||||
}
|
let mut users = self.users.write().await;
|
||||||
if was_empty {
|
let was_empty = users.is_empty();
|
||||||
self.start_loading_sync_timeouter().await;
|
users.insert(id, new_user.clone());
|
||||||
|
for fake_id in new_user.aliases.iter() {
|
||||||
|
if let Some(player_desc) = self.user_descriptor(*fake_id) {
|
||||||
|
if self.custom_logic_handler.on_player_join(self, &new_user, player_desc).await {
|
||||||
|
users.insert(*fake_id, new_user.clone());
|
||||||
|
}else {
|
||||||
|
log::info!("Fake player {} (for player {}) rejected by custom on_player_join logic in game {}", fake_id, id, game_guid);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log::warn!("Non-existent fake player id {} (for player {}) was encountered while connecting to game {}, ignoring", *fake_id, id, game_guid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if was_empty {
|
||||||
|
self.start_loading_sync_timeouter().await;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log::info!("Player {} rejected by custom on_player_join logic in game {}", id, game_guid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
response.send(None).unwrap_or_default();
|
response.send(None).unwrap_or_default();
|
||||||
|
|||||||
@@ -28,8 +28,8 @@ impl User {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
UserState::Authenticated(_) => {
|
UserState::Authenticated(info) => {
|
||||||
log::warn!("User already authenticated, ignoring");
|
log::warn!("User {} already authenticated, ignoring", info.user.account_id());
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user