コード例 #1
0
        private void ProcessGymDetails(GymDetailsData gymDetails)
        {
            if (!_alarms.EnableGyms) //GymDetails
            {
                return;
            }

            if (gymDetails == null)
            {
                return;
            }

            if (_alarms.Alarms?.Count == 0)
            {
                return;
            }

            for (var i = 0; i < _alarms.Alarms.Count; i++)
            {
                var alarm    = _alarms.Alarms[i];
                var geofence = InGeofence(alarm.Geofences, new Location(gymDetails.Latitude, gymDetails.Longitude));
                if (geofence == null)
                {
                    //_logger.Info($"[{alarm.Name}] Skipping gym details GymId={gymDetails.GymId}, GymName={gymDetails.GymName} because not in geofence.");
                    continue;
                }

                if (!_gyms.ContainsKey(gymDetails.GymId))
                {
                    _gyms.Add(gymDetails.GymId, gymDetails);
                }

                var oldGym  = _gyms[gymDetails.GymId];
                var changed = oldGym.Team != gymDetails.Team;// || /*oldGym.InBattle != gymDetails.InBattle ||*/ gymDetails.InBattle;
                if (!changed)
                {
                    return;
                }

                if ((alarm.Filters?.Gyms?.UnderAttack ?? false) && !gymDetails.InBattle)
                {
                    //_logger.Info($"[{alarm.Name}] Skipping gym details GymId={gymDetails.GymId}, GymName{gymDetails.GymName}, not under attack.");
                    continue;
                }

                if (alarm.Filters?.Gyms?.Team != gymDetails.Team && alarm.Filters?.Gyms?.Team != PokemonTeam.All)
                {
                    //_logger.Info($"[{alarm.Name}] Skipping gym details GymId={gymDetails.GymId}, GymName{gymDetails.GymName}, not specified team {alarm.Filters.Gyms.Team}.");
                    continue;
                }

                OnGymDetailsAlarmTriggered(gymDetails, alarm);
            }
        }
コード例 #2
0
ファイル: HttpServer.cs プロジェクト: Swiss-Rainbow/WhMgr
        private void ParseGymDetails(dynamic message)
        {
            try
            {
                GymDetailsData gymDetails = JsonConvert.DeserializeObject <GymDetailsData>(Convert.ToString(message));
                if (gymDetails == null)
                {
                    _logger.Error($"Failed to parse gym details webhook object: {message}");
                    return;
                }

                OnGymDetailsReceived(gymDetails);
            }
            catch (Exception ex)
            {
                _logger.Error(ex);
                _logger.Debug(Convert.ToString(message));
            }
        }
コード例 #3
0
ファイル: HttpServer.cs プロジェクト: ArcanoxDragon/WhMgr
        private void ParseGymDetails(dynamic message)
        {
            try
            {
                GymDetailsData gymDetails = JsonConvert.DeserializeObject <GymDetailsData>(Convert.ToString(message));
                if (gymDetails == null)
                {
                    _logger.Error($"Failed to parse gym details webhook object: {message}");
                    return;
                }

                if (_checkForDuplicates)
                {
                    lock (_processedGyms)
                    {
                        if (_processedGyms.ContainsKey(gymDetails.GymId))
                        {
                            if (gymDetails.Team == gymDetails.Team &&
                                gymDetails.SlotsAvailable == gymDetails.SlotsAvailable &&
                                gymDetails.InBattle == gymDetails.InBattle)
                            {
                                // Gym already processed
                                return;
                            }

                            _processedGyms[gymDetails.GymId] = new ScannedGym(gymDetails);
                        }
                        else
                        {
                            _processedGyms.Add(gymDetails.GymId, new ScannedGym(gymDetails));
                        }
                    }
                }

                OnGymDetailsReceived(gymDetails);
            }
            catch (Exception ex)
            {
                _logger.Error(ex);
                _logger.Debug(Convert.ToString(message));
            }
        }
コード例 #4
0
        private void ProcessGymDetails(GymDetailsData gymDetails)
        {
            if (gymDetails == null)
            {
                return;
            }

            Statistics.Instance.TotalReceivedGyms++;

            foreach (var(guildId, alarms) in _alarms)
            {
                if (!alarms.EnableGyms) //GymDetails
                {
                    continue;
                }

                if (alarms.Alarms?.Count == 0)
                {
                    continue;
                }

                var gymDetailsAlarms = alarms.Alarms?.FindAll(x => x.Filters?.Gyms != null);
                for (var j = 0; j < gymDetailsAlarms.Count; j++)
                {
                    var alarm = gymDetailsAlarms[j];
                    if (alarm.Filters.Gyms == null)
                    {
                        continue;
                    }

                    if (!alarm.Filters.Gyms.Enabled)
                    {
                        //_logger.Info($"[{alarm.Name}] Skipping gym GymId={gym.GymId}, Name={gym.Name}: gym filter not enabled.");
                        continue;
                    }

                    var geofence = GeofenceService.GetGeofence(alarm.GeofenceItems, new Location(gymDetails.Latitude, gymDetails.Longitude));
                    if (geofence == null)
                    {
                        //_logger.Info($"[{alarm.Name}] Skipping gym details GymId={gymDetails.GymId}, GymName={gymDetails.GymName}: not in geofence.");
                        continue;
                    }

                    if ((alarm.Filters?.Gyms?.UnderAttack ?? false) && !gymDetails.InBattle)
                    {
                        //_logger.Info($"[{alarm.Name}] Skipping gym details GymId={gymDetails.GymId}, GymName{gymDetails.GymName}, not under attack.");
                        continue;
                    }

                    if (alarm.Filters?.Gyms?.Team != gymDetails.Team && alarm.Filters?.Gyms?.Team != PokemonTeam.All)
                    {
                        //_logger.Info($"[{alarm.Name}] Skipping gym details GymId={gymDetails.GymId}, GymName{gymDetails.GymName}, not specified team {alarm.Filters.Gyms.Team}.");
                        continue;
                    }

                    if (!_gyms.ContainsKey(gymDetails.GymId))
                    {
                        _gyms.Add(gymDetails.GymId, gymDetails);
                        //OnGymDetailsAlarmTriggered(gymDetails, alarm, guildId);
                        //continue;
                    }

                    /*
                     * var oldGym = _gyms[gymDetails.GymId];
                     * var changed = oldGym.Team != gymDetails.Team || gymDetails.InBattle;
                     * if (!changed)
                     *  return;
                     */

                    OnGymDetailsAlarmTriggered(gymDetails, alarm, guildId);
                }
            }
        }
コード例 #5
0
 public void SetGym(string id, GymDetailsData gymDetails)
 {
     _gyms[id] = gymDetails;
 }
コード例 #6
0
 private void OnGymDetailsAlarmTriggered(GymDetailsData gymDetails, AlarmObject alarm, ulong guildId)
 {
     GymDetailsAlarmTriggered?.Invoke(this, new AlarmEventTriggeredEventArgs <GymDetailsData>(gymDetails, alarm, guildId));
 }
コード例 #7
0
ファイル: HttpServer.cs プロジェクト: ArcanoxDragon/WhMgr
 public ScannedGym(GymDetailsData gym)
 {
     Team           = gym.Team;
     SlotsAvailable = gym.SlotsAvailable;
     InBattle       = gym.InBattle;
 }
コード例 #8
0
ファイル: HttpServer.cs プロジェクト: ArcanoxDragon/WhMgr
 private void OnGymDetailsReceived(GymDetailsData gymDetails) => GymDetailsReceived?.Invoke(this, new DataReceivedEventArgs <GymDetailsData>(gymDetails));
コード例 #9
0
 public GymDetailsDataEventArgs(GymDetailsData gymDetails)
 {
     GymDetails = gymDetails;
 }