mirror of
https://github.com/webxoss/webxoss-client.git
synced 2024-11-20 05:49:55 +01:00
78 lines
No EOL
1.5 KiB
JavaScript
78 lines
No EOL
1.5 KiB
JavaScript
'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;
|
|
}; |