Find() public static method

public static Find ( string name ) : Cvar
name string
return Cvar
Esempio n. 1
0
        /// <summary>
        /// _Datagram_CheckNewConnections
        /// </summary>
        public qsocket_t InternalCheckNewConnections()
        {
            Socket acceptsock = Net.LanDriver.CheckNewConnections();

            if (acceptsock == null)
            {
                return(null);
            }

            EndPoint clientaddr = new IPEndPoint(IPAddress.Any, 0);

            Net.Message.FillFrom(acceptsock, ref clientaddr);

            if (Net.Message.Length < sizeof(int))
            {
                return(null);
            }

            Net.Reader.Reset();
            int control = Common.BigLong(Net.Reader.ReadLong());

            if (control == -1)
            {
                return(null);
            }
            if ((control & (~NetFlags.NETFLAG_LENGTH_MASK)) != NetFlags.NETFLAG_CTL)
            {
                return(null);
            }
            if ((control & NetFlags.NETFLAG_LENGTH_MASK) != Net.Message.Length)
            {
                return(null);
            }

            int command = Net.Reader.ReadByte();

            if (command == CCReq.CCREQ_SERVER_INFO)
            {
                string tmp = Net.Reader.ReadString();
                if (tmp != "QUAKE")
                {
                    return(null);
                }

                Net.Message.Clear();

                // save space for the header, filled in later
                Net.Message.WriteLong(0);
                Net.Message.WriteByte(CCRep.CCREP_SERVER_INFO);
                EndPoint newaddr = acceptsock.LocalEndPoint; //dfunc.GetSocketAddr(acceptsock, &newaddr);
                Net.Message.WriteString(newaddr.ToString()); // dfunc.AddrToString(&newaddr));
                Net.Message.WriteString(Net.HostName);
                Net.Message.WriteString(Server.sv.name);
                Net.Message.WriteByte(Net.ActiveConnections);
                Net.Message.WriteByte(Server.svs.maxclients);
                Net.Message.WriteByte(Net.NET_PROTOCOL_VERSION);
                Common.WriteInt(Net.Message.Data, 0, Common.BigLong(NetFlags.NETFLAG_CTL |
                                                                    (Net.Message.Length & NetFlags.NETFLAG_LENGTH_MASK)));
                Net.LanDriver.Write(acceptsock, Net.Message.Data, Net.Message.Length, clientaddr);
                Net.Message.Clear();
                return(null);
            }

            if (command == CCReq.CCREQ_PLAYER_INFO)
            {
                int      playerNumber = Net.Reader.ReadByte();
                int      clientNumber, activeNumber = -1;
                client_t client = null;
                for (clientNumber = 0; clientNumber < Server.svs.maxclients; clientNumber++)
                {
                    client = Server.svs.clients[clientNumber];
                    if (client.active)
                    {
                        activeNumber++;
                        if (activeNumber == playerNumber)
                        {
                            break;
                        }
                    }
                }
                if (clientNumber == Server.svs.maxclients)
                {
                    return(null);
                }

                Net.Message.Clear();
                // save space for the header, filled in later
                Net.Message.WriteLong(0);
                Net.Message.WriteByte(CCRep.CCREP_PLAYER_INFO);
                Net.Message.WriteByte(playerNumber);
                Net.Message.WriteString(client.name);
                Net.Message.WriteLong(client.colors);
                Net.Message.WriteLong((int)client.edict.v.frags);
                Net.Message.WriteLong((int)(Net.Time - client.netconnection.connecttime));
                Net.Message.WriteString(client.netconnection.address);
                Common.WriteInt(Net.Message.Data, 0, Common.BigLong(NetFlags.NETFLAG_CTL |
                                                                    (Net.Message.Length & NetFlags.NETFLAG_LENGTH_MASK)));
                Net.LanDriver.Write(acceptsock, Net.Message.Data, Net.Message.Length, clientaddr);
                Net.Message.Clear();

                return(null);
            }

            if (command == CCReq.CCREQ_RULE_INFO)
            {
                // find the search start location
                string prevCvarName = Net.Reader.ReadString();
                Cvar   var;
                if (!String.IsNullOrEmpty(prevCvarName))
                {
                    var = Cvar.Find(prevCvarName);
                    if (var == null)
                    {
                        return(null);
                    }
                    var = var.Next;
                }
                else
                {
                    var = Cvar.First;
                }

                // search for the next server cvar
                while (var != null)
                {
                    if (var.IsServer)
                    {
                        break;
                    }
                    var = var.Next;
                }

                // send the response
                Net.Message.Clear();

                // save space for the header, filled in later
                Net.Message.WriteLong(0);
                Net.Message.WriteByte(CCRep.CCREP_RULE_INFO);
                if (var != null)
                {
                    Net.Message.WriteString(var.Name);
                    Net.Message.WriteString(var.String);
                }
                Common.WriteInt(Net.Message.Data, 0, Common.BigLong(NetFlags.NETFLAG_CTL |
                                                                    (Net.Message.Length & NetFlags.NETFLAG_LENGTH_MASK)));
                Net.LanDriver.Write(acceptsock, Net.Message.Data, Net.Message.Length, clientaddr);
                Net.Message.Clear();

                return(null);
            }

            if (command != CCReq.CCREQ_CONNECT)
            {
                return(null);
            }

            if (Net.Reader.ReadString() != "QUAKE")
            {
                return(null);
            }

            if (Net.Reader.ReadByte() != Net.NET_PROTOCOL_VERSION)
            {
                Net.Message.Clear();
                // save space for the header, filled in later
                Net.Message.WriteLong(0);
                Net.Message.WriteByte(CCRep.CCREP_REJECT);
                Net.Message.WriteString("Incompatible version.\n");
                Common.WriteInt(Net.Message.Data, 0, Common.BigLong(NetFlags.NETFLAG_CTL |
                                                                    (Net.Message.Length & NetFlags.NETFLAG_LENGTH_MASK)));
                Net.LanDriver.Write(acceptsock, Net.Message.Data, Net.Message.Length, clientaddr);
                Net.Message.Clear();
                return(null);
            }

#if BAN_TEST
            // check for a ban
            if (clientaddr.sa_family == AF_INET)
            {
                unsigned long testAddr;
                testAddr = ((struct sockaddr_in *)&clientaddr)->sin_addr.s_addr;