Skip to content

Commit 2abe54c

Browse files
Improve networking entity ip handling
1 parent bc27cb3 commit 2abe54c

File tree

9 files changed

+144
-27
lines changed

9 files changed

+144
-27
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace AltV.Net.Networking.Example
66
{
77
public class NonePlayerAuthenticationProviderFactory : IAuthenticationProviderFactory
88
{
9-
public IAuthenticationProvider Create(int port, WebSocket webSocket)
9+
public IAuthenticationProvider Create(string ip, int port, WebSocket webSocket)
1010
{
1111
return new NonePlayerAuthenticationProvider(webSocket);
1212
}

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
using System.Collections.Generic;
33
using System.Threading;
44
using AltV.Net.NetworkingEntity;
5-
using AltV.Net.NetworkingEntity.Elements.Factories;
6-
using AltV.Net.NetworkingEntity.Elements.Providers;
75
using Entity;
86

97
namespace AltV.Net.Networking.Example
@@ -13,9 +11,12 @@ internal static class Program
1311
private static void Main(string[] args)
1412
{
1513
//AltNetworking.Init() is enough for most projects
16-
AltNetworking.Init(new NetworkingModule(46429, new IdProvider(), new NetworkingEntityFactory(),
17-
new ClientTokenProvider(), new NetworkingClientFactory(),
18-
new NonePlayerAuthenticationProviderFactory(), new ClientEntityStreamingHandlerFactory()));
14+
AltNetworking.Init(new NetworkingModuleBuilder()
15+
.SetPort(46429)
16+
.SetAuthenticationProviderFactory(new NonePlayerAuthenticationProviderFactory())
17+
.Build()
18+
);
19+
1920
var data = new Dictionary<string, object>();
2021
var data2 = new Dictionary<string, object>();
2122
data["bla"] = "123";

api/AltV.Net.NetworkingEntity/Client/index.html

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44
<script>
55
window.callbacks = new Map();
66
window.alt = {
7-
emit: function(eventname, ...args) {
8-
window.callbacks.get(eventname)( ...args);
7+
emit: (eventname, ...args) => {
8+
const func = window.callbacks.get(eventname);
9+
func( ...args);
910
},
10-
on: function(eventname, callback) {
11+
on: (eventname, callback) => {
1112
window.callbacks.set(eventname, callback);
1213
}
1314
}

api/AltV.Net.NetworkingEntity/Elements/Factories/AuthenticationProviderFactory.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ namespace AltV.Net.NetworkingEntity.Elements.Factories
55
{
66
public class AuthenticationProviderFactory : IAuthenticationProviderFactory
77
{
8-
public IAuthenticationProvider Create(int port, WebSocket webSocket)
8+
public IAuthenticationProvider Create(string ip, int port, WebSocket webSocket)
99
{
10-
return new AuthenticationProvider(port, webSocket);
10+
return new AuthenticationProvider(ip, port, webSocket);
1111
}
1212
}
1313
}

api/AltV.Net.NetworkingEntity/Elements/Factories/IAuthenticationProviderFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ namespace AltV.Net.NetworkingEntity.Elements.Factories
55
{
66
public interface IAuthenticationProviderFactory
77
{
8-
IAuthenticationProvider Create(int port, WebSocket webSocket);
8+
IAuthenticationProvider Create(string ip, int port, WebSocket webSocket);
99
}
1010
}

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

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

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

24-
public AuthenticationProvider(int port, WebSocket webSocket) : this("ws://" + GetIpAddress() + $":{port}/",
24+
public AuthenticationProvider(string ip, int port, WebSocket webSocket) : this("ws://" + (ip ?? GetIpAddress()) + $":{port}/",
2525
webSocket)
2626
{
2727
}
@@ -76,15 +76,6 @@ await webSocket.CloseWebSocketAsync(clientWebSocket, WebSocketCloseStatus.Normal
7676
};
7777
}
7878

79-
private static string GetIpAddress()
80-
{
81-
var ipHostInfo = Dns.GetHostEntry(Dns.GetHostName()); // `Dns.Resolve()` method is deprecated.
82-
if (ipHostInfo.AddressList.Length == 0) return null;
83-
var ipAddress = ipHostInfo.AddressList[0];
84-
85-
return ipAddress.ToString();
86-
}
87-
8879
public bool Verify(ManagedWebSocket webSocket, string token, out INetworkingClient client)
8980
{
9081
if (!AltNetworking.Module.ClientPool.TryGet(token, out client)) return false;
@@ -120,5 +111,14 @@ public bool VerifyPosition(INetworkingClient client, INetworkingEntity entity, b
120111
// Can be extended when more trustful position checking is needed
121112
return true;
122113
}
114+
115+
private static string GetIpAddress()
116+
{
117+
var ipHostInfo = Dns.GetHostEntry(Dns.GetHostName()); // `Dns.Resolve()` method is deprecated.
118+
if (ipHostInfo.AddressList.Length == 0) return null;
119+
var ipAddress = ipHostInfo.AddressList[0];
120+
121+
return ipAddress.ToString();
122+
}
123123
}
124124
}

api/AltV.Net.NetworkingEntity/NetworkingModule.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,23 @@ public class NetworkingModule
1414

1515
public readonly IEntityStreamer Streamer;
1616

17-
public NetworkingModule(int port = 46429) : this(port, new IdProvider(), new NetworkingEntityFactory(),
17+
public NetworkingModule(string ip = null, int port = 46429) : this(ip, port, new IdProvider(),
18+
new NetworkingEntityFactory(),
1819
new ClientTokenProvider(), new NetworkingClientFactory(), new AuthenticationProviderFactory(),
1920
new ClientEntityStreamingHandlerFactory())
2021
{
2122
}
2223

23-
public NetworkingModule(int port, IIdProvider<ulong> idProvider, INetworkingEntityFactory entityFactory,
24+
public NetworkingModule(string ip, int port, IIdProvider<ulong> idProvider,
25+
INetworkingEntityFactory entityFactory,
2426
IIdProvider<string> tokenProvider, INetworkingClientFactory clientFactory,
2527
IAuthenticationProviderFactory authenticationProviderFactory,
2628
IStreamingHandlerFactory streamingHandlerFactory)
2729
{
2830
EntityPool = new NetworkingEntityPool(idProvider, entityFactory);
2931
ClientPool = new NetworkingClientPool(tokenProvider, clientFactory);
3032
Streamer = new EntityStreamer();
31-
Server = new Server(port, authenticationProviderFactory, Streamer, streamingHandlerFactory);
33+
Server = new Server(ip, port, authenticationProviderFactory, Streamer, streamingHandlerFactory);
3234
}
3335
}
3436
}
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
using AltV.Net.NetworkingEntity.Elements.Factories;
2+
using AltV.Net.NetworkingEntity.Elements.Providers;
3+
4+
namespace AltV.Net.NetworkingEntity
5+
{
6+
public class NetworkingModuleBuilder
7+
{
8+
private string ip;
9+
10+
private int port;
11+
12+
private IIdProvider<ulong> idProvider;
13+
14+
private INetworkingEntityFactory networkingEntityFactory;
15+
16+
private IIdProvider<string> tokenProvider;
17+
18+
private INetworkingClientFactory networkingClientFactory;
19+
20+
private IAuthenticationProviderFactory authenticationProviderFactory;
21+
22+
private IStreamingHandlerFactory streamingHandlerFactory;
23+
24+
public NetworkingModuleBuilder()
25+
{
26+
this.port = 46429;
27+
}
28+
29+
public NetworkingModuleBuilder SetIp(string value)
30+
{
31+
this.ip = value;
32+
return this;
33+
}
34+
35+
public NetworkingModuleBuilder SetPort(int value)
36+
{
37+
this.port = value;
38+
return this;
39+
}
40+
41+
public NetworkingModuleBuilder SetEntityIdProvider(IIdProvider<ulong> value)
42+
{
43+
this.idProvider = value;
44+
return this;
45+
}
46+
47+
public NetworkingModuleBuilder SetNetworkingEntityFactory(INetworkingEntityFactory value)
48+
{
49+
this.networkingEntityFactory = value;
50+
return this;
51+
}
52+
53+
public NetworkingModuleBuilder SetTokenProvider(IIdProvider<string> value)
54+
{
55+
this.tokenProvider = value;
56+
return this;
57+
}
58+
59+
public NetworkingModuleBuilder SetNetworkingClientFactory(INetworkingClientFactory value)
60+
{
61+
this.networkingClientFactory = value;
62+
return this;
63+
}
64+
65+
public NetworkingModuleBuilder SetAuthenticationProviderFactory(IAuthenticationProviderFactory value)
66+
{
67+
this.authenticationProviderFactory = value;
68+
return this;
69+
}
70+
71+
public NetworkingModuleBuilder SetStreamingHandlerFactory(IStreamingHandlerFactory value)
72+
{
73+
this.streamingHandlerFactory = value;
74+
return this;
75+
}
76+
77+
public NetworkingModule Build()
78+
{
79+
if (idProvider == null)
80+
{
81+
idProvider = new IdProvider();
82+
}
83+
84+
if (networkingEntityFactory == null)
85+
{
86+
networkingEntityFactory = new NetworkingEntityFactory();
87+
}
88+
89+
if (tokenProvider == null)
90+
{
91+
tokenProvider = new ClientTokenProvider();
92+
}
93+
94+
if (networkingClientFactory == null)
95+
{
96+
networkingClientFactory = new NetworkingClientFactory();
97+
}
98+
99+
if (authenticationProviderFactory == null)
100+
{
101+
authenticationProviderFactory = new AuthenticationProviderFactory();
102+
}
103+
104+
if (streamingHandlerFactory == null)
105+
{
106+
streamingHandlerFactory = new ClientEntityStreamingHandlerFactory();
107+
}
108+
109+
return new NetworkingModule(ip, port, idProvider, networkingEntityFactory, tokenProvider,
110+
networkingClientFactory, authenticationProviderFactory, streamingHandlerFactory);
111+
}
112+
}
113+
}

api/AltV.Net.NetworkingEntity/Server.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ public class Server
1313
{
1414
public readonly IStreamingHandler StreamingHandler;
1515

16-
public Server(int port, IAuthenticationProviderFactory authenticationProviderFactory, IEntityStreamer streamer,
16+
public Server(string ip, int port, IAuthenticationProviderFactory authenticationProviderFactory, IEntityStreamer streamer,
1717
IStreamingHandlerFactory factory)
1818
{
1919
var webSocket = new WebSocket();
20-
var authenticationProvider = authenticationProviderFactory.Create(port, webSocket);
20+
var authenticationProvider = authenticationProviderFactory.Create(ip, port, webSocket);
2121
var streamingHandler = factory.Create(authenticationProvider);
2222
StreamingHandler = streamingHandler;
2323
webSocket.OnMessageReceived = streamingHandler.OnMessage;

0 commit comments

Comments
 (0)