Exemplo n.º 1
0
 private void AddToSortiePostQueue(WarframeSortie sortie, bool notifyClient, bool sortieHasExpired)
 {
     if (!_sortieMessagePostQueue.Any(x => x.WarframeEvent.GUID == sortie.GUID))
     {
         _sortieMessagePostQueue.Add(new MessageQueueElement <WarframeSortie>(sortie, notifyClient, sortieHasExpired));
     }
 }
Exemplo n.º 2
0
        public static string DiscordMessage(this WarframeSortie sortie, bool isNotification)
        {
            var info          = sortie.VariantDetails;
            var varDest       = sortie.VariantDestinations;
            var varConditions = sortie.VariantConditions;

            var statusMessage = new StringBuilder();

            if (!sortie.IsExpired())
            {
                if (DateTime.Now < sortie.StartTime)
                {
                    statusMessage.Append($"Starts {sortie.StartTime:HH:mm} ({ParseMinutesAsTime(sortie.GetMinutesRemaining(true))})");
                }
                else
                {
                    statusMessage.Append($"Expires {sortie.ExpireTime:HH:mm} ({ParseMinutesAsTime(sortie.GetMinutesRemaining(false))})");
                }
            }
            else
            {
                statusMessage.Append($"Expired ({sortie.ExpireTime:HH:mm})");
            }

            var returnMessage = new StringBuilder();

            if (!isNotification)
            {
                //Stored boss name in Reward property for convenience.
                returnMessage.AppendLine($"{sortie.VariantDetails.First().Reward}");
                returnMessage.AppendLine(statusMessage + Environment.NewLine);
                //Stored condition in parsed reward for convenience also.
                for (var i = 0; i < sortie.VariantDetails.Count; ++i)
                {
                    returnMessage.AppendLine(varDest[i]);
                    returnMessage.AppendLine($"{info[i].Faction} {info[i].MissionType}");
                    returnMessage.AppendLine(varConditions[i] + Environment.NewLine);
                }
            }
            else
            {
                returnMessage.AppendLine("New Sortie");
                returnMessage.AppendLine(sortie.VariantDetails.First().Faction);
            }

            return(returnMessage.ToString());
        }
Exemplo n.º 3
0
        public IEnumerable <WarframeSortie> GetSorties()
        {
            JObject worldState    = _scraper.WorldState;
            var     resultSorties = new List <WarframeSortie>();

            //Find Sorties
            foreach (var jsonSortie in worldState["Sorties"])
            {
                //Check if the sortie has already being tracked
                WarframeSortie currentSortie = _sortieList.Find(x => x.GUID == jsonSortie["_id"]["$oid"].ToString());

                if (currentSortie == null)
                {
                    var id = jsonSortie["_id"]["$oid"].ToString();

                    //Variant details
                    var varDests      = new List <string>();
                    var varMissions   = new List <MissionInfo>();
                    var varConditions = new List <string>();

                    var millisecondsUntilStart  = long.Parse(jsonSortie["Activation"]["$date"]["$numberLong"].ToString()) - long.Parse(worldState["Time"].ToString()) * TIME_TO_LONG_MULTIPLIER;
                    var millisecondsUntilExpire = long.Parse(jsonSortie["Expiry"]["$date"]["$numberLong"].ToString()) - long.Parse(worldState["Time"].ToString()) * TIME_TO_LONG_MULTIPLIER;
                    var startTime  = DateTime.Now.AddMilliseconds(millisecondsUntilStart);
                    var expireTime = DateTime.Now.AddMilliseconds(millisecondsUntilExpire);

                    //If this sortie doesn't exist in the current list, then loop through the variant node to get mission info for all variants
                    foreach (var variant in jsonSortie["Variants"])
                    {
                        using (var unit = new UnitOfWork(new WarframeDataContext()))
                        {
                            var loc = variant["node"].ToString();
                            varDests.Add(unit.WFSolarNodes.GetNodeName(loc));
                            varConditions.Add(unit.WFSorties.GetCondition(variant["modifierType"].ToString()));

                            //Mission type varies depending on the region
                            var    sortieBossID = jsonSortie["Boss"].ToString();
                            string missionName  = variant["missionType"].ToString();

                            var varMission = new MissionInfo(unit.WFSorties.GetFaction(sortieBossID), missionName,
                                                             0, unit.WFSorties.GetBoss(sortieBossID), 0, 0, 0, false);

                            varMissions.Add(varMission);
                        }
                    }

                    if (DateTime.Now < expireTime)
                    {
                        currentSortie = new WarframeSortie(varMissions, id, varDests, varConditions, startTime, expireTime);
                        _sortieList.Add(currentSortie);
#if DEBUG
                        Console.WriteLine("New Sortie Event");
#endif
                    }
                }

                _sortieList.RemoveAll(x => x.ExpireTime < DateTime.Now);

                if ((currentSortie != null) && (currentSortie.ExpireTime > DateTime.Now))
                {
                    resultSorties.Add(currentSortie);
                }
            }
            return(_sortieList);
        }