[connection] send queue in NekoConnection

This commit is contained in:
2019-06-03 11:23:20 +03:00
parent 5a3d5b974e
commit 4c8ae66624
13 changed files with 75 additions and 90 deletions

View File

@@ -7,16 +7,22 @@ class NekoConnection<O:Message, I:Message> extends BaseConnection<O, I> {
public var socket(default, null):Socket;
private var sendQueue:Array<O>;
private var timer:Timer;
public function new(socket:Socket, i:Class<I>) {
super(i);
this.socket = socket;
socket.setFastSend(true);
socket.output.bigEndian = false;
socket.input.bigEndian = false;
sendHandler.connect(_send);
sendHandler.connect(pushPacket);
sendQueue = [];
timer = new Timer(1);
timer.run = sendRun;
}
private function _send(packet:O):Void {
private function sendPacket(packet:O):Void {
try {
var bytes = PacketUtil.toBytes(packet);
socket.output.writeUInt16(bytes.length);
@@ -26,4 +32,25 @@ class NekoConnection<O:Message, I:Message> extends BaseConnection<O, I> {
L.e('Proto', 'Error send packet: ${packet}', error);
}
}
private function sendRun():Void {
if (sendQueue.length > 0) {
for (packet in sendQueue) {
sendPacket(packet);
}
sendQueue = [];
}
}
private function pushPacket(packet:O):Void {
sendQueue.push(packet);
}
override public function disconnect():Void {
if (timer != null) {
timer.stop();
timer = null;
}
super.disconnect();
}
}

View File

@@ -16,7 +16,7 @@ class NekoWSConnection<O:Message, I:Message> extends NekoConnection<O, I> {
opened = false;
}
override private function _send(packet:O):Void {
override private function sendPacket(packet:O):Void {
var data = PacketUtil.toBytes(packet);
writeData(data, socket);
}