ALFAIRCBot.ALFAIRCBot.OnCommandPlayers C# (CSharp) Метод

OnCommandPlayers() приватный Метод

private OnCommandPlayers ( string Source ) : void
Source string
Результат void
        private void OnCommandPlayers(string Source)
        {
            Dictionary<int, SERVER_DATA> ServerInfoTable = new Dictionary<int, SERVER_DATA>();
            SERVER_DATA ServerData = new SERVER_DATA();

            IncrementStatistic("IRC_COMMAND_PLAYERS");

            string QueryFmt =
                "SELECT " +
                    "COUNT(`characters`.`ID`) AS character_count, " +
                    "`servers`.`Name` AS server_name, " +
                    "`servers`.`ID` AS server_id, " +
                    "`pwdata_health`.`Value` as server_health_status, " +
                    "`pwdata_vault`.`Value` as server_vault_status " +
                "FROM `characters` " +
                "INNER JOIN `players` ON `players`.`ID` = `characters`.`PlayerID` " +
                "INNER JOIN `servers` ON `servers`.`ID` = `characters`.`ServerID` " +
                "INNER JOIN `pwdata` ON `pwdata`.`Name` = `servers`.`Name` " +
                "LEFT OUTER JOIN `pwdata` AS `pwdata_health` ON `pwdata_health`.`Name` = `servers`.`Name` " +
                "AND `pwdata_health`.`Key` = 'ACR_HEALTHMONITOR_STATUS' " +
                "LEFT OUTER JOIN `pwdata` AS `pwdata_vault` ON `pwdata_vault`.`Name` = `servers`.`Name` " +
                "AND `pwdata_health`.`Key` = 'ACR_HEALTHMONITOR_VAULT_STATUS' " +
                "WHERE `characters`.`IsOnline` = 1 " +
                "AND `players`.IsDM = {0} " +
                "AND `pwdata`.`Key` = 'ACR_TIME_SERVERTIME' " +
                "AND `pwdata`.`Last` >= DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 10 MINUTE) " +
                "GROUP BY `characters`.`ServerID` "
                ;

            using (MySqlDataReader Reader = ExecuteQuery(String.Format(QueryFmt, 0)))
            {
                while (Reader.Read())
                {
                    int ServerId = Reader.GetInt32(2);

                    if (!ServerInfoTable.TryGetValue(ServerId, out ServerData))
                        ServerInfoTable.Add(ServerId, new SERVER_DATA());

                    ServerInfoTable[ServerId].Players = Reader.GetInt32(0);
                    ServerInfoTable[ServerId].Name = Reader.GetString(1);
                    ServerInfoTable[ServerId].ServerId = Reader.GetInt32(2);

                    if (Reader.IsDBNull(3))
                        ServerInfoTable[ServerId].HealthStatus = -1;
                    else
                        ServerInfoTable[ServerId].HealthStatus = Reader.GetInt32(3);

                    if (Reader.IsDBNull(4))
                        ServerInfoTable[ServerId].VaultOnline = true;
                    else
                    {
                        switch (Reader.GetInt32(4))
                        {

                            case 0:
                            default:
                                ServerInfoTable[ServerId].VaultOnline = true;
                                break;

                            case 1:
                                ServerInfoTable[ServerId].VaultOnline = false;
                                break;


                        }
                    }

                }
            }

            using (MySqlDataReader Reader = ExecuteQuery(String.Format(QueryFmt, 1)))
            {
                while (Reader.Read())
                {
                    int ServerId = Reader.GetInt32(2);

                    //
                    // We might have a server show up here for the first time
                    // if it had DMs only and no regular players.
                    //

                    if (!ServerInfoTable.TryGetValue(ServerId, out ServerData))
                    {
                        ServerInfoTable.Add(ServerId, new SERVER_DATA());

                        ServerInfoTable[ServerId].Players = 0;
                        ServerInfoTable[ServerId].Name = Reader.GetString(1);
                        ServerInfoTable[ServerId].ServerId = Reader.GetInt32(2);

                        if (Reader.IsDBNull(3))
                            ServerInfoTable[ServerId].HealthStatus = -1;
                        else
                            ServerInfoTable[ServerId].HealthStatus = Reader.GetInt32(3);

                        if (Reader.IsDBNull(4))
                            ServerInfoTable[ServerId].VaultOnline = true;
                        else
                        {
                            switch (Reader.GetInt32(4))
                            {

                                case 0:
                                default:
                                    ServerInfoTable[ServerId].VaultOnline = true;
                                    break;

                                case 1:
                                    ServerInfoTable[ServerId].VaultOnline = false;
                                    break;


                            }
                        }
                    }

                    ServerInfoTable[ServerId].DMs = Reader.GetInt32(0);
                }
            }

            StringBuilder Output = new StringBuilder("Servers with activity: " );
            bool First = true;

            if (ServerInfoTable.TryGetValue(3, out ServerData))
                ServerData.Name = "TSM";
            if (ServerInfoTable.TryGetValue(9, out ServerData))
                ServerData.Name = "MS";
            if (ServerInfoTable.TryGetValue(10, out ServerData))
                ServerData.Name = "BG";
            if (ServerInfoTable.TryGetValue(11, out ServerData))
                ServerData.Name = "WHL";

            //
            // Now show the results.
            //

            foreach (SERVER_DATA Entry in ServerInfoTable.Values)
            {
                if (First == false)
                {
                    Output.Append("; ");
                }
                else
                {
                    First = false;
                }

                string VaultStatusString;

                if (Entry.VaultOnline)
                    VaultStatusString = "";
                else
                    VaultStatusString = " *VAULT DISCONNECTED*";

                Output.AppendFormat("{0}: {1} player{2}, {3} DM{4}{5}{6}",
                    Entry.Name,
                    Entry.Players,
                    Entry.Players == 1 ? "" : "s",
                    Entry.DMs,
                    Entry.DMs == 1 ? "" : "s",
                    GetServerHealthStatusString(Entry.HealthStatus),
                    VaultStatusString);
            }

            if (First)
                SendMessage(SendType.Message, Source, "No players are logged on to any servers.");
            else
                SendMessage(SendType.Message, Source, Output.ToString());

//            Console.WriteLine(Output.ToString());

            /*
            ServerInfoTable[3].Name = "TSM";
            ServerInfoTable[9].Name = "BG";
            ServerInfoTable[10].Name = "MS";

            Console.WriteLine(String.Format(
                "{0}: {1} player(s), {2}DM(s); {3}: {4} player(s) and {5} DM(s); {6}: {7} player(s) and {8} DM(s)",
                ServerInfoTable[3].Name,
                ServerInfoTable[3].Players,
                ServerInfoTable[3].DMs,
                ServerInfoTable[10].Name,
                ServerInfoTable[10].Players,
                ServerInfoTable[10].DMs,
                ServerInfoTable[9].Name,
                ServerInfoTable[9].Players,
                ServerInfoTable[9].DMs));

            SendMessage(SendType.Message, Source, String.Format(
                "{0}: {1} player(s), {2}DM(s); {3}: {4} player(s) and {5} DM(s); {6}: {7} player(s) and {8} DM(s)",
                ServerInfoTable[3].Name,
                ServerInfoTable[3].Players,
                ServerInfoTable[3].DMs,
                ServerInfoTable[10].Name,
                ServerInfoTable[10].Players,
                ServerInfoTable[10].DMs,
                ServerInfoTable[9].Name,
                ServerInfoTable[9].Players,
                ServerInfoTable[9].DMs));
             */
        }