@@ -59,6 +59,11 @@ impl GameServer {
5959 & self . spectators
6060 }
6161
62+ pub fn total_spectator_count ( & self ) -> u32 {
63+ let qtv_spec_count = self . qtv_stream ( ) . map_or ( 0 , |q| q. client_names ( ) . len ( ) ) ;
64+ ( self . spectators ( ) . len ( ) + qtv_spec_count) as u32
65+ }
66+
6267 pub fn qtv_stream ( & self ) -> Option < & QtvStream > {
6368 self . qtv_stream . as_ref ( )
6469 }
@@ -123,7 +128,7 @@ impl serde::Serialize for GameServer {
123128 where
124129 S : serde:: Serializer ,
125130 {
126- let mut state = serializer. serialize_struct ( "GameServer" , 14 ) ?;
131+ let mut state = serializer. serialize_struct ( "GameServer" , 15 ) ?;
127132 state. serialize_field ( "server_type" , & self . server_type ( ) ) ?;
128133 state. serialize_field ( "software_type" , & self . software_type ( ) ) ?;
129134 state. serialize_field ( "address" , & self . address ( ) ) ?;
@@ -145,6 +150,7 @@ impl serde::Serialize for GameServer {
145150 state. serialize_field ( "teams" , self . teams ( ) ) ?;
146151 state. serialize_field ( "players" , self . players ( ) ) ?;
147152 state. serialize_field ( "spectators" , self . spectators ( ) ) ?;
153+ state. serialize_field ( "total_spectator_count" , & self . total_spectator_count ( ) ) ?;
148154 state. serialize_field ( "qtv_stream" , & self . qtv_stream ( ) ) ?;
149155 state. serialize_field ( "geo" , self . geo ( ) ) ?;
150156
@@ -213,7 +219,13 @@ mod tests {
213219 ..Default :: default ( )
214220 } ,
215221 ] ,
216- qtv_stream : None ,
222+ qtv_stream : Some ( QtvStream {
223+ id : 1 ,
224+ name : "Local QTV" . to_string ( ) ,
225+ number : Some ( 1 ) ,
226+ address : Some ( "10.10.10.10:28000" . to_string ( ) ) ,
227+ client_names : vec ! [ "hub" . to_string( ) ] ,
228+ } ) ,
217229 geo : GeoInfo {
218230 country_code : Some ( "US" . to_string ( ) ) ,
219231 country_name : Some ( "United States" . to_string ( ) ) ,
@@ -234,7 +246,8 @@ mod tests {
234246 assert_eq ! ( server. players( ) [ 0 ] . name( ) , "vikpe" . to_string( ) ) ; // ordered by team name, then player name
235247 assert_eq ! ( server. spectators( ) . len( ) , 3 ) ;
236248 assert_eq ! ( server. spectators( ) [ 0 ] . name( ) , "[ServeMe]" . to_string( ) ) ; // ordered by name
237- assert_eq ! ( server. qtv_stream( ) , None ) ;
249+ assert_eq ! ( server. total_spectator_count( ) , 4 ) ;
250+ assert_eq ! ( server. qtv_stream( ) , generic. qtv_stream( ) ) ;
238251 assert_eq ! ( server. geo( ) , generic. geo( ) ) ;
239252
240253 // standby (no teamplay) - players ordered by name
@@ -366,7 +379,7 @@ mod tests {
366379 } ,
367380 } ;
368381
369- let server_json = r#"{"server_type":"game_server","software_type":"mvdsv","address":"10.10.10.10:28000","ip":"10.10.10.10","port":28000,"settings":{"admin":null,"broadcast":null,"city":null,"coords":null,"countrycode":null,"deathmatch":null,"epoch":null,"fpd":null,"fraglimit":null,"gamedir":null,"hostname":null,"hostport":null,"ktxmode":null,"ktxver":null,"map":null,"matchtag":null,"maxclients":8,"maxfps":null,"maxspectators":4,"mode":null,"needpass":null,"pm_ktjump":null,"progs":null,"qvm":null,"serverdemo":null,"status":null,"sv_antilag":null,"teamplay":null,"timelimit":null,"version":null,"z_ext":null},"client_count":0,"client_limit":12,"teams":[],"players":[],"spectators":[],"qtv_stream":null,"geo":{"country_code":"US","country_name":"United States","city":"New York","region":"North America","coords":{"lat":40.7128,"lng":-74.006}},"score":0}"# ;
382+ let server_json = r#"{"server_type":"game_server","software_type":"mvdsv","address":"10.10.10.10:28000","ip":"10.10.10.10","port":28000,"settings":{"admin":null,"broadcast":null,"city":null,"coords":null,"countrycode":null,"deathmatch":null,"epoch":null,"fpd":null,"fraglimit":null,"gamedir":null,"hostname":null,"hostport":null,"ktxmode":null,"ktxver":null,"map":null,"matchtag":null,"maxclients":8,"maxfps":null,"maxspectators":4,"mode":null,"needpass":null,"pm_ktjump":null,"progs":null,"qvm":null,"serverdemo":null,"status":null,"sv_antilag":null,"teamplay":null,"timelimit":null,"version":null,"z_ext":null},"client_count":0,"client_limit":12,"teams":[],"players":[],"spectators":[],"total_spectator_count":0," qtv_stream":null,"geo":{"country_code":"US","country_name":"United States","city":"New York","region":"North America","coords":{"lat":40.7128,"lng":-74.006}},"score":0}"# ;
370383
371384 // ensure round-trip serialization
372385 assert_eq ! ( serde_json:: to_string( & server) ?, server_json) ;
0 commit comments