changelog shortlog tags manifest raw

changeset: add jpoker.tourney

changeset 769: e0f86812f1de
parent 768:3113e68c6b39
child 770:3b0851c8d232
author: root@kun
date: Tue Aug 26 13:10:27 2008 +0000 (2 months ago)
files: jpoker/js/jquery.jpoker.js jpoker/js/test-jpoker.js
description: add jpoker.tourney
--- a/jpoker/js/jquery.jpoker.js	Tue Aug 26 11:34:57 2008 +0000
+++ b/jpoker/js/jquery.jpoker.js	Tue Aug 26 13:10:27 2008 +0000
@@ -839,6 +839,7 @@
             init: function() {
                 jpoker.connection.prototype.init.call(this);
                 this.tables = {};
+		this.tourneys = {};
                 this.tableLists = {};
                 this.timers = {};
                 this.serial = 0;
@@ -858,6 +859,10 @@
 			table.uninit();
 		    });
 		this.tables = {};
+		$.each(this.tourneys, function(game_id, tourney) {
+			tourney.uninit();
+		    });
+		this.tourneys = {};
                 jpoker.connection.prototype.uninit.call(this);
             },
 
@@ -1202,6 +1207,9 @@
 			server.sendPacket({'type': 'PacketPokerTourneyRegister', 'serial': server.serial, 'game_id' : game_id});
 			server.registerHandler(game_id, function(server, game_id, packet) {
 				if (packet.type == 'PacketPokerTourneyRegister') {
+				    var tourney = new jpoker.tourney(server, packet);
+				    tourney.poll();
+				    server.tourneys[packet.game_id] = tourney;
 				    server.notifyUpdate(packet);
 				    server.queueRunning(function() {
 					    if (server.timers.tourneyDetails !== undefined) {
@@ -1566,6 +1574,75 @@
                 return true;
             }
         });
+
+    //
+    // tourney
+    //
+    jpoker.tourney = function(server, packet) {
+        $.extend(this, jpoker.tourney.defaults, packet);
+        this.url = server.url;
+        this.init();
+        server.registerHandler(packet.game_id, this.handler);
+    };
+
+    jpoker.tourney.defaults = {
+    };
+
+    jpoker.tourney.prototype = $.extend({}, jpoker.watchable.prototype, {
+            init: function() {
+                jpoker.watchable.prototype.init.call(this);
+                this.reset();
+            },
+
+            uninit: function() {
+                jpoker.watchable.prototype.uninit.call(this);
+                this.reset();
+            },
+
+            reset: function() {
+		this.clearTimeout(this.pollTimer);
+		this.pollTimer = -1;
+		this.pollFrequency = 5000;
+            },
+
+            clearTimeout: function(id) { return window.clearTimeout(id); },
+            setTimeout: function(cb, delay) { return window.setTimeout(cb, delay); },
+
+	    poll: function() {
+		var server = jpoker.getServer(this.url);
+		server.sendPacket({type: 'PacketPokerPoll',
+			    tourney_serial: this.game_id});
+		var $this  = this;
+		this.clearTimeout(this.pollTimer);
+		this.pollTimer = this.setTimeout(function() {
+			$this.poll();
+		    }, this.pollFrequency);
+	    },
+
+            handler: function(server, game_id, packet) {
+                if(jpoker.verbose > 0) {
+                    jpoker.message('tourney.handler ' + JSON.stringify(packet));
+                }
+                
+                tourney = server.tourneys[packet.game_id];
+                if(!tourney) {
+                    jpoker.message('unknown tourney ' + packet.game_id);
+                    return true;
+                }
+                var url = server.url;
+                var serial = packet.serial;
+
+                switch(packet.type) {
+
+                case 'PacketPokerTourneyUnregister':
+                     tourney.uninit();
+                     delete server.tourneys[game_id];
+                     break;
+		}
+
+		return true
+	    },
+	});
 
     //
     // player
--- a/jpoker/js/test-jpoker.js	Tue Aug 26 11:34:57 2008 +0000
+++ b/jpoker/js/test-jpoker.js	Tue Aug 26 13:10:27 2008 +0000
@@ -399,15 +399,28 @@
 //
 
 test("jpoker.server.uninit", function() {
-	expect(1);
+	expect(4);
         var server = jpoker.serverCreate({ url: 'url' });
 	var game_id = 42;
         var table_packet = { id: game_id };
         server.tables[game_id] = new jpoker.table(server, table_packet);
+	var tourney_serial = 43;
+	var tourney_packet = {game_id: tourney_serial };
+        server.tourneys[game_id] = new jpoker.tourney(server, table_packet);
+
 	server.tables[game_id].uninit = function() {
-	    ok(true, "table uninit called");
+	    ok(true, "table uninit called");	    
+	};
+	server.tourneys[game_id].uninit = function() {
+	    ok(true, "tourney uninit called");
 	};
 	server.uninit();
+	var table_count = 0;
+	for (var table in server.tables) ++table_count;
+	var tourney_count = 0;
+	for (var tourneys_count in server.tourneys) ++tourney_count;
+	equals(table_count, 0, "server.tables empty");
+	equals(tourney_count, 0, "server.tourneys empty");
     });
 
 test("jpoker.server.handler PacketPokerMessage/GameMessage ", function(){
@@ -887,6 +900,9 @@
         server.serial = serial;
 	
         server.sendPacket = function(packet) {
+	    if (packet.type == 'PacketPokerPoll') {
+		return;
+	    }
             equals(packet.type, 'PacketPokerTourneyRegister');
             equals(packet.serial, serial, 'player serial');
             equals(packet.game_id, game_id, 'tournament id');
@@ -1956,6 +1972,97 @@
 	table.handler(server, game_id, packet);
     });
 
+//
+// tourney
+//
+test("jpoker.tourney.init", function(){
+        expect(5);
+        stop();
+
+        var server = jpoker.serverCreate({ url: 'url' });
+	server.serial = 42;
+        var game_id = 100;
+
+        var PokerServer = function() {};
+
+        PokerServer.prototype = {
+            outgoing: '[{"type": "PacketPokerTourneyRegister", "game_id": ' + game_id + '}]',
+
+            handle: function(packet) {
+		if(packet.indexOf("PacketPing") >= 0 || packet.indexOf("PacketPokerExplain") >= 0 || packet.indexOf("PacketPokerPoll") >= 0) {
+                    return;
+                }
+                equals(packet, '{"type":"PacketPokerTourneyRegister","serial":42,"game_id":' + game_id + '}');
+            }
+        };
+
+        ActiveXObject.prototype.server = new PokerServer();
+
+        var handler = function(server, what, packet) {
+            if(packet.type == "PacketPokerTourneyRegister") {
+                equals(packet.game_id, game_id);
+                equals(game_id in server.tourneys, true, game_id + " created");
+                equals(server.tourneys[game_id].game_id, game_id, "id");
+		ok(server.tourneys[game_id].pollTimer != -1, "poll timer set");
+                start_and_cleanup();
+            }
+            return true;
+        };
+        server.registerUpdate(handler);
+        server.tourneyRegister(game_id);
+    });
+
+
+test("jpoker.tourney.uninit", function(){
+        expect(2);
+
+        var server = jpoker.serverCreate({ url: 'url' });
+        var game_id = 100;
+        var tourney = new jpoker.tourney(server, { game_id: game_id });
+        server.tourneys[game_id] = tourney;
+        var notified = false;
+        var handler = function() {
+            notified = true;
+        };
+        tourney.registerDestroy(handler);
+        tourney.handler(server, game_id, { type: 'PacketPokerTourneyUnregister', game_id: game_id });
+        equals(notified, true, 'destroy callback called');
+        equals(game_id in server.tourneys, false, 'tourney removed from server');
+    });
+
+test("jpoker.tourney.poll", function() {
+	expect(8);
+	var server = jpoker.serverCreate({ url: 'url' });
+	var tourney = new jpoker.tourney(server, {"type": "PacketPokerTourneyRegister", "game_id": 101});
+	equals(tourney.pollTimer, -1, 'pollTimer not set');
+
+	server.sendPacket = function(packet) {
+	    equals(packet.type, "PacketPokerPoll");
+	    equals(packet.tourney_serial, 101);
+	};
+	var callback;
+	tourney.setTimeout = function(f) {
+	    callback = f;
+	    return 42;
+	};
+	tourney.clearTimeout = function(timer) {
+	    equals(timer, -1, "clearTimeout called by poll");
+	};
+	tourney.poll();
+	equals(tourney.pollTimer, 42, 'pollTimer set');
+	
+	tourney.poll = function() {
+	    ok(true, "poll called by timeout callback");
+	};
+	callback();
+
+	tourney.clearTimeout = function(timer) {
+	    ok(true, "clearTimeout called by uninit");
+	};
+	tourney.uninit();
+	equals(tourney.pollTimer, -1, 'pollTimer cleared by uninit');
+	cleanup();
+    });
 
 //
 // player