forked from mirrors/webxoss-core
73 lines
1.4 KiB
JavaScript
73 lines
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;
|