예제 #1
0
        /// <summary>
        /// Executes the Hours message.
        /// </summary>
        /// <param name="message">The message.</param>
        private void Execute(HoursMessage message)
        {
            if (message.ErrorMessage != null)
            {
                Log(LogLevel.Warning, message.ErrorMessage);
                return;
            }

            var server  = Repository.Server.GetCurrentServer();
            var context = new MessageContext
            {
                ServerId   = server.Id,
                ServerName = server.Name,
                ServerPort = server.Port
            };

            QueryRunner.SendTextMessage(Repository.Settings.Control.Hours.Target, Repository.Settings.Control.Hours.TargetId > 0 ? Repository.Settings.Control.Hours.TargetId : message.SenderClientId,
                                        Repository.Settings.Control.Hours.TextMessage.ToMessage(context));

            var clientDatabaseTimes = message.AllClients
                                          ? Repository.Client.GetTime(message.TimeSpan.FromDate, message.TimeSpan.ToDate)
                                          : Repository.Client.GetTime(message.ClientDatabaseIds, message.TimeSpan.FromDate, message.TimeSpan.ToDate);
            var clientDatabaseIds = clientDatabaseTimes.OrderByDescending(m => m.Value).Take(Repository.Settings.Control.Hours.Limit).ToList();

            for (int index = 0; index < clientDatabaseIds.Count; index++)
            {
                var clientDatabaseTime = clientDatabaseIds[index];
                var client             = Repository.Client.GetClientDataBaseInfo(clientDatabaseTime.Key);
                if (client != null)
                {
                    var lastSeen       = Repository.Client.GetLastSeen(clientDatabaseTime.Key);
                    var messageContext = new MessageContext
                    {
                        Index            = index + 1,
                        ServerName       = server.Name,
                        ServerId         = server.Id,
                        ServerPort       = server.Port,
                        ClientDatabaseId = client.DatabaseId,
                        ClientNickname   = client.NickName,
                        ClientLastLogin  = client.LastConnected.ToLocalTime().ToString(Repository.Static.DateTimeFormat),
                        ClientLastSeen   = lastSeen != default(DateTime) && lastSeen > DateTime.MinValue
                                                         ? lastSeen.ToLocalTime().ToString(Repository.Static.DateTimeFormat)
                                                         : client.LastConnected.ToLocalTime().ToString(Repository.Static.DateTimeFormat),
                        ClientHours = clientDatabaseTime.Value / 60
                    };

                    QueryRunner.SendTextMessage(Repository.Settings.Control.Hours.Target,
                                                Repository.Settings.Control.Hours.TargetId > 0 ? Repository.Settings.Control.Hours.TargetId : message.SenderClientId,
                                                Repository.Settings.Control.Hours.MessagePerClient.ToMessage(messageContext));
                }
            }

            var senderClientEntry = Repository.Client.GetClientInfo(message.SenderClientId);

            Log(Repository.Settings.Control.Hours,
                string.Format("Client '{1}'(id:{2}) used {0} for clients '{3}'.", Repository.Settings.Control.Hours.Command,
                              senderClientEntry.Nickname, senderClientEntry.DatabaseId,
                              string.Join("', '", message.ClientDatabaseIds.ConvertAll(i => i.ToString(CultureInfo.InvariantCulture)).ToArray())));
        }
        /// <summary>
        /// Executes the Hours message.
        /// </summary>
        /// <param name="message">The message.</param>
        private void Execute(HoursMessage message)
        {
            if (message.ErrorMessage != null)
            {
                Log(LogLevel.Warning, message.ErrorMessage);
                return;
            }

            var server = Repository.Server.GetCurrentServer();
            var context = new MessageContext
            {
                ServerId = server.Id,
                ServerName = server.Name,
                ServerPort = server.Port
            };
            QueryRunner.SendTextMessage(Repository.Settings.Control.Hours.Target, Repository.Settings.Control.Hours.TargetId > 0 ? Repository.Settings.Control.Hours.TargetId : message.SenderClientId,
                                        Repository.Settings.Control.Hours.TextMessage.ToMessage(context));

            var clientDatabaseTimes = message.AllClients
                                          ? Repository.Client.GetTime(message.TimeSpan.FromDate, message.TimeSpan.ToDate)
                                          : Repository.Client.GetTime(message.ClientDatabaseIds, message.TimeSpan.FromDate, message.TimeSpan.ToDate);
            var clientDatabaseIds = clientDatabaseTimes.OrderByDescending(m => m.Value).Take(Repository.Settings.Control.Hours.Limit).ToList();

            for (int index = 0; index < clientDatabaseIds.Count; index++)
            {
                var clientDatabaseTime = clientDatabaseIds[index];
                var client = Repository.Client.GetClientDataBaseInfo(clientDatabaseTime.Key);
                if (client != null)
                {
                    var lastSeen = Repository.Client.GetLastSeen(clientDatabaseTime.Key);
                    var messageContext = new MessageContext
                                             {
                                                 Index = index + 1,
                                                 ServerName = server.Name,
                                                 ServerId = server.Id,
                                                 ServerPort = server.Port,
                                                 ClientDatabaseId = client.DatabaseId,
                                                 ClientNickname = client.NickName,
                                                 ClientLastLogin = client.LastConnected.ToLocalTime().ToString(Repository.Static.DateTimeFormat),
                                                 ClientLastSeen = lastSeen != default(DateTime) && lastSeen > DateTime.MinValue
                                                         ? lastSeen.ToLocalTime().ToString(Repository.Static.DateTimeFormat)
                                                         : client.LastConnected.ToLocalTime().ToString(Repository.Static.DateTimeFormat),
                                                 ClientHours = clientDatabaseTime.Value / 60
                                             };

                    QueryRunner.SendTextMessage(Repository.Settings.Control.Hours.Target,
                                                Repository.Settings.Control.Hours.TargetId > 0 ? Repository.Settings.Control.Hours.TargetId : message.SenderClientId,
                                                Repository.Settings.Control.Hours.MessagePerClient.ToMessage(messageContext));
                }
            }

            var senderClientEntry = Repository.Client.GetClientInfo(message.SenderClientId);
            Log(Repository.Settings.Control.Hours,
                string.Format("Client '{1}'(id:{2}) used {0} for clients '{3}'.", Repository.Settings.Control.Hours.Command,
                              senderClientEntry.Nickname, senderClientEntry.DatabaseId,
                              string.Join("', '", message.ClientDatabaseIds.ConvertAll(i => i.ToString(CultureInfo.InvariantCulture)).ToArray())));
        }