🚧 pass-through raw data, refactoring

This commit is contained in:
2023-10-07 19:30:52 +03:00
parent 8788cb0fcf
commit e1a3ea45e2
29 changed files with 434 additions and 219 deletions
@@ -15,6 +15,7 @@
*/
using System.Net.WebSockets;
using Ragon.Protocol;
using Ragon.Server.IO;
namespace Ragon.Server.WebSocketServer;
@@ -35,9 +36,17 @@ public class WebSocketReliableChannel : INetworkChannel
_queue.Enqueue(data);
}
public void Send(RagonBuffer buffer)
{
var sendData = buffer.ToArray();
_queue.Enqueue(sendData);
}
public async Task Flush()
{
while (_queue.TryDequeue(out var sendData) && _socket.State == WebSocketState.Open)
{
await _socket.SendAsync(sendData, WebSocketMessageType.Binary, WebSocketMessageFlags.EndOfMessage, CancellationToken.None);
}
}
}
@@ -82,9 +82,12 @@ public class WebSocketServer : INetworkServer
try
{
var result = await webSocket.ReceiveAsync(buffer, cancellationToken);
var dataRaw = buffer.Slice(0, result.Count);
if (dataRaw.Length > 0)
_networkListener.OnData(connection, dataRaw.ToArray());
if (result.Count > 0)
{
var channel = (RagonOperation) bytes[0] == RagonOperation.REPLICATE_RAW_DATA ? NetworkChannel.RAW : NetworkChannel.RELIABLE;
var payload = buffer.Slice(0, buffer.Length);
_networkListener.OnData(connection, channel , payload.ToArray());
}
}
catch (Exception ex)
{