Refactored MtApi4 (MT4) for working with new architecture

This commit is contained in:
Viacheslav Demydiuk
2024-06-16 13:57:50 +03:00
parent 6dd5e0190f
commit a830dc11a6
89 changed files with 1648 additions and 2390 deletions
+50 -13
View File
@@ -1,4 +1,5 @@
using System.Net.WebSockets;
using System.Diagnostics;
using System.Net.WebSockets;
using System.Text;
namespace MtClient
@@ -137,22 +138,58 @@ namespace MtClient
{
try
{
byte[] recvBuffer = new byte[64 * 1024];
while (ws_.State == WebSocketState.Open)
using (var ms = new MemoryStream())
{
var result = await ws_.ReceiveAsync(new ArraySegment<byte>(recvBuffer), CancellationToken.None);
if (result.MessageType == WebSocketMessageType.Close)
var messageBuffer = WebSocket.CreateClientBuffer(1024, 64);
while (ws_.State == WebSocketState.Open)
{
logger_.Info($"MtRpcClient.DoReceive: close signal {result.CloseStatusDescription}");
Disconnected?.Invoke(this, EventArgs.Empty);
break;
}
else
{
var msg = Encoding.ASCII.GetString(recvBuffer, 0, result.Count);
OnReceive(msg);
int recvCount = 0;
WebSocketReceiveResult result;
do
{
result = await ws_.ReceiveAsync(messageBuffer, CancellationToken.None);
var byteArray = messageBuffer.Array;
if (byteArray != null)
{
ms.Write(byteArray, messageBuffer.Offset, result.Count);
recvCount += result.Count;
}
}
while (!result.EndOfMessage);
if (result.MessageType == WebSocketMessageType.Close)
{
logger_.Info($"MtRpcClient.DoReceive: close signal {result.CloseStatusDescription}");
Disconnected?.Invoke(this, EventArgs.Empty);
break;
}
else if (result.MessageType == WebSocketMessageType.Text)
{
var msg = Encoding.UTF8.GetString(ms.ToArray(), 0, recvCount);
//var msg = Encoding.ASCII.GetString(recvBuffer, 0, result.Count);
OnReceive(msg);
}
ms.Seek(0, SeekOrigin.Begin);
ms.Position = 0;
}
}
//byte[] recvBuffer = new byte[64 * 1024];
//while (ws_.State == WebSocketState.Open)
//{
// var result = await ws_.ReceiveAsync(new ArraySegment<byte>(recvBuffer), CancellationToken.None);
// if (result.MessageType == WebSocketMessageType.Close)
// {
// logger_.Info($"MtRpcClient.DoReceive: close signal {result.CloseStatusDescription}");
// Disconnected?.Invoke(this, EventArgs.Empty);
// break;
// }
// else
// {
// var msg = Encoding.ASCII.GetString(recvBuffer, 0, result.Count);
// OnReceive(msg);
// }
//}
}
catch (Exception ex)
{