Esempio n. 1
0
        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));
            };
        }