Exemplo n.º 1
0
        private void ListenForServerConnection()
        {
            tcpListener.Start();

            TcpClient client = new TcpClient();

            while (true)
            {
                try {
                    client = tcpListener.AcceptTcpClient();

                    ConnectedServer server = new ConnectedServer(client);

                    Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientConnection));
                    clientThread.Start(server);
                } catch (SocketException) {
                    // can be ignored (thread stopped and no socket connection)
                    break;
                } catch (Exception ex) {
                    RefreshConsole("[ERROR] " + ex.ToString());
                    break;
                }
            }

            tcpListener.Stop();
        }
Exemplo n.º 2
0
        private void HandleClientConnection(Object serverData)
        {
            ConnectedServer server = (ConnectedServer)serverData;

            connectedServers.Add(server.Client, server);

            NetworkStream stream = server.Client.GetStream();

            int byteRead;

            while (true)
            {
                try {
                    byte[] message = new byte[1024];
                    byteRead = stream.Read(message, 0, 1024);
                    stream.Flush();

                    if (byteRead == 0)
                    {
                        break;
                    }

                    PacketType type = (PacketType)message[0];

                    switch (type)
                    {
                    case PacketType.ListServer:
                        int    nameLength = BitConverter.ToInt32(message.SubArray(1, 4), 0);
                        string serverName = Encoding.ASCII.GetString(message.SubArray(5, nameLength));
                        int    maxPlayers = BitConverter.ToInt32(message.SubArray(5 + nameLength, 4), 0);

                        server.Name       = serverName;
                        server.MaxPlayers = maxPlayers;

                        RefreshConsole($"New Server: {server.Name}");
                        break;

                    case PacketType.RefreshServer:
                        int currentPlayers = BitConverter.ToInt32(message.SubArray(1, 4), 0);

                        server.PlayerCount = currentPlayers;

                        RefreshConsole($"Update PlayerCount: {server.PlayerCount}");
                        break;

                    case PacketType.RequestList:

                        RefreshConsole($"Request server list from");
                        break;
                    }
                } catch {
                    // server no longer connected
                    break;
                }
            }

            server.Client.Close();

            connectedServers.Remove(server.Client);
            RefreshConsole();
        }