private void Listen(object sender, DoWorkEventArgs e) { while (true) { if (listenWorker.CancellationPending) { e.Cancel = true; break; } TcpListener tcpListener = (TcpListener)e.Argument; try { for (int i = 0; i < Players.Count; i++) { if (!((TcpClient)Players[i].SocketEndpoint).Connected) { Players.RemoveAt(i--); } } // Create a TCP socket. // If you ran this server on the desktop, you could use // Socket socket = tcpListener.AcceptSocket() // for greater flexibility. TcpClient tcpClient = tcpListener.AcceptTcpClient(); if (Connections >= MaxConnections) { lock (writeMutex) { writeBuffer.Clear(); ObjectMapper.MapBytes(writeBuffer, "Max Players Reached On Server"); staticWriteStream.SetProtocolType(Networking.ProtocolType.TCP); WriteAndClose(tcpClient, staticWriteStream.Prepare( this, NetworkingStream.IdentifierType.Disconnect, null, writeBuffer)); } return; } // TODO: Set the name string name = string.Empty; NetworkingPlayer player = new NetworkingPlayer(ServerPlayerCounter++, tcpClient.Client.RemoteEndPoint.ToString(), tcpClient, name); lock (Players) { Players.Add(player); } listenWorker.ReportProgress(0, player); } catch (NetworkException exception) { UnityEngine.Debug.LogException(exception); Disconnect(); } } }