private static void Main(string[] args) { AltNetworking.Configure(options => { options.Port = 46429; options.AuthenticationProviderFactory = new NonePlayerAuthenticationProviderFactory(); }); var data = new Dictionary <string, object>(); var data2 = new Dictionary <string, object>(); data["bla"] = "123"; data["bla2"] = 1235; var entityToUpdate = AltNetworking.CreateEntity(new Position { X = 0, Y = 0, Z = 0 }, 1, 50, data, StreamingType.DataStreaming); AltNetworking.CreateEntity(new Position { X = 1, Y = 1, Z = 1 }, 1, 50, data2, StreamingType.DataStreaming); AltNetworking.OnEntityStreamIn = (entity, client) => { Console.WriteLine("streamed in " + entity.Id + " in client " + client.Token); }; AltNetworking.OnEntityStreamOut = (entity, client) => { Console.WriteLine("streamed out " + entity.Id + " in client " + client.Token); }; var random = new Random(); int i = 0; while (true) { if (random.Next() % 2 == 0) { entityToUpdate.SetData("myData", 1); } else { entityToUpdate.SetDataNull("myData"); } Thread.Sleep(2000); i++; if (i == 3) { break; } } Console.ReadKey(); }
public Task <bool> Verify(INetworkingClientPool networkingClientPool, ManagedWebSocket managedWebSocket, string token, out INetworkingClient client) { if (networkingClientPool.TryGet(token, out client)) { //managedWebSocket.Extra.TryAdd("client", client); /*if (client.WebSocket != managedWebSocket) * { * webSocket.CloseWebSocket(client.WebSocket); * } * * client.WebSocket = managedWebSocket;*/ //return Task.FromResult(true); networkingClientPool.Remove(client); //TODO: maybe try to reuse clients later when client can send if it was a reconnect or new connection in auth event } client = AltNetworking.CreateClient(token); client.WebSocket = managedWebSocket; //TODO: maybe do that automatically, but we would lost freedom managedWebSocket.Extra.TryAdd("client", client); return(Task.FromResult(true)); }
public AuthenticationProvider(string url, WebSocket webSocket) { Task.Run(async() => { while (await playerEventsReader.WaitToReadAsync()) { while (playerEventsReader.TryRead(out var playerEvent)) { try { var player = playerEvent.Player; if (playerEvent.Connected) { var client = AltNetworking.CreateClient(); lock (client) { if (!client.Exists) { AltNetworking.Module.ClientPool.Remove(client.Token); continue; } playerTokens[client.Token] = player; playerTokenAccess[player] = client.Token; player.SetNetworkingClient(client); lock (player) { if (player.Exists) { player.Emit("streamingToken", url, client.Token); } } } } else { player.RemoveNetworkingClient(); if (playerTokenAccess.Remove(player, out var token)) { playerTokens.Remove(token); } else { continue; } if (!AltNetworking.Module.ClientPool.Remove(token, out var client)) { continue; } ManagedWebSocket clientWebSocket; lock (client) { clientWebSocket = client.WebSocket; } if (clientWebSocket == null) { continue; } try { await webSocket.CloseWebSocketAsync(clientWebSocket, WebSocketCloseStatus.NormalClosure, "disconnected"); } catch (Exception exception) { Console.WriteLine(exception); } } } catch (Exception exception) { Console.WriteLine(exception); } } } }); Alt.OnPlayerConnect += (player, reason) => { playerEventsWriter.WriteAsync(new PlayerEvent(player, true)); }; Alt.OnPlayerDisconnect += (player, reason) => { playerEventsWriter.WriteAsync(new PlayerEvent(player, false)); }; }