Example #1
0
        /// <summary>
        /// Starts listening for connections and updates.
        /// </summary>
        /// <param name="sDataGenerator">Function that generates static data for newly connected clients.</param>
        public ClientsManager(SDataGeneratorDelegate sDataGenerator)
        {
            active               = true;
            readyClients         = ImmutableList <ReadyClient> .Empty;
            connectedClients     = new Dictionary <int, ConnectedClient>();
            clientUpdates        = ImmutableList <ClientUpdate> .Empty;
            serverCommandsSender = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

            ListenForClientUpdatesAsync().Detach();
            ListenForConnectionsAsync(sDataGenerator).Detach();
        }
Example #2
0
        /// <summary>
        /// Starts listening for incoming connections to the server.
        /// </summary>
        async Task ListenForConnectionsAsync(SDataGeneratorDelegate sDataGenerator)
        {
            var endPoint = new IPEndPoint(IPAddress.Any, Ports.serverConnection);

            connectionListener = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
            /// Next available client/player ID.
            int nextClientID = 0;

            connectionListener.Bind(endPoint);
            connectionListener.Listen(5);
            while (active)
            {
                Console.WriteLine("Listening for a client...");
                Socket client = await Task.Factory.FromAsync(connectionListener.BeginAccept, connectionListener.EndAccept, null);

                int playerID             = nextClientID++;
                ConnectingStaticData con = sDataGenerator(playerID);
                HandleClientConnectionAssync(client, playerID, con).Detach();
            }
        }