[Commit] rrserver dispatch.5c,1.23,1.24 games.5c,1.20,1.21
server.5c,1.11,1.12
Keith Packard
commit at keithp.com
Tue Jun 10 01:07:59 PDT 2003
Committed by: keithp
Update of /local/src/CVS/rrserver
In directory home.keithp.com:/tmp/cvs-serv20307
Modified Files:
dispatch.5c games.5c server.5c
Log Message:
Auto transition to DONE when all BID players PARTed. Track bid sequence to respect active order
Index: dispatch.5c
===================================================================
RCS file: /local/src/CVS/rrserver/dispatch.5c,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -d -r1.23 -r1.24
--- dispatch.5c 9 Jun 2003 06:38:31 -0000 1.23
+++ dispatch.5c 10 Jun 2003 07:07:57 -0000 1.24
@@ -186,7 +186,7 @@
int bid = 0;
union switch (Games::lowest_bidder (&g)) {
case none: break;
- case client c: bid = c.bid.number; break;
+ case client c: bid = c.bid.bid.number; break;
}
string active = "";
@@ -241,7 +241,7 @@
{
score = c.score;
if (c.bid != Bid.none)
- bid = c.bid.number;
+ bid = c.bid.bid.number;
}
}
respond ("USERINFO %s %b %d %d\n",
Index: games.5c
===================================================================
RCS file: /local/src/CVS/rrserver/games.5c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -d -r1.20 -r1.21
--- games.5c 7 Jun 2003 19:09:02 -0000 1.20
+++ games.5c 10 Jun 2003 07:07:57 -0000 1.21
@@ -206,10 +206,13 @@
union switch (c.bid) {
case none:
break;
- case number n:
- if (min == Bid.none || min.number > n)
+ case bid b:
+ if (min == Bid.none ||
+ min.bid.number > b.number ||
+ (min.bid.number == b.number &&
+ min.bid.sequence > b.sequence))
{
- min = (Bid.number) n;
+ min = (Bid.bid) b;
min_client = (ClientRef.client) (&c);
}
break;
@@ -219,6 +222,8 @@
return min_client;
}
+ void set_state (&Game g, GameState state);
+
void set_active (&Game g) {
ClientRef active = lowest_bidder (&g);
@@ -226,10 +231,11 @@
g.active = active;
union switch (active) {
case none:
+ set_state (&g, GameState.DONE);
break;
case client c:
game_send (&g, "NOTICE ACTIVE %s %d\n",
- c.user.username, c.bid.number);
+ c.user.username, c.bid.bid.number);
break;
}
}
@@ -322,6 +328,7 @@
g.history = (ObjectLoc[*]) {};
g.expire_time = 0;
g.state = GameState.NEW;
+ g.bid_sequence = 0;
Boards::set_target (&g.board, g.target.color, g.target.shape);
void reset_client (&Client c) {
@@ -475,10 +482,13 @@
if (g.state == GameState.NEW)
set_state (&g, GameState.BID);
/*
- if (c.bid != Bid.none && c.bid.number <= number)
+ if (c.bid != Bid.none && c.bid.bid.number <= number)
raise rr_error (Error.NOTLOWER);
*/
- c.bid = (Bid.number) number;
+ c.bid = (Bid.bid) (BidValue) {
+ number = number,
+ sequence = g.bid_sequence++
+ };
game_send (&g, "NOTICE BID %s %d\n", c.user.username, number);
}
@@ -548,15 +558,13 @@
reset (&g, &c);
c.bid = Bid.none;
set_active (&g);
- if (g.active == ClientRef.none)
- set_state (&g, GameState.DONE);
}
public void move (&Game g, &Client c, Color color, Direction dir) {
assert_playing (&g, &c);
assert_active_or_done (&g, &c);
if (g.state == GameState.SHOW &&
- count (&g) >= c.bid.number)
+ count (&g) >= c.bid.bid.number)
raise rr_error (Error.TOOMANYMOVES);
Track::Loc loc = Track::new();
make_move (&g, &loc, color, dir);
Index: server.5c
===================================================================
RCS file: /local/src/CVS/rrserver/server.5c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- server.5c 3 Jun 2003 08:02:54 -0000 1.11
+++ server.5c 10 Jun 2003 07:07:57 -0000 1.12
@@ -64,9 +64,14 @@
&Game game;
} GameRef;
- public typedef union {
- void none;
+ public typedef struct {
int number;
+ int sequence;
+ } BidValue;
+
+ public typedef union {
+ void none;
+ BidValue bid;
} Bid;
public typedef struct {
@@ -105,6 +110,7 @@
Board board;
int expire_interval;
int expire_time;
+ int bid_sequence;
ClientRef active;
ObjectLoc[*] history;
int timer_serial;
More information about the Commit
mailing list