Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0a8d761cc1 | |||
| f38c7e98de | |||
| 0479a21980 |
@@ -22,6 +22,7 @@ namespace Ragon.Client
|
|||||||
public sealed class RagonEntity
|
public sealed class RagonEntity
|
||||||
{
|
{
|
||||||
private delegate void OnEventDelegate(RagonPlayer player, RagonBuffer serializer);
|
private delegate void OnEventDelegate(RagonPlayer player, RagonBuffer serializer);
|
||||||
|
|
||||||
private RagonClient _client;
|
private RagonClient _client;
|
||||||
|
|
||||||
public ushort Id { get; private set; }
|
public ushort Id { get; private set; }
|
||||||
@@ -83,15 +84,29 @@ namespace Ragon.Client
|
|||||||
|
|
||||||
internal T GetPayload<T>(RagonPayload data) where T : IRagonPayload, new()
|
internal T GetPayload<T>(RagonPayload data) where T : IRagonPayload, new()
|
||||||
{
|
{
|
||||||
|
var payload = new T();
|
||||||
|
if (data.Size <= 0) return payload;
|
||||||
|
|
||||||
var buffer = new RagonBuffer();
|
var buffer = new RagonBuffer();
|
||||||
|
|
||||||
data.Write(buffer);
|
data.Write(buffer);
|
||||||
|
|
||||||
var payload = new T();
|
|
||||||
payload.Deserialize(buffer);
|
payload.Deserialize(buffer);
|
||||||
|
|
||||||
return payload;
|
return payload;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void AttachPayload(IRagonPayload? payload)
|
||||||
|
{
|
||||||
|
if (payload == null) return;
|
||||||
|
|
||||||
|
var buffer = new RagonBuffer();
|
||||||
|
payload.Serialize(buffer);
|
||||||
|
|
||||||
|
_spawnPayload = new RagonPayload();
|
||||||
|
_spawnPayload.Read(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
public T GetAttachPayload<T>() where T : IRagonPayload, new()
|
public T GetAttachPayload<T>() where T : IRagonPayload, new()
|
||||||
{
|
{
|
||||||
return GetPayload<T>(_spawnPayload);
|
return GetPayload<T>(_spawnPayload);
|
||||||
@@ -118,8 +133,8 @@ namespace Ragon.Client
|
|||||||
buffer.WriteOperation(RagonOperation.REPLICATE_ENTITY_EVENT);
|
buffer.WriteOperation(RagonOperation.REPLICATE_ENTITY_EVENT);
|
||||||
buffer.WriteUShort(Id);
|
buffer.WriteUShort(Id);
|
||||||
buffer.WriteUShort(evntId);
|
buffer.WriteUShort(evntId);
|
||||||
buffer.WriteByte((byte) replicationMode);
|
buffer.WriteByte((byte)replicationMode);
|
||||||
buffer.WriteByte((byte) RagonTarget.Player);
|
buffer.WriteByte((byte)RagonTarget.Player);
|
||||||
buffer.WriteUShort(target.PeerId);
|
buffer.WriteUShort(target.PeerId);
|
||||||
|
|
||||||
evnt.Serialize(buffer);
|
evnt.Serialize(buffer);
|
||||||
@@ -163,8 +178,8 @@ namespace Ragon.Client
|
|||||||
buffer.WriteOperation(RagonOperation.REPLICATE_ENTITY_EVENT);
|
buffer.WriteOperation(RagonOperation.REPLICATE_ENTITY_EVENT);
|
||||||
buffer.WriteUShort(Id);
|
buffer.WriteUShort(Id);
|
||||||
buffer.WriteUShort(evntId);
|
buffer.WriteUShort(evntId);
|
||||||
buffer.WriteByte((byte) replicationMode);
|
buffer.WriteByte((byte)replicationMode);
|
||||||
buffer.WriteByte((byte) target);
|
buffer.WriteByte((byte)target);
|
||||||
|
|
||||||
evnt.Serialize(buffer);
|
evnt.Serialize(buffer);
|
||||||
|
|
||||||
@@ -185,7 +200,7 @@ namespace Ragon.Client
|
|||||||
RagonLog.Warn($"Event already {eventCode} subscribed, removed old one!");
|
RagonLog.Warn($"Event already {eventCode} subscribed, removed old one!");
|
||||||
}
|
}
|
||||||
|
|
||||||
_localEvents.Add(eventCode, (player, eventData) => { callback.Invoke(player, (TEvent) eventData); });
|
_localEvents.Add(eventCode, (player, eventData) => { callback.Invoke(player, (TEvent)eventData); });
|
||||||
_events.Add(eventCode, (player, serializer) =>
|
_events.Add(eventCode, (player, serializer) =>
|
||||||
{
|
{
|
||||||
t.Deserialize(serializer);
|
t.Deserialize(serializer);
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ namespace Ragon.Client;
|
|||||||
|
|
||||||
public struct RagonPayload
|
public struct RagonPayload
|
||||||
{
|
{
|
||||||
private uint[] _data = new uint[128];
|
private readonly uint[] _data = new uint[128];
|
||||||
private int _size = 0;
|
private readonly int _size = 0;
|
||||||
|
|
||||||
public RagonPayload(int capacity)
|
public RagonPayload(int capacity)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ namespace Ragon.Client
|
|||||||
public sealed class RagonClient
|
public sealed class RagonClient
|
||||||
{
|
{
|
||||||
private readonly INetworkConnection _connection;
|
private readonly INetworkConnection _connection;
|
||||||
private readonly IRagonEntityListener _entityListener;
|
private IRagonEntityListener _entityListener;
|
||||||
private readonly IRagonSceneCollector _sceneCollector;
|
private IRagonSceneCollector _sceneCollector;
|
||||||
private Handler[] _handlers;
|
private Handler[] _handlers;
|
||||||
private RagonBuffer _readBuffer;
|
private RagonBuffer _readBuffer;
|
||||||
private RagonBuffer _writeBuffer;
|
private RagonBuffer _writeBuffer;
|
||||||
@@ -52,21 +52,15 @@ namespace Ragon.Client
|
|||||||
|
|
||||||
#region PUBLIC
|
#region PUBLIC
|
||||||
|
|
||||||
public RagonClient(
|
public RagonClient(INetworkConnection connection, int rate)
|
||||||
INetworkConnection connection,
|
|
||||||
IRagonEntityListener entityListener,
|
|
||||||
IRagonSceneCollector sceneCollector,
|
|
||||||
int rate)
|
|
||||||
{
|
{
|
||||||
_listenerList = new RagonListenerList(this);
|
|
||||||
_entityListener = entityListener;
|
|
||||||
_sceneCollector = sceneCollector;
|
|
||||||
|
|
||||||
_connection = connection;
|
_connection = connection;
|
||||||
_connection.OnData += OnData;
|
_connection.OnData += OnData;
|
||||||
_connection.OnConnected += OnConnected;
|
_connection.OnConnected += OnConnected;
|
||||||
_connection.OnDisconnected += OnDisconnected;
|
_connection.OnDisconnected += OnDisconnected;
|
||||||
|
|
||||||
|
_listenerList = new RagonListenerList(this);
|
||||||
|
|
||||||
_replicationRate = (1000.0f / rate) / 1000.0f;
|
_replicationRate = (1000.0f / rate) / 1000.0f;
|
||||||
_replicationTime = 0;
|
_replicationTime = 0;
|
||||||
|
|
||||||
@@ -75,8 +69,31 @@ namespace Ragon.Client
|
|||||||
_status = RagonStatus.DISCONNECTED;
|
_status = RagonStatus.DISCONNECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void Configure(IRagonSceneCollector sceneCollector)
|
||||||
|
{
|
||||||
|
_sceneCollector = sceneCollector;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Configure(IRagonEntityListener listener)
|
||||||
|
{
|
||||||
|
_entityListener = listener;
|
||||||
|
}
|
||||||
|
|
||||||
public void Connect(string address, ushort port, string protocol)
|
public void Connect(string address, ushort port, string protocol)
|
||||||
{
|
{
|
||||||
|
if (_sceneCollector == null)
|
||||||
|
{
|
||||||
|
RagonLog.Error("Scene collector is not defined!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_entityListener == null)
|
||||||
|
{
|
||||||
|
RagonLog.Error("Entity Listener is not defined!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_writeBuffer = new RagonBuffer();
|
_writeBuffer = new RagonBuffer();
|
||||||
_readBuffer = new RagonBuffer();
|
_readBuffer = new RagonBuffer();
|
||||||
_session = new RagonSession(this, _readBuffer);
|
_session = new RagonSession(this, _readBuffer);
|
||||||
|
|||||||
@@ -45,9 +45,9 @@ public sealed class RagonEntityCache
|
|||||||
_playerCache = playerCache;
|
_playerCache = playerCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
public RagonEntity FindById(ushort id)
|
public bool TryGetEntity(ushort id, out RagonEntity entity)
|
||||||
{
|
{
|
||||||
return _entityMap[id];
|
return _entityMap.TryGetValue(id, out entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Create(RagonEntity entity, IRagonPayload? spawnPayload)
|
public void Create(RagonEntity entity, IRagonPayload? spawnPayload)
|
||||||
|
|||||||
@@ -4,8 +4,16 @@
|
|||||||
<ImplicitUsings>disable</ImplicitUsings>
|
<ImplicitUsings>disable</ImplicitUsings>
|
||||||
<Nullable>disable</Nullable>
|
<Nullable>disable</Nullable>
|
||||||
<LangVersion>8</LangVersion>
|
<LangVersion>8</LangVersion>
|
||||||
<TargetFramework>netstandard2.1</TargetFramework>
|
|
||||||
<RootNamespace>Ragon.Common</RootNamespace>
|
<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>
|
||||||
|
<RepositoryUrl>https://github.com/edmand46/Ragon</RepositoryUrl>
|
||||||
|
<RepositoryType>Source</RepositoryType>
|
||||||
|
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
|
||||||
|
<TargetFramework>netstandard2.1</TargetFramework>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||||
@@ -16,8 +24,8 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
|
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
|
||||||
<OutputPath>C:\Users\edmand46\RagonProjects\ragon-unity-sdk\Assets\Ragon-Unity-SDK\Runtime\Plugins</OutputPath>
|
<OutputPath></OutputPath>
|
||||||
<DefineConstants>TRACE;NETSTACK_SPAN</DefineConstants>
|
<DefineConstants>TRACE;</DefineConstants>
|
||||||
<DebugType>none</DebugType>
|
<DebugType>none</DebugType>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ namespace Ragon.Protocol
|
|||||||
{
|
{
|
||||||
public static uint Parse(string version)
|
public static uint Parse(string version)
|
||||||
{
|
{
|
||||||
var strings = version.Split(".");
|
var strings = version.Split('.');
|
||||||
if (strings.Length < 3)
|
if (strings.Length < 3)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<RootNamespace>Ragon.ENet</RootNamespace>
|
<RootNamespace>Ragon.ENet</RootNamespace>
|
||||||
|
<TargetFrameworks>net6.0;net7.0</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="ENet-CSharp" Version="2.4.8" />
|
<PackageReference Include="ENet-CSharp" Version="2.4.8" />
|
||||||
<PackageReference Include="NLog" Version="5.1.1" />
|
<PackageReference Include="NLog" Version="5.2.2" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net7.0</TargetFramework>
|
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<RootNamespace>Ragon.WebSockets</RootNamespace>
|
<RootNamespace>Ragon.WebSockets</RootNamespace>
|
||||||
|
<TargetFrameworks>net7.0;net6.0</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="NLog" Version="5.1.1" />
|
<PackageReference Include="NLog" Version="5.2.2" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -1,15 +1,24 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<RootNamespace>Ragon.Core</RootNamespace>
|
<RootNamespace>Ragon.Core</RootNamespace>
|
||||||
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
|
<Version>1.2.4-rc</Version>
|
||||||
|
<Title>Ragon.Server</Title>
|
||||||
|
<Copyright>Eduard Kargin</Copyright>
|
||||||
|
<PackageProjectUrl>https://ragon-server.com</PackageProjectUrl>
|
||||||
|
<RepositoryUrl>https://github.com/edmand46/Ragon</RepositoryUrl>
|
||||||
|
<RepositoryType>Source</RepositoryType>
|
||||||
|
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
|
||||||
|
<LangVersion>10</LangVersion>
|
||||||
|
<TargetFrameworks>net6.0;net7.0</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.2-beta2" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||||
<PackageReference Include="NLog" Version="5.1.1" />
|
<PackageReference Include="NLog" Version="5.2.2" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -54,8 +54,8 @@ public sealed class EntityCreateOperation : IRagonOperation
|
|||||||
if (reader.Capacity > 0)
|
if (reader.Capacity > 0)
|
||||||
entity.Payload.Read(reader);
|
entity.Payload.Read(reader);
|
||||||
|
|
||||||
var roomPlugin = room.Plugin;
|
var plugin = room.Plugin;
|
||||||
if (!roomPlugin.OnEntityCreate(player, entity))
|
if (!plugin.OnEntityCreate(player, entity))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
entity.Attach(player);
|
entity.Attach(player);
|
||||||
|
|||||||
@@ -44,16 +44,15 @@ public sealed class EntityEventOperation : IRagonOperation
|
|||||||
if (targetMode == RagonTarget.Player)
|
if (targetMode == RagonTarget.Player)
|
||||||
targetPlayerPeerId = reader.ReadUShort();
|
targetPlayerPeerId = reader.ReadUShort();
|
||||||
|
|
||||||
var ragonEvent = new RagonEvent(player, eventId);
|
var @event = new RagonEvent(player, eventId);
|
||||||
ragonEvent.Read(reader);
|
@event.Read(reader);
|
||||||
|
|
||||||
if (targetMode == RagonTarget.Player &&
|
if (targetMode == RagonTarget.Player && room.Players.TryGetValue(targetPlayerPeerId, out var targetPlayer))
|
||||||
context.Room.Players.TryGetValue(targetPlayerPeerId, out var targetPlayer))
|
|
||||||
{
|
{
|
||||||
ent.ReplicateEvent(player, ragonEvent, eventMode, targetPlayer);
|
ent.ReplicateEvent(player, @event, eventMode, targetPlayer);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ent.ReplicateEvent(player, ragonEvent, eventMode, targetMode);
|
ent.ReplicateEvent(player, @event, eventMode, targetMode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user