webxoss-client/IO.js

78 lines
1.5 KiB
JavaScript
Raw Permalink Normal View History

2016-10-23 07:28:51 +02:00
'use strict';
/*
服务器 -> 客户端:
msg = {
buffer: [{
id: id,
data: []
}]
}
客户端 -> 服务器
msg = {
id: id,
data: {
label: label,
input: []
}
}
*/
function IO (socket) {
this.socket = socket;
this.listener = null;
this.sendingMsg = null; // 上次发送的信息,用于重连时重新发送.
this.datas = []; // 收到的数据.
this.id = 0;
// For test
this.inputBlocked = false;
this.outputBlocked = false;
this.socket.removeAllListeners('gameMessage');
this.socket.on('gameMessage',this.receiveGameMessage.bind(this));
};
IO.prototype.receiveGameMessage = function (msg) {
if (this.inputBlocked) return;
msg.buffer.forEach(function (buf) {
if (buf.id < this.datas.length) return;
if (buf.id !== this.datas.length) {
console.error('buf.id !== this.datas.length');
return;
}
this.sendingMsg = null;
this.datas.push(buf.data);
if (this.listener) {
this.listener(buf.data);
}
},this);
};
IO.prototype.send = function (data) {
this.id++;
this.sendingMsg = {
id: this.id,
data: data
};
if (this.outputBlocked) return;
this.socket.emit('gameMessage',this.sendingMsg);
};
IO.prototype.resend = function () {
if (!this.sendingMsg) return;
this.socket.emit('gameMessage',this.sendingMsg);
};
IO.prototype.getDatas = function () {
return this.datas;
};
// For test
IO.prototype.toggleIn = function () {
return this.inputBlocked = !this.inputBlocked;
};
IO.prototype.toggleOut = function () {
return this.outputBlocked = !this.outputBlocked;
};