Skip to content

Commit 55f8901

Browse files
Allow own entity and client ids, make verify a task
1 parent 2abe54c commit 55f8901

File tree

10 files changed

+52
-18
lines changed

10 files changed

+52
-18
lines changed

api/AltV.Net.Networking.Example/NonePlayerAuthenticationProvider.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Threading.Tasks;
23
using AltV.Net.NetworkingEntity;
34
using AltV.Net.NetworkingEntity.Elements.Entities;
45
using AltV.Net.NetworkingEntity.Elements.Providers;
@@ -15,13 +16,13 @@ public NonePlayerAuthenticationProvider(WebSocket webSocket)
1516
this.webSocket = webSocket;
1617
}
1718

18-
public bool Verify(ManagedWebSocket managedWebSocket, string token, out INetworkingClient client)
19+
public Task<bool> Verify(ManagedWebSocket managedWebSocket, string token, out INetworkingClient client)
1920
{
2021
client = AltNetworking.CreateClient();
2122
client.Token = token;
2223
client.WebSocket = managedWebSocket; //TODO: maybe do that automatically, but we would lost freedom
2324
managedWebSocket.Extra.TryAdd("client", client);
24-
return true;
25+
return Task.FromResult(true);
2526
}
2627

2728
public INetworkingClient GetClient(ManagedWebSocket managedWebSocket)

api/AltV.Net.NetworkingEntity/AltNetworking.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,20 @@ public static void Init(NetworkingModule networkingModule)
3232

3333
public static INetworkingEntity CreateEntity(Position position, int dimension, float range,
3434
IDictionary<string, object> data)
35+
{
36+
return CreateEntity(Module.IdProvider.GetNext(), position, dimension, range, data);
37+
}
38+
39+
public static INetworkingEntity CreateEntity(ulong id, Position position, int dimension, float range,
40+
IDictionary<string, object> data)
3541
{
3642
var entity = new Entity.Entity {Position = position, Dimension = dimension, Range = range};
3743
foreach (var (key, value) in data)
3844
{
3945
entity.Data[key] = MValueUtils.ToMValue(value);
4046
}
41-
42-
return Module.EntityPool.Create(Module.Streamer, entity);
47+
48+
return Module.EntityPool.Create(id, Module.Streamer, entity);
4349
}
4450

4551
public static void RemoveEntity(INetworkingEntity entity)
@@ -49,7 +55,12 @@ public static void RemoveEntity(INetworkingEntity entity)
4955

5056
public static INetworkingClient CreateClient()
5157
{
52-
return Module.ClientPool.Create();
58+
return Module.ClientPool.Create(Module.TokenProvider.GetNext());
59+
}
60+
61+
public static INetworkingClient CreateClient(string token)
62+
{
63+
return Module.ClientPool.Create(token);
5364
}
5465

5566
public static void RemoveClient(INetworkingClient client)

api/AltV.Net.NetworkingEntity/ClientEntityStreamingHandler.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public ClientEntityStreamingHandler(IAuthenticationProvider authenticationProvid
2828

2929
public void OnMessage(ManagedWebSocket managedWebSocket, WebSocketReceiveResult result, byte[] data)
3030
{
31-
Task.Run(() =>
31+
Task.Run(async () =>
3232
{
3333
var clientEvent = ClientEvent.Parser.ParseFrom(data);
3434
if (clientEvent == null) return;
@@ -39,7 +39,7 @@ public void OnMessage(ManagedWebSocket managedWebSocket, WebSocketReceiveResult
3939
{
4040
var token = authEvent.Token;
4141
if (token == null) return;
42-
var verified = authenticationProvider.Verify(managedWebSocket, token, out var client);
42+
var verified = await authenticationProvider.Verify(managedWebSocket, token, out var client);
4343
if (!verified)
4444
{
4545
return;
@@ -56,7 +56,7 @@ public void OnMessage(ManagedWebSocket managedWebSocket, WebSocketReceiveResult
5656
}
5757

5858
sendEvent.Send = currSendEvent;
59-
managedWebSocket.SendAsync(sendEvent.ToByteArray(), true);
59+
await managedWebSocket.SendAsync(sendEvent.ToByteArray(), true);
6060
}
6161
else if (streamIn != null)
6262
{
@@ -85,7 +85,7 @@ public void OnMessage(ManagedWebSocket managedWebSocket, WebSocketReceiveResult
8585
}
8686

8787
var serverEvent = new ServerEvent {MultipleDataChange = multipleDataChangeEvent};
88-
managedWebSocket.SendAsync(serverEvent.ToByteArray(), true);
88+
await managedWebSocket.SendAsync(serverEvent.ToByteArray(), true);
8989
}
9090
}
9191
}

api/AltV.Net.NetworkingEntity/Elements/Pools/INetworkingClientPool.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ public interface INetworkingClientPool
77
{
88
IDictionary<string, INetworkingClient> Clients { get; }
99

10+
INetworkingClient Create(string token);
11+
1012
INetworkingClient Create();
1113

1214
bool Add(INetworkingClient client);

api/AltV.Net.NetworkingEntity/Elements/Pools/INetworkingEntityPool.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ public interface INetworkingEntityPool
77
{
88
IDictionary<ulong, INetworkingEntity> Entities { get; }
99

10+
INetworkingEntity Create(ulong id, IEntityStreamer entityStreamer, Entity.Entity streamedEntity);
11+
1012
INetworkingEntity Create(IEntityStreamer entityStreamer, Entity.Entity streamedEntity);
1113

1214
bool Add(INetworkingEntity entity);

api/AltV.Net.NetworkingEntity/Elements/Pools/NetworkingClientPool.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@ public NetworkingClientPool(IIdProvider<string> idProvider, INetworkingClientFac
2222
this.factory = factory;
2323
}
2424

25+
public INetworkingClient Create(string token)
26+
{
27+
var entity = factory.Create(token);
28+
Add(entity);
29+
return entity;
30+
}
31+
2532
public INetworkingClient Create()
2633
{
2734
var entity = factory.Create(idProvider.GetNext());

api/AltV.Net.NetworkingEntity/Elements/Pools/NetworkingEntityPool.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,12 @@ public NetworkingEntityPool(IIdProvider<ulong> idProvider, INetworkingEntityFact
2121
this.factory = factory;
2222
}
2323

24-
public INetworkingEntity Create(IEntityStreamer entityStreamer, Entity.Entity streamedEntity)
24+
public INetworkingEntity Create(IEntityStreamer entityStreamer, Entity.Entity streamedEntity) =>
25+
Create(idProvider.GetNext(), entityStreamer, streamedEntity);
26+
27+
public INetworkingEntity Create(ulong id, IEntityStreamer entityStreamer, Entity.Entity streamedEntity)
2528
{
26-
streamedEntity.Id = idProvider.GetNext();
29+
streamedEntity.Id = id;
2730
var entity = factory.Create(entityStreamer, streamedEntity);
2831
Add(entity);
2932
return entity;
@@ -56,7 +59,7 @@ public void Remove(ulong id)
5659
return;
5760
}
5861
}
59-
62+
6063
OnRemove(removedEntity);
6164

6265
if (removedEntity is IInternalNetworkingEntity internalNetworkingEntity)

api/AltV.Net.NetworkingEntity/Elements/Providers/AuthenticationProvider.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ public class AuthenticationProvider : IAuthenticationProvider
2121

2222
private readonly Dictionary<IPlayer, string> playerTokenAccess = new Dictionary<IPlayer, string>();
2323

24-
public AuthenticationProvider(string ip, int port, WebSocket webSocket) : this("ws://" + (ip ?? GetIpAddress()) + $":{port}/",
24+
public AuthenticationProvider(string ip, int port, WebSocket webSocket) : this(
25+
"ws://" + (ip ?? GetIpAddress()) + $":{port}/",
2526
webSocket)
2627
{
2728
}
@@ -76,12 +77,12 @@ await webSocket.CloseWebSocketAsync(clientWebSocket, WebSocketCloseStatus.Normal
7677
};
7778
}
7879

79-
public bool Verify(ManagedWebSocket webSocket, string token, out INetworkingClient client)
80+
public Task<bool> Verify(ManagedWebSocket webSocket, string token, out INetworkingClient client)
8081
{
81-
if (!AltNetworking.Module.ClientPool.TryGet(token, out client)) return false;
82+
if (!AltNetworking.Module.ClientPool.TryGet(token, out client)) return Task.FromResult(false);
8283
client.WebSocket = webSocket; //TODO: check if already has websocket ect.
8384
webSocket.Extra[ClientExtra] = client;
84-
return true;
85+
return Task.FromResult(true);
8586
}
8687

8788
public INetworkingClient GetClient(ManagedWebSocket webSocket)
@@ -111,7 +112,7 @@ public bool VerifyPosition(INetworkingClient client, INetworkingEntity entity, b
111112
// Can be extended when more trustful position checking is needed
112113
return true;
113114
}
114-
115+
115116
private static string GetIpAddress()
116117
{
117118
var ipHostInfo = Dns.GetHostEntry(Dns.GetHostName()); // `Dns.Resolve()` method is deprecated.

api/AltV.Net.NetworkingEntity/Elements/Providers/IAuthenticationProvider.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Threading.Tasks;
23
using AltV.Net.NetworkingEntity.Elements.Entities;
34
using net.vieapps.Components.WebSockets;
45

@@ -16,7 +17,7 @@ public interface IAuthenticationProvider
1617
/// <param name="token">Token received via AuthEvent</param>
1718
/// <param name="client">The client that matches the authentication</param>
1819
/// <returns></returns>
19-
bool Verify(ManagedWebSocket webSocket, string token, out INetworkingClient client);
20+
Task<bool> Verify(ManagedWebSocket webSocket, string token, out INetworkingClient client);
2021

2122
/// <summary>
2223
/// Returns the client that is designated to a given websocket

api/AltV.Net.NetworkingEntity/NetworkingModule.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ public class NetworkingModule
1414

1515
public readonly IEntityStreamer Streamer;
1616

17+
public readonly IIdProvider<ulong> IdProvider;
18+
19+
public readonly IIdProvider<string> TokenProvider;
20+
1721
public NetworkingModule(string ip = null, int port = 46429) : this(ip, port, new IdProvider(),
1822
new NetworkingEntityFactory(),
1923
new ClientTokenProvider(), new NetworkingClientFactory(), new AuthenticationProviderFactory(),
@@ -27,6 +31,8 @@ public NetworkingModule(string ip, int port, IIdProvider<ulong> idProvider,
2731
IAuthenticationProviderFactory authenticationProviderFactory,
2832
IStreamingHandlerFactory streamingHandlerFactory)
2933
{
34+
IdProvider = idProvider;
35+
TokenProvider = tokenProvider;
3036
EntityPool = new NetworkingEntityPool(idProvider, entityFactory);
3137
ClientPool = new NetworkingClientPool(tokenProvider, clientFactory);
3238
Streamer = new EntityStreamer();

0 commit comments

Comments
 (0)