Ejemplo n.º 1
0
        /// <summary>
        /// Client has queried the server list
        /// </summary>
        /// <param name="clientRequest"></param>
        private void HandleQuery(InboundPacket clientRequest)
        {
            // Query arrives as an array of QueryData structs
            QueryData[] queries = clientRequest.PopStructArray <QueryData>();

            // Write query to log and notify master server for stats
            LogQuery(queries);

            // Get a filtered list of servers based on the queries which were receieved
            List <Server> servers = serverList.Query(queries);

            // Server count is the first reply following the query and tells the player how many servers to expect
            OutboundPacket serverCountPacket = new OutboundPacket();

            serverCountPacket.Append(servers.Count);
            serverCountPacket.Append((byte)0x01);
            Send(serverCountPacket);

            // Send server list if any were found
            if (servers.Count > 0)
            {
                foreach (Server server in servers)
                {
                    OutboundPacket serverListPacket = new OutboundPacket();
                    serverListPacket.AppendStruct <ServerListEntry>(server.ListEntry);
                    Send(serverListPacket);
                }
            }
        }