|
|
@@ -34,8 +34,6 @@ namespace ETModel
|
|
|
private bool isConnected;
|
|
|
private readonly IPEndPoint remoteEndPoint;
|
|
|
|
|
|
- private TaskCompletionSource<Packet> recvTcs;
|
|
|
-
|
|
|
private uint lastRecvTime;
|
|
|
|
|
|
private readonly byte[] cacheBytes = new byte[ushort.MaxValue];
|
|
|
@@ -202,31 +200,15 @@ namespace ETModel
|
|
|
this.recvBuffer.Write(sizeBuffer, 0, sizeBuffer.Length);
|
|
|
this.recvBuffer.Write(cacheBytes, 0, count);
|
|
|
|
|
|
- if (this.recvTcs == null)
|
|
|
- {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- try
|
|
|
+ while (true)
|
|
|
{
|
|
|
- bool isOK = this.parser.Parse();
|
|
|
- if (!isOK)
|
|
|
+ if (!this.parser.Parse())
|
|
|
{
|
|
|
- continue;
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
Packet packet = this.parser.GetPacket();
|
|
|
- var tcs = this.recvTcs;
|
|
|
- this.recvTcs = null;
|
|
|
- tcs.SetResult(packet);
|
|
|
- }
|
|
|
- catch (Exception e)
|
|
|
- {
|
|
|
- this.OnError(ErrorCode.ERR_PacketParserError);
|
|
|
-
|
|
|
- var tcs = this.recvTcs;
|
|
|
- this.recvTcs = null;
|
|
|
- tcs.SetException(e);
|
|
|
+ this.OnRead(packet);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -274,31 +256,5 @@ namespace ETModel
|
|
|
|
|
|
Send(bytes, 0, size);
|
|
|
}
|
|
|
-
|
|
|
- public override Task<Packet> Recv()
|
|
|
- {
|
|
|
- if (this.IsDisposed)
|
|
|
- {
|
|
|
- throw new Exception("TChannel已经被Dispose, 不能接收消息");
|
|
|
- }
|
|
|
-
|
|
|
- try
|
|
|
- {
|
|
|
- bool isOK = this.parser.Parse();
|
|
|
- if (isOK)
|
|
|
- {
|
|
|
- Packet packet = this.parser.GetPacket();
|
|
|
- return Task.FromResult(packet);
|
|
|
- }
|
|
|
-
|
|
|
- this.recvTcs = new TaskCompletionSource<Packet>();
|
|
|
- return this.recvTcs.Task;
|
|
|
- }
|
|
|
- catch (Exception)
|
|
|
- {
|
|
|
- this.OnError(ErrorCode.ERR_PacketParserError);
|
|
|
- throw;
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
}
|