--- 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