Close() public static method

NET_Close
public static Close ( qsocket_t sock ) : void
sock qsocket_t
return void
コード例 #1
0
ファイル: ServerMain.cs プロジェクト: polytronicgr/SharpQuake
        /// <summary>
        /// SV_DropClient
        /// Called when the player is getting totally kicked off the host
        /// if (crash = true), don't bother sending signofs
        /// </summary>
        public static void DropClient(bool crash)
        {
            client_t client = Host.HostClient;

            if (!crash)
            {
                // send any final messages (don't check for errors)
                if (Net.CanSendMessage(client.netconnection))
                {
                    MsgWriter msg = client.message;
                    msg.WriteByte(Protocol.svc_disconnect);
                    Net.SendMessage(client.netconnection, msg);
                }

                if (client.edict != null && client.spawned)
                {
                    // call the prog function for removing a client
                    // this will set the body to a dead frame, among other things
                    int saveSelf = Progs.GlobalStruct.self;
                    Progs.GlobalStruct.self = EdictToProg(client.edict);
                    Progs.Execute(Progs.GlobalStruct.ClientDisconnect);
                    Progs.GlobalStruct.self = saveSelf;
                }

                Con.DPrint("Client {0} removed\n", client.name);
            }

            // break the net connection
            Net.Close(client.netconnection);
            client.netconnection = null;

            // free the client (the body stays around)
            client.active    = false;
            client.name      = null;
            client.old_frags = -999999;
            Net.ActiveConnections--;

            // send notification to all clients
            for (int i = 0; i < Server.svs.maxclients; i++)
            {
                client_t cl = Server.svs.clients[i];
                if (!cl.active)
                {
                    continue;
                }

                cl.message.WriteByte(Protocol.svc_updatename);
                cl.message.WriteByte(Host.ClientNum);
                cl.message.WriteString("");
                cl.message.WriteByte(Protocol.svc_updatefrags);
                cl.message.WriteByte(Host.ClientNum);
                cl.message.WriteShort(0);
                cl.message.WriteByte(Protocol.svc_updatecolors);
                cl.message.WriteByte(Host.ClientNum);
                cl.message.WriteByte(0);
            }
        }
コード例 #2
0
ファイル: ClientMain.cs プロジェクト: JakeSmokie/SharpQuake
        /// <summary>
        /// CL_Disconnect
        ///
        /// Sends a disconnect message to the server
        /// This is also called on Host_Error, so it shouldn't cause any errors
        /// </summary>
        public static void Disconnect()
        {
            // stop sounds (especially looping!)
            Sound.StopAllSounds(true);

            // bring the console down and fade the colors back to normal
            //	SCR_BringDownConsole ();

            // if running a local server, shut it down
            if (Cls.demoplayback)
            {
                StopPlayback();
            }
            else if (Cls.state == ClientActivityState.Connected)
            {
                if (Cls.demorecording)
                {
                    Stop_f();
                }

                Con.DPrint("Sending clc_disconnect\n");
                Cls.message.Clear();
                Cls.message.WriteByte(Protocol.clc_disconnect);
                Net.SendUnreliableMessage(Cls.netcon, Cls.message);
                Cls.message.Clear();
                Net.Close(Cls.netcon);

                Cls.state = ClientActivityState.Disconnected;
                if (Server.sv.active)
                {
                    Host.ShutdownServer(false);
                }
            }

            Cls.demoplayback = Cls.timedemo = false;
            Cls.signon       = 0;
        }