[Games] Generic query add support for GS2 protocol and Halo:CE game

This commit is contained in:
CosminPerRam 2023-06-13 22:09:51 +03:00
parent e44a680a59
commit a377b76a55
4 changed files with 41 additions and 2 deletions

View file

@ -11,12 +11,14 @@ pub use protocols::*;
#[derive(Debug, Clone, PartialEq)]
pub enum GameSpyVersion {
One,
Two,
Three,
}
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, PartialEq)]
pub enum VersionedExtraResponse {
One(protocols::one::ExtraResponse),
Three(protocols::three::ExtraResponse),
One(one::ExtraResponse),
Two(two::ExtraResponse),
Three(three::ExtraResponse),
}

View file

@ -1,5 +1,8 @@
use std::collections::HashMap;
use crate::protocols::gamespy::VersionedExtraResponse;
use crate::protocols::types::SpecificResponse;
use crate::protocols::GenericResponse;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
@ -32,3 +35,35 @@ pub struct Response {
pub players: Vec<Player>,
pub unused_entries: HashMap<String, String>,
}
/// Non-generic query response
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ExtraResponse {
pub teams: Vec<Team>,
pub players_minimum: Option<u8>,
pub unused_entries: HashMap<String, String>,
pub players: Vec<Player>,
}
impl From<Response> for GenericResponse {
fn from(r: Response) -> Self {
Self {
name: Some(r.name),
description: None,
game: None,
game_version: None,
map: Some(r.map),
players_maximum: r.players_maximum.try_into().unwrap(), // FIXME: usize to u64 may fail
players_online: r.players_online.try_into().unwrap(),
players_bots: None,
has_password: Some(r.has_password),
inner: SpecificResponse::Gamespy(VersionedExtraResponse::Two(ExtraResponse {
teams: r.teams,
players_minimum: r.players_minimum,
unused_entries: r.unused_entries,
players: r.players,
})),
}
}
}