Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e7dd693147 | |||
| fef1007c8c | |||
| e33c442a18 | |||
| 09b185a3ad | |||
| 7d154ea4d4 | |||
| d2577e5d1f |
@@ -19,8 +19,35 @@ using Ragon.Protocol;
|
||||
|
||||
namespace Ragon.Client
|
||||
{
|
||||
public sealed class RagonEntity: IDisposable
|
||||
public sealed class RagonEntity : IDisposable
|
||||
{
|
||||
private class EventSubscription : IDisposable
|
||||
{
|
||||
private List<Action<RagonPlayer, IRagonEvent>> _callbacks;
|
||||
private List<Action<RagonPlayer, IRagonEvent>> _localCallbacks;
|
||||
private Action<RagonPlayer, IRagonEvent> _callback;
|
||||
|
||||
public EventSubscription(
|
||||
List<Action<RagonPlayer, IRagonEvent>> callbacks,
|
||||
List<Action<RagonPlayer, IRagonEvent>> localCallbacks,
|
||||
Action<RagonPlayer, IRagonEvent> callback)
|
||||
{
|
||||
_callbacks = callbacks;
|
||||
_localCallbacks = localCallbacks;
|
||||
_callback = callback;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_callbacks.Remove(_callback);
|
||||
_localCallbacks.Remove(_callback);
|
||||
|
||||
_callbacks = null!;
|
||||
_localCallbacks = null!;
|
||||
_callback = null!;
|
||||
}
|
||||
}
|
||||
|
||||
private delegate void OnEventDelegate(RagonPlayer player, RagonBuffer serializer);
|
||||
|
||||
private RagonClient _client;
|
||||
@@ -189,19 +216,18 @@ namespace Ragon.Client
|
||||
_client.Reliable.Send(sendData);
|
||||
}
|
||||
|
||||
public Action<RagonPlayer, IRagonEvent> OnEvent<TEvent>(Action<RagonPlayer, TEvent> callback) where TEvent : IRagonEvent, new()
|
||||
public IDisposable OnEvent<TEvent>(Action<RagonPlayer, TEvent> callback) where TEvent : IRagonEvent, new()
|
||||
{
|
||||
var t = new TEvent();
|
||||
var eventCode = _client.Event.GetEventCode(t);
|
||||
|
||||
var action = (RagonPlayer player, IRagonEvent eventData) => callback.Invoke(player, (TEvent)eventData);
|
||||
|
||||
|
||||
if (!_listeners.TryGetValue(eventCode, out var callbacks))
|
||||
{
|
||||
callbacks = new List<Action<RagonPlayer, IRagonEvent>>();
|
||||
_listeners.Add(eventCode, callbacks);
|
||||
}
|
||||
|
||||
|
||||
if (!_localListeners.TryGetValue(eventCode, out var localCallbacks))
|
||||
{
|
||||
localCallbacks = new List<Action<RagonPlayer, IRagonEvent>>();
|
||||
@@ -222,19 +248,7 @@ namespace Ragon.Client
|
||||
});
|
||||
}
|
||||
|
||||
return action;
|
||||
}
|
||||
|
||||
public void OffEvent<TEvent>(Action<RagonPlayer, IRagonEvent> callback) where TEvent : IRagonEvent, new()
|
||||
{
|
||||
var t = new TEvent();
|
||||
var eventCode = _client.Event.GetEventCode(t);
|
||||
|
||||
if (_listeners.TryGetValue(eventCode, out var callbacks))
|
||||
callbacks.Remove(callback);
|
||||
|
||||
if (_localListeners.TryGetValue(eventCode, out var localCallbacks))
|
||||
localCallbacks.Remove(callback);
|
||||
return new EventSubscription(callbacks, localCallbacks, action);
|
||||
}
|
||||
|
||||
internal void Write(RagonBuffer buffer)
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
<LangVersion>8</LangVersion>
|
||||
<RootNamespace>Ragon.Common</RootNamespace>
|
||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||
<Version>1.2.4-rc</Version>
|
||||
<Title>Ragon.Protocol</Title>
|
||||
<Copyright>Eduard Kargin</Copyright>
|
||||
<PackageProjectUrl>https://ragon-server.com</PackageProjectUrl>
|
||||
|
||||
@@ -75,6 +75,7 @@ public class WebSocketServer : INetworkServer
|
||||
var webSocket = connection.Socket;
|
||||
var bytes = new byte[2048];
|
||||
var buffer = new Memory<byte>(bytes);
|
||||
|
||||
while (
|
||||
webSocket.State == WebSocketState.Open ||
|
||||
!cancellationToken.IsCancellationRequested)
|
||||
@@ -84,7 +85,7 @@ public class WebSocketServer : INetworkServer
|
||||
var result = await webSocket.ReceiveAsync(buffer, cancellationToken);
|
||||
if (result.Count > 0)
|
||||
{
|
||||
var payload = buffer.Slice(0, buffer.Length);
|
||||
var payload = buffer.Slice(0, result.Count);
|
||||
_networkListener.OnData(connection, NetworkChannel.RELIABLE, payload.ToArray());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<Nullable>enable</Nullable>
|
||||
<RootNamespace>Ragon.Core</RootNamespace>
|
||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||
<Version>1.2.4-rc</Version>
|
||||
<Version>1.3.1</Version>
|
||||
<Title>Ragon.Server</Title>
|
||||
<Copyright>Eduard Kargin</Copyright>
|
||||
<PackageProjectUrl>https://ragon-server.com</PackageProjectUrl>
|
||||
|
||||
@@ -45,7 +45,7 @@ public class RagonEvent
|
||||
|
||||
public void Write(RagonBuffer buffer)
|
||||
{
|
||||
if (_size == 0) return;
|
||||
if (_size <= 0) return;
|
||||
buffer.WriteArray(_data, _size);
|
||||
}
|
||||
}
|
||||
@@ -30,21 +30,20 @@ public sealed class RoomDataOperation : BaseOperation
|
||||
{
|
||||
var player = context.RoomPlayer;
|
||||
var room = context.Room;
|
||||
|
||||
|
||||
var data = Reader.RawData;
|
||||
|
||||
Writer.Clear();
|
||||
Writer.WriteOperation(RagonOperation.REPLICATE_RAW_DATA);
|
||||
Writer.WriteUShort(player.Connection.Id);
|
||||
|
||||
var playerData = Writer.ToArray();
|
||||
var payloadData = data;
|
||||
var size = playerData.Length + payloadData.Length;
|
||||
var dataSize = data.Length - 1;
|
||||
var headerSize = 3;
|
||||
var size = headerSize + dataSize;
|
||||
var sendData = new byte[size];
|
||||
|
||||
Array.Copy(playerData, 0, sendData, 0, playerData.Length);
|
||||
Array.Copy(payloadData, 1, sendData, playerData.Length, payloadData.Length - 1);
|
||||
|
||||
var peerId = player.Connection.Id;
|
||||
|
||||
sendData[0] = (byte)RagonOperation.REPLICATE_RAW_DATA;
|
||||
sendData[1] = (byte)peerId;
|
||||
sendData[2] = (byte)(peerId >> 8);
|
||||
|
||||
Array.Copy(data, 1, sendData, headerSize, dataSize);
|
||||
|
||||
room.Broadcast(sendData, channel);
|
||||
}
|
||||
}
|
||||
@@ -25,11 +25,6 @@ public enum ServerType
|
||||
WEBSOCKET,
|
||||
}
|
||||
|
||||
public class WebHook
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public struct RagonServerConfiguration
|
||||
{
|
||||
@@ -47,7 +42,7 @@ public struct RagonServerConfiguration
|
||||
public Dictionary<string, string> WebHooks;
|
||||
|
||||
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
||||
private static readonly string ServerVersion = "1.2.9-rc";
|
||||
private static readonly string ServerVersion = "1.3.1";
|
||||
private static Dictionary<string, ServerType> _serverTypes = new Dictionary<string, ServerType>()
|
||||
{
|
||||
{"enet", Server.ServerType.ENET},
|
||||
|
||||
Reference in New Issue
Block a user