private void DirectKick(NetworkPlayer player, string reason, float delay = 0f)
        {
            Thread.Sleep((int)(delay * 1000)); //Convert to milliseconds.
            ConnectionPacket cP = new ConnectionPacket(true, reason);

            Packet p = new Packet(Packet.pType.connectionPacket, Packet.sendType.nonbuffered, ENSSerialization.SerializeConnectionPacket(cP));

            p.packetOwnerID   = -1;
            p.sendToAll       = false;
            p.serverAuthority = true;
            SendPacket(player, p);
            player.netStream.Close();
            player.playerConnected = false;
            SteamServer.EndSession(player.steamID);
            SteamUser.EndAuthSession(player.steamID);
            if (connections.Contains(player))
            {
                connections.Remove(player);
            }
            Debug.Log("Client<" + player.steamID + "> has been kicked for: " + reason);
        }
        public void StopServer()
        {
            if (server != null)
            {
                ConnectionPacket cP = new ConnectionPacket(true, "Server Closed.");
                Packet           p  = new Packet(Packet.pType.connectionPacket, Packet.sendType.nonbuffered, ENSSerialization.SerializeConnectionPacket(cP));

                foreach (NetworkPlayer client in connections)
                {
                    SendPacket(client, p); //Server Closed Packet.
                    client.tcpClient.Close();
                    client.tcpClient.Dispose();
                }
                server.Stop();
                server = null;

                if (useSteamworks && !NetTools.isSingleplayer)
                {
                    SteamInteraction.instance.ShutdownServer();
                }
                UPnP.Shutdown();
            }
            if (udpListener != null)
            {
                udpListener.Stop();
                udpListener = null;
            }

            if (connectionHandler != null)
            {
                connectionHandler.Abort();
                connectionHandler = null;
            }
            if (udpHandler != null)
            {
                udpHandler.Abort();
                udpHandler = null;
            }

            if (GameObject.FindObjectOfType <UnityPacketHandler>() != null)
            {
                GameObject.Destroy(GameObject.FindObjectOfType <UnityPacketHandler>().gameObject);
            }
            //NetServer.serverInstance = null;
            connections     = new List <NetworkPlayer>();
            connectionsByID = new Dictionary <int, NetworkPlayer>();
            bufferedPackets = new Dictionary <string, List <Packet> >();
            if (NetServer.serverInstance != null && NetServer.serverInstance.myConnection != null)
            {
                NetServer.serverInstance.myConnection = null;
            }

            NetTools.isServer       = false;
            NetTools.isSingleplayer = false;
        }