basic multiple login check
This commit is contained in:
parent
f96ae557fd
commit
fe03515871
@ -323,10 +323,13 @@ impl<EG: EntityGateway> CharacterServerState<EG> {
|
|||||||
Ok(user) => {
|
Ok(user) => {
|
||||||
if let Some(connected_client) = self.connected_clients.get(&user.id) {
|
if let Some(connected_client) = self.connected_clients.get(&user.id) {
|
||||||
if let Some(expires) = connected_client.expires {
|
if let Some(expires) = connected_client.expires {
|
||||||
if expires < chrono::Utc::now() {
|
if expires > chrono::Utc::now() {
|
||||||
return Ok(vec![SendCharacterPacket::LoginResponse(LoginResponse::by_status(AccountStatus::AlreadyOnline, Session::new()))]);
|
return Ok(vec![SendCharacterPacket::LoginResponse(LoginResponse::by_status(AccountStatus::AlreadyOnline, Session::new()))]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
return Ok(vec![SendCharacterPacket::LoginResponse(LoginResponse::by_status(AccountStatus::AlreadyOnline, Session::new()))]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut response = LoginResponse::by_status(AccountStatus::Ok, Session::new());
|
let mut response = LoginResponse::by_status(AccountStatus::Ok, Session::new());
|
||||||
@ -337,7 +340,7 @@ impl<EG: EntityGateway> CharacterServerState<EG> {
|
|||||||
|
|
||||||
self.connected_clients.insert(user.id.clone(), ConnectedClient {
|
self.connected_clients.insert(user.id.clone(), ConnectedClient {
|
||||||
ship_id: None,
|
ship_id: None,
|
||||||
expires: Some(chrono::Utc::now() + chrono::Duration::minutes(1)),
|
expires: None, //Some(chrono::Utc::now() + chrono::Duration::minutes(1)),
|
||||||
});
|
});
|
||||||
|
|
||||||
client.user = Some(user);
|
client.user = Some(user);
|
||||||
@ -509,11 +512,19 @@ impl<EG: EntityGateway> CharacterServerState<EG> {
|
|||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
fn select_ship(&mut self, menuselect: &MenuSelect) -> Result<Vec<SendCharacterPacket>, anyhow::Error> {
|
fn select_ship(&mut self, id: ClientId, menuselect: &MenuSelect) -> Result<Vec<SendCharacterPacket>, anyhow::Error> {
|
||||||
if menuselect.menu != SHIP_MENU_ID {
|
if menuselect.menu != SHIP_MENU_ID {
|
||||||
Err(CharacterError::InvalidMenuSelection(menuselect.menu, menuselect.item))?;
|
Err(CharacterError::InvalidMenuSelection(menuselect.menu, menuselect.item))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let Some(client) = self.clients.get(&id) {
|
||||||
|
if let Some(user) = &client.user {
|
||||||
|
if let Some(cc) = self.connected_clients.get_mut(&user.id) {
|
||||||
|
cc.ship_id = Some(ServerId(menuselect.item as usize));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let ship = self.ships.get(&ServerId(menuselect.item as usize))
|
let ship = self.ships.get(&ServerId(menuselect.item as usize))
|
||||||
.ok_or(CharacterError::InvalidMenuSelection(menuselect.menu, menuselect.item))?;
|
.ok_or(CharacterError::InvalidMenuSelection(menuselect.menu, menuselect.item))?;
|
||||||
Ok(vec![SendCharacterPacket::RedirectClient(RedirectClient::new(u32::from_le_bytes(ship.ip.octets()), ship.port))])
|
Ok(vec![SendCharacterPacket::RedirectClient(RedirectClient::new(u32::from_le_bytes(ship.ip.octets()), ship.port))])
|
||||||
@ -604,9 +615,8 @@ impl<EG: EntityGateway> ServerState for CharacterServerState<EG> {
|
|||||||
|
|
||||||
async fn on_disconnect(&mut self, id: ClientId) -> Result<Vec<(ClientId, SendCharacterPacket)>, anyhow::Error> {
|
async fn on_disconnect(&mut self, id: ClientId) -> Result<Vec<(ClientId, SendCharacterPacket)>, anyhow::Error> {
|
||||||
if let Some(client) = self.clients.remove(&id) {
|
if let Some(client) = self.clients.remove(&id) {
|
||||||
if let Some(mut user) = client.user {
|
if let Some(user) = client.user {
|
||||||
user.at_character= false;
|
self.connected_clients.remove(&user.id);
|
||||||
self.entity_gateway.save_user(&user).await;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(Vec::new())
|
Ok(Vec::new())
|
||||||
|
@ -13,7 +13,7 @@ pub fn join_lobby(id: ClientId,
|
|||||||
clients: &Clients,
|
clients: &Clients,
|
||||||
item_manager: &ItemManager,
|
item_manager: &ItemManager,
|
||||||
level_table: &CharacterLevelTable)
|
level_table: &CharacterLevelTable)
|
||||||
-> Result<JoinLobby, ShipError> {
|
-> Result<JoinLobby, anyhow::Error> {
|
||||||
let lobby_clients = client_location.get_clients_in_lobby(lobby).map_err(|err| -> ClientLocationError { err.into() })?;
|
let lobby_clients = client_location.get_clients_in_lobby(lobby).map_err(|err| -> ClientLocationError { err.into() })?;
|
||||||
let playerinfo = lobby_clients.iter()
|
let playerinfo = lobby_clients.iter()
|
||||||
.map(|area_client| {
|
.map(|area_client| {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user