🚧 pass-through raw data, refactoring
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user