1
0
Fork 0
webxoss-fixed/IO.js
2016-10-23 13:56:45 +08:00

73 lines
No EOL
1.4 KiB
JavaScript

'use strict';
/*
服务器 -> 客户端:
msg = {
buffer: [{
id: id,
data: []
}]
}
客户端 -> 服务器
msg = {
id: id,
data: {
label: label,
input: []
}
}
*/
function IO (client,getSpectators) {
this.client = client;
this.getSpectators = getSpectators || function () {
return [];
};
this.listener = null;
this.lastId = 0;
this.id = 0;
this.buffer = [];
this.setSocketListener();
client.onSocketUpdate = function () {
this.setSocketListener();
this.resend();
}.bind(this);
};
IO.prototype.setSocketListener = function () {
this.client.socket.removeAllListeners('gameMessage');
this.client.socket.on('gameMessage',function (msg) {
if (this.lastId === msg.id) {
// console.log('same id.');
return;
};
this.buffer.length = 0;
if (this.listener) {
this.listener(msg.data);
}
}.bind(this));
};
IO.prototype.send = function (data) {
var obj = {
id: this.id,
data: data
};
this.id++;
// 将要发送的数据缓存,以便重新连接时重发.
this.buffer.push(obj);
// 现在发送的信息不包括缓存的数据.
var msg = {buffer: [obj]};
this.client.emit('gameMessage',msg);
this.getSpectators().forEach(function (spectator) {
spectator.emit('gameMessage',msg);
},this);
};
IO.prototype.resend = function () {
var msg = {buffer: this.buffer};
// console.log(msg);
this.client.emit('gameMessage',msg);
};
global.IO = IO;