chuck.js/lib/Client/Networker.js
2012-07-18 23:45:32 +02:00

104 lines
No EOL
2.4 KiB
JavaScript

define(["Protocol/Helper", "Chuck/ClientGame"], function(ProtocolHelper, ClientGame) {
function Networker(socketLink) {
this.socketLink = socketLink;
this.clientGame = null;
this.init();
}
Networker.prototype.init = function() {
var self = this;
this.socketLink.on('connect', function() {
self.onConnect();
});
this.socketLink.on('message', function(message) {
self.onMessage(message);
});
this.socketLink.on('disconnect', function() {
self.onDisconnect();
});
}
Networker.prototype.onConnect = function() {
this.join('dungeon');
}
Networker.prototype.onMessage = function(message) {
var self = this;
ProtocolHelper.runCommands(message, function(command, options) {
self.processControlCommand(command, options);
});
}
Networker.prototype.onDisconnect = function() {
this.clientGame.destruct();
this.clientGame = null;
}
Networker.prototype.join = function(channelName){
this.sendCommand('join', channelName);
}
Networker.prototype.sendCommand = function(command, options) {
var message = ProtocolHelper.encodeCommand(command, options);
this.socketLink.send(message);
}
Networker.prototype.onJoinSuccess = function(options) {
this.clientGame = new ClientGame(this, options.id);
this.clientGame.loadLevel("default.json")
console.log("Joined " + options.channelName);
if (options.userIds && options.userIds.length > 0) {
for(var i = 0; i < options.userIds.length; i++) {
this.clientGame.userJoined(options.userIds[i])
}
}
}
Networker.prototype.onUserJoined = function(userId) {
this.clientGame.userJoined(userId);
console.log("User " + userId + " joined");
}
Networker.prototype.sendGameCommand = function(command, options) {
this.sendCommand('gameCommand', ProtocolHelper.assemble(command, options));
}
Networker.prototype.onUserLeft = function(userId) {
this.clientGame.userLeft(userId);
}
Networker.prototype.processControlCommand = function(command, options) {
switch(command) {
case 'joinSuccess':
this.onJoinSuccess(options);
break;
case 'gameCommand':
for(var gameCommand in options) {
this.clientGame.processGameCommand(gameCommand, options[gameCommand]);
}
break;
case 'userJoined':
this.onUserJoined(options);
break;
case 'userLeft':
this.onUserLeft(options);
break;
default:
break;
}
}
return Networker;
});