[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