| 
     
      
      
      From: Steven H. <ki...@mu...> - 2005-04-24 13:40:45
      
     
   | 
All looks ok, haven't tested it but personally I'd go the other way
round, ie. use a state variable in the others as the current tests for
"have I finished" are very convoluted.
    Steve / K
----- Original Message ----- 
From: "Ludwig Nussel" <l-...@us...>
To: <qst...@li...>
Sent: Sunday, April 24, 2005 11:28 AM
Subject: [QStat-devx] pariah...
> Hi,
> 
> To not introduce yet another variable that just makes the mess even
> more messy I'd suggest the following patch.
> 
> Index: qserver.h
> ===================================================================
> RCS file: /cvsroot/qstat/qstat2/qserver.h,v
> retrieving revision 1.3
> diff -u -p -r1.3 qserver.h
> --- qserver.h 16 Apr 2005 01:19:44 -0000 1.3
> +++ qserver.h 24 Apr 2005 10:25:04 -0000
> @@ -101,7 +101,6 @@ struct qserver {
>     int max_players;
>     int num_players;
>     int protocol_version;
> - int state;
> 
>     SavedData saved_data;
> 
> Index: qstat.c
> ===================================================================
> RCS file: /cvsroot/qstat/qstat2/qstat.c,v
> retrieving revision 1.76
> diff -u -p -r1.76 qstat.c
> --- qstat.c 16 Apr 2005 01:19:44 -0000 1.76
> +++ qstat.c 24 Apr 2005 10:25:09 -0000
> @@ -7560,6 +7560,7 @@ pariah_rule_packet( struct qserver *serv
>  if ( no_rules == seen )
>  {
>  // all done
> + server->next_rule = NULL;
>  return 1;
>  }
> 
> @@ -7572,6 +7573,9 @@ ut2003_rule_packet( struct qserver *serv
>     char *key, *value;
>     int result= 0;
> 
> +    // Packet Type
> +    rawpkt++;
> +
>  // we get size encoded key = value pairs
>     while ( rawpkt < end )
>     {
> @@ -7678,7 +7682,10 @@ STATIC int
> pariah_player_packet( struct qserver *server, char *rawpkt, char *end)
> {
>  unsigned char no_players = rawpkt[1];
> - unsigned char seen = 0;
> + unsigned char seen = 0; /* XXX: cannot work this way, it takes only
> +    this packet into consideration. What if
> +    player info is spread across multiple
> +    packets? */
> 
>  // type + no_players + some unknown preamble
>  rawpkt += 3;
> @@ -7715,6 +7722,7 @@ pariah_player_packet( struct qserver *se
>  if ( no_players == seen )
>  {
>  // all done
> + server->num_players = server->n_player_info;
>  return 1;
>  }
> 
> @@ -7946,15 +7954,14 @@ deal_with_ut2003_packet( struct qserver 
>  int requests = server->n_requests;
>  server->next_rule = "";
>  server->retry1 = n_retries;
> - server->retry2 = n_retries;
> + server->retry2 = 0;
>  server->n_requests = requests; // would produce wrong ping
>  }
>  break;
> 
>  case 0x11:
>  // Game info
> - server->state += pariah_rule_packet( server, rawpkt, end );
> - server->next_rule = "";
> + pariah_rule_packet( server, rawpkt, end );
>  server->retry1 = 0; /* we received at least one rule packet so
>         no need to retry. We'd get double
>         entries otherwise. */
> @@ -7963,8 +7970,7 @@ deal_with_ut2003_packet( struct qserver 
>  case 0x12:
>  // Player info
>  before = server->n_player_info;
> - server->state += pariah_player_packet( server, rawpkt, end );
> - server->retry2 = 0;
> + pariah_player_packet( server, rawpkt, end );
>  if ( before == server->n_player_info )
>  {
>  error = 1;
> @@ -7981,15 +7987,11 @@ deal_with_ut2003_packet( struct qserver 
>  * rule packets as we don't know how many we get
>  * We do clean up if we don't fetch server rules so we don't
>  * need to wait for timeout.
> - * 2 == server->state indicates finished for pariah as both
> - * rule and player packets state how many to expect
>  */
> - if (
> - error ||
> - (!get_server_rules && !get_player_info) ||
> - (!get_server_rules && server->num_players == server->n_player_info) ||
> - 2 == server->state 
> - )
> + if (error
> + || (!get_server_rules && !get_player_info)
> + || (!get_server_rules && server->num_players == server->n_player_info)
> + || (server->next_rule == NULL && server->num_players == server->n_player_info))
>  {
>  cleanup_qserver( server, 1 );
>  }
================================================
This e.mail is private and confidential between Multiplay (UK) Ltd. and the person or entity to whom it is addressed. In the event of misdirection, the recipient is prohibited from using, copying, printing or otherwise disseminating it or any information contained in it. 
In the event of misdirection, illegible or incomplete transmission please telephone (023) 8024 3137
or return the E.mail to pos...@mu....
 |