完善发送消息和接收消息接口

This commit is contained in:
2018-12-18 23:35:11 +08:00
parent 59389fdca3
commit 6d05a3d04e
8 changed files with 170 additions and 57 deletions
+33 -3
View File
@@ -14,11 +14,13 @@ namespace Interact
// 消息写入线程,向tcp连接写入数据
private static void SendLoop()
{
Packet packet = null;
NetworkStream stream = tcpClient.GetStream();
try
{
foreach (Packet packet in sendQueue.GetConsumingEnumerable())
foreach (Packet i in sendQueue.GetConsumingEnumerable())
{
packet = i; //为了在代码块外引用i
//结束循环
if (StormClient.Status != ClientStatus.Running)
break;
@@ -37,8 +39,14 @@ namespace Interact
stream.Write(lenBuffer, 0, 4);
if (length > 0)
stream.Write(packet.Data, 0, packet.Data.Length);
//发送成回调
packet.CallBack?.Invoke(packet.Head);
//发送成回调
ResultHead result = new ResultHead
{
Token = packet.Head.Token,
Operation = packet.Head.Operation,
Error = ""
};
packet.CallBack?.Invoke(result);
}
}
catch (System.IO.IOException ex)
@@ -49,6 +57,28 @@ namespace Interact
{
HandleConnectionBroken(ex);
}
finally
{
List<Packet> packets = new List<Packet>(sendQueue.Count + 1);
if (packet != null)
packets.Add(packet);
while (sendQueue.TryTake(out packet))
{
if (packet != null)
packets.Add(packet);
}
foreach (Packet p in packets)
{
//发送失败回调
ResultHead result = new ResultHead
{
Token = packet.Head.Token,
Operation = packet.Head.Operation,
Error = "Client has stopped running."
};
packet.CallBack?.Invoke(result);
}
}
}
//发送数据
private static bool Send(Packet packet)