--- a/jpoker/js/jquery.jpoker.js Tue Aug 26 12:21:20 2008 +0200
+++ b/jpoker/js/jquery.jpoker.js Wed Aug 27 02:17:47 2008 +0200
@@ -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);
},
@@ -1164,10 +1169,14 @@
rejoin: function() {
this.setState(this.MY);
var handler = function(server, game_id, packet) {
- if(packet.type == 'PacketPokerTableList') {
- for(var i = 0; i < packet.packets.length; i++) {
- var subpacket = packet.packets[i];
- server.tableJoin(subpacket.id);
+ if(packet.type == 'PacketPokerPlayerPlaces') {
+ for(var i = 0; i < packet.tables.length; i++) {
+ var table_id = packet.tables[i];
+ server.tableJoin(table_id);
+ }
+ for(var j = 0; j < packet.tourneys.length; j++) {
+ var tourney_serial = packet.tourneys[j];
+ server.tourneyJoin(tourney_serial);
}
server.getUserInfo();
server.setState(server.RUNNING, 'rejoin');
@@ -1176,7 +1185,7 @@
return true;
};
this.registerHandler(0, handler);
- this.sendPacket({ type: 'PacketPokerTableSelect', string: 'my' });
+ this.sendPacket({ type: 'PacketPokerGetPlayerPlaces', serial: this.serial });
},
tableJoin: function(game_id) {
@@ -1202,6 +1211,7 @@
server.sendPacket({'type': 'PacketPokerTourneyRegister', 'serial': server.serial, 'game_id' : game_id});
server.registerHandler(game_id, function(server, game_id, packet) {
if (packet.type == 'PacketPokerTourneyRegister') {
+ server.tourneyJoin(packet.game_id);
server.notifyUpdate(packet);
server.queueRunning(function() {
if (server.timers.tourneyDetails !== undefined) {
@@ -1267,6 +1277,12 @@
return true;
});
});
+ },
+
+ tourneyJoin: function(game_id) {
+ var tourney = new jpoker.tourney(this, game_id);
+ tourney.poll();
+ this.tourneys[game_id] = tourney;
},
getPersonalInfo : function() {
@@ -1566,6 +1582,76 @@
return true;
}
});
+
+ //
+ // tourney
+ //
+ jpoker.tourney = function(server, game_id) {
+ $.extend(this, jpoker.tourney.defaults);
+ this.game_id = game_id;
+ this.url = server.url;
+ this.init();
+ server.registerHandler(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
@@ -2142,12 +2228,12 @@
'name': _("Name"),
'money': _("Money")
}));
- for(var serial in packet.user2properties) {
- var player = packet.user2properties[serial];
- if (player.money == -1) {
- player.money = "";
+ for(var current_serial in packet.user2properties) {
+ var current_player = packet.user2properties[current_serial];
+ if (current_player.money == -1) {
+ current_player.money = "";
}
- html.push(t.players_no_rank.rows.supplant(player));
+ html.push(t.players_no_rank.rows.supplant(current_player));
}
html.push(t.players_no_rank.footer);
}
@@ -3009,7 +3095,6 @@
var server = jpoker.getServer(url);
$('#auto_muck_win' + id)[0].checked = server.preferences.auto_muck_win;
$('#auto_muck_lose' + id)[0].checked = server.preferences.auto_muck_lose;
- var server = jpoker.getServer(url);
jpoker.plugins.muck.sendAutoMuck(server, game_id, id);
if(serial == table.serial_in_position) {
@@ -3463,7 +3548,7 @@
header : '<div class=\'jpoker_places_tourneys\'><table><thead><tr><th>{tourney_title}</th></tr></thead><tbody>',
rows : '<tr class=\'jpoker_places_tourney\'><td>{tourney}</td></tr>',
footer : '</tbody></table></div>'
- },
+ }
};
jpoker.plugins.muck = {
--- a/jpoker/js/test-jpoker.js Tue Aug 26 12:21:20 2008 +0200
+++ b/jpoker/js/test-jpoker.js Wed Aug 27 02:17:47 2008 +0200
@@ -399,15 +399,27 @@
//
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;
+ server.tourneys[game_id] = new jpoker.tourney(server, tourney_serial);
+
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(){
@@ -595,16 +607,17 @@
});
test("jpoker.server.rejoin", function(){
- expect(4);
- stop();
-
- var server = jpoker.serverCreate({ url: 'url' });
- var id = 'jpoker' + jpoker.serial;
- var game_id = 100;
-
- var PokerServer = function() {};
- PokerServer.prototype = {
- outgoing: '[{"type": "PacketPokerTableList", "packets": [{"id": ' + game_id + '}]}]',
+ expect(5);
+ stop();
+
+ var server = jpoker.serverCreate({ url: 'url' });
+ var id = 'jpoker' + jpoker.serial;
+ var game_id = 100;
+ var tourney_serial = 200;
+
+ var PokerServer = function() {};
+ PokerServer.prototype = {
+ outgoing: '[{"type": "PacketPokerPlayerPlaces", "tables": [' + game_id + '], "tourneys": [' + tourney_serial + ']}]',
handle: function(packet) { }
};
@@ -614,6 +627,10 @@
server.tables[game_id] = new jpoker.table(server, table_packet);
var table = server.tables[game_id];
server.notifyUpdate(table_packet);
+
+ server.tourneys[tourney_serial] = new jpoker.tourney(server, tourney_serial);
+ var tourney = server.tourneys[tourney_serial];
+
var player_serial = 43;
var player_seat = 2;
var player_name = 'username';
@@ -644,6 +661,9 @@
});
server.tableJoin = function(other_game_id) {
equals(other_game_id, game_id, 'rejoin same table');
+ };
+ server.tourneyJoin = function(game_id) {
+ equals(game_id, tourney_serial, 'rejoin same tourney');
};
server.getUserInfo = function() {
@@ -872,6 +892,17 @@
cleanup();
});
+test("jpoker.server.tourneyJoin", function(){
+ expect(2);
+
+ var game_id = 42;
+ var server = jpoker.serverCreate({ url: 'url' });
+ server.tourneyJoin(game_id);
+ ok(game_id in server.tourneys, 'tourney created');
+ ok(server.tourneys[game_id].pollTimer != -1, 'tourney pollTimer activated');
+ cleanup();
+ });
+
test("jpoker.server.tourneyRegister", function(){
expect(4);
stop();
@@ -887,6 +918,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');
@@ -950,6 +984,7 @@
equals(server.callbacks[0][0], callback, 'tourneyRegister callback still in place');
server.notify(game_id, {type: 'PacketPing'});
equals(server.callbacks[game_id][0], callback_game_id, 'tourneyRegister callback_game_id still in place');
+ cleanup();
});
test("jpoker.server.tourneyUnregister", function(){
@@ -986,7 +1021,6 @@
});
test("jpoker.server.tourneyUnregister error", function(){
-
expect(1);
stop();
@@ -1030,6 +1064,7 @@
equals(server.callbacks[0][0], callback, 'tourneyUnregister callback still in place');
server.notify(game_id, {type: 'PacketPing', id: game_id});
equals(server.callbacks[game_id][0], callback_game_id, 'tourneyUnregister callback_game_id still in place');
+ cleanup();
});
test("jpoker.server.getPersonalInfo", function(){
@@ -1118,6 +1153,37 @@
return true;
});
server.getPlayerPlaces();
+ });
+
+test("jpoker.server.getPlayerPlaces not logged", function(){
+ expect(1);
+ stop();
+
+ var server = jpoker.serverCreate({ url: 'url' });
+
+ server.serial = 0;
+
+ dialog = jpoker.dialog;
+ jpoker.dialog = function(message) {
+ equals(message.indexOf("must be logged in") >= 0, true, "should be logged");
+ jpoker.dialog = dialog;
+ start_and_cleanup();
+ };
+ server.getPlayerPlaces();
+ });
+
+test("jpoker.server.getPlayerPlaces waiting", function(){
+ expect(2);
+
+ var server = jpoker.serverCreate({ url: 'url' });
+ server.serial = 42;
+ var game_id = 100;
+ server.callbacks[0] = [];
+ server.getPlayerPlaces();
+ equals(server.callbacks[0].length, 1, 'getPlayerPlaces callbacks[0] registered');
+ var callback = server.callbacks[0][0];
+ server.notify(0, {type: 'PacketPing'});
+ equals(server.callbacks[0][0], callback, 'getPlayerPlaces callback still in place');
});
test("jpoker.server.selectTables", function(){
@@ -1691,7 +1757,7 @@
return 42;
};
table.clearTimeout = function(timer) {
- equals(timer, -1, "clearTimeout called by poll")
+ equals(timer, -1, "clearTimeout called by poll");
};
table.poll();
equals(table.pollTimer, 42, 'pollTimer set');
@@ -1702,7 +1768,7 @@
callback();
table.clearTimeout = function(timer) {
- ok(true, "clearTimeout called by uninit")
+ ok(true, "clearTimeout called by uninit");
};
table.uninit();
equals(table.pollTimer, -1, 'pollTimer cleared by uninit');
@@ -1774,6 +1840,9 @@
server.tables[game_id] = new jpoker.table(server, table_packet);
var table = server.tables[game_id];
+ var send_auto_muck = jpoker.plugins.muck.sendAutoMuck;
+ jpoker.plugins.muck.sendAutoMuck = function() {};
+
place.jpoker('table', 'url', game_id);
var player_serial = 43;
server.handler(server, 0, { type: 'PacketSerial', serial: player_serial});
@@ -1790,6 +1859,9 @@
equals(game_id in server.tables, false, 'table removed from server');
equals(player_serial in table.serial2player, false, 'player removed from table');
equals($("#game_window" + id).size(), 0, 'game element destroyed');
+
+ jpoker.plugins.muck.sendAutoMuck = send_auto_muck;
+ cleanup();
});
test("jpoker.table.handler: PacketPokerTable", function(){
@@ -1803,6 +1875,9 @@
var table_packet = { id: game_id };
server.tables[game_id] = new jpoker.table(server, table_packet);
var table = server.tables[game_id];
+
+ var send_auto_muck = jpoker.plugins.muck.sendAutoMuck;
+ jpoker.plugins.muck.sendAutoMuck = function() {};
place.jpoker('table', 'url', game_id);
var player_serial = 43;
@@ -1824,6 +1899,9 @@
equals(player_serial in table.serial2player, false, 'player removed from table');
equals($("#game_window" + id).size(), 1, 'game element exists');
equals($("#seat" + player_seat + id).is(':hidden'), true, 'seat hidden');
+
+ jpoker.plugins.muck.sendAutoMuck = send_auto_muck;
+ cleanup();
});
test("jpoker.table.handler: PacketPokerBuyInLimits", function(){
@@ -1921,10 +1999,129 @@
equals(message.indexOf("unknown table") >= 0, true, "unknown table");
jpoker.message = jpokerMessage;
};
+ var verbose = jpoker.verbose;
jpoker.verbose = 0;
table.handler(server, game_id, packet);
- });
-
+ jpoker.verbose = verbose;
+ });
+
+//
+// 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);
+ 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, 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();
+ });
+
+test("jpoker.tourney.handler: unknown tourney", function(){
+ expect(2);
+ var server = jpoker.serverCreate({ url: 'url' });
+
+ var game_id = 100;
+ server.tourneys[game_id] = new jpoker.tourney(server, game_id);
+ var tourney = server.tourneys[game_id];
+
+ var packet = { 'type': 'PacketPing',
+ 'game_id': 101
+ };
+
+ jpokerMessage = jpoker.message;
+ var messages = [];
+ jpoker.message = function(message) {
+ messages.push(message);
+ };
+ var verbose = jpoker.verbose;
+ jpoker.verbose = 1;
+ tourney.handler(server, game_id, packet);
+ equals(messages[0].indexOf("tourney.handler") >= 0, true, "tourney handler");
+ equals(messages[1].indexOf("unknown tourney") >= 0, true, "unknown tourney");
+ jpoker.verbose = verbose;
+ jpoker.message = jpokerMessage;
+ });
//
// player
@@ -3189,7 +3386,7 @@
$(".jpoker_chat_history_player").text("");
table.handler(server, game_id, { type: 'PacketPokerChat', message: message, game_id: game_id, serial: 0 });
- var content = $(".jpoker_chat_history_dealer", chat_history).text();
+ content = $(".jpoker_chat_history_dealer", chat_history).text();
equals(content.indexOf(message) >= 0, false, "message is split");
equals(content.indexOf('tout') >= 0, true, "message part is displayed");
equals($(".jpoker_chat_history_player").text(), "", "no player message");