示例#1
0
        public Response SaveDataSplit(object json, string name)
        {
            SatellitesBatch satellites = (SatellitesBatch)(cache.Get("satellites"));

            SatelliteData data = new SatelliteData();

            data      = Newtonsoft.Json.JsonConvert.DeserializeObject <SatelliteData>(json.ToString());
            data.Name = name;

            if (satellites != null)
            {
                int index = satellites.Satellites.FindIndex(x => x.Name.ToUpper().Equals(name.ToUpper()));
                if (index > -1)
                {
                    satellites.Satellites.RemoveAt(index);
                }
                satellites.Satellites.Add(data);
            }
            else
            {
                satellites = new SatellitesBatch();
                satellites.Satellites.Add(data);
            }
            cache.Insert("satellites", satellites);

            return(new Response(200, null, null));
        }
示例#2
0
        public void Part1()
        {
            SatelliteData satelliteData = new SatelliteData(StringListRetriever.Retreive("InputList19.txt").ToList());
            List <string> validMessages = ValidSatelliteMessageCreator.CreateList(satelliteData);

            Assert.Equal(142, satelliteData.Messages.Count(x => validMessages.Any(y => y == x)));
        }
示例#3
0
        public void Part1Sample()
        {
            SatelliteData satelliteData = new SatelliteData(GetPart1SampleData());
            List <string> validMessages = ValidSatelliteMessageCreator.CreateList(satelliteData);

            Assert.Equal(8, validMessages.Count);
            Assert.Equal(2, satelliteData.Messages.Count(x => validMessages.Any(y => y == x)));
        }
示例#4
0
            internal static List <string> CreateList(SatelliteData satelliteData)
            {
                List <int> ruleKeys = satelliteData.SubRules.Keys.OrderByDescending(x => x).ToList();

                foreach (int key in ruleKeys)
                {
                    GetMessagesFor(satelliteData.SubRules[key], satelliteData);
                }
                return(satelliteData.SubRules[ruleKeys.Min()].Messages);                //.OrderBy(x => x).ToList();
            }
示例#5
0
 public void SetData(SatelliteData newdata)
 {
     txtPrn.text                  = strPrn + newdata.prn.ToString();
     txtLaunch.text               = strLaunch + newdata.Launch.ToString("yyyy/MM/dd");
     txtOperation.text            = strOperation + newdata.Operation.ToString("yyyy/MM/dd");
     txtAzimuth.text              = strAzimuth + newdata.Azimuth.ToString("0.0") + "°";
     txtElevation.text            = strElevation + newdata.Elevation.ToString("0.0") + "°";
     txtSnr.text                  = strSnr + newdata.snr.ToString("0.00");
     mask.rectTransform.sizeDelta = Vector2.one * 1000;
 }
示例#6
0
 public void SetData(SatelliteData newdata)
 {
     txtPrn.text = strPrn + newdata.prn.ToString();
     txtLaunch.text = strLaunch + newdata.Launch.ToString("yyyy/MM/dd");
     txtOperation.text = strOperation + newdata.Operation.ToString("yyyy/MM/dd");
     txtAzimuth.text = strAzimuth + newdata.Azimuth.ToString("0.0")+"°";
     txtElevation.text = strElevation + newdata.Elevation.ToString("0.0") + "°";
     txtSnr.text = strSnr + newdata.snr.ToString("0.00");
     mask.rectTransform.sizeDelta = Vector2.one * 1000;
 }
示例#7
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="satellite">Satellite</param>
 public FormNORADChild(SatelliteData satellite)
     : this()
 {
     this.satellite             = satellite;
     userControlChild.Satellite = satellite;
     UpdateFormUI();
     FormClosed += (object s, FormClosedEventArgs e) =>
     {
         userControlChild.Delete();
     };
 }
示例#8
0
 public SatelliteData GetSatellite(int id)
 {
     if (!_satelliteMap.TryGetValue(id, out var item))
     {
         _satelliteMap.Add(id, null);
         _satelliteMap[id] = item = SatelliteData.Deserialize(_jsonDatabase.GetSatellite(id), this);
     }
     if (item == null)
     {
         throw new DatabaseException(CircularDependencyText + "Satellite_" + id);
     }
     return(item);
 }
示例#9
0
        private bool ValidateSatelliteData(SatelliteData satellite)
        {
            if (satellite.Distance < 0)
            {
                return(false);
            }
            if (string.Join(string.Empty, satellite.Message).Equals(string.Empty))
            {
                return(false);
            }

            return(true);
        }
示例#10
0
        private static SatelliteData GetData(string prn)
        {
            SatelliteData satellite = Data.FirstOrDefault(d => d.PRN.Equals(prn));

            if (satellite == null)
            {
                return(new SatelliteData()
                {
                    PRN = prn, Name = "Undefined", System = SystemType.Unknown, Launch = null
                });
            }

            return(satellite);
        }
        /// <summary>
        /// This Method is going to include the new information from the specific satellite in the db.
        /// I know it should be also possible to know (and save) which ship has this message been arrived from, then you can have more than one Ship sending.
        /// </summary>
        /// <param name="satelliteData"></param>
        public override async void SaveNewSatelliteData(SatelliteData satelliteData)
        {
            TopSecretSplitItem topSecretSplitItem = CreateDbItemWithSatelliteData(satelliteData);

            var topSecretSplitItemRequest = await _context.TopSecretSplitItems.FindAsync(topSecretSplitItem.id);

            if (topSecretSplitItemRequest != null)
            {
                _context.TopSecretSplitItems.Remove(topSecretSplitItemRequest);
            }
            topSecretSplitItem.createdDate = DateTime.Now;
            _context.TopSecretSplitItems.Add(topSecretSplitItem);

            await _context.SaveChangesAsync();
        }
        public TopSecretSplitItem CreateDbItemWithSatelliteData(SatelliteData satelliteData)
        {
            TopSecretSplitItem topSecretSplitItem = new TopSecretSplitItem();

            topSecretSplitItem.id       = (_rebelSatellites.GetIndexOfSatellite(satelliteData.name) + 1); //Add 1 to this id value to be sure it never reach de 0 value.;
            topSecretSplitItem.name     = satelliteData.name;
            topSecretSplitItem.distance = satelliteData.distance;

            //Merge the
            var result = String.Join(_wordsSeparator, satelliteData.message.ToArray());

            topSecretSplitItem.message = result;

            return(topSecretSplitItem);
        }
        public override async Task <SatelliteData> GetSatelliteDataFromName(string name)
        {
            TopSecretSplitItem topSecretSplitItem = new TopSecretSplitItem();

            topSecretSplitItem.id = (_rebelSatellites.GetIndexOfSatellite(name) + 1); //Add 1 to this id value to be sure it never reach de 0 value.;
            var topSecretSplitItemRequest = await _context.TopSecretSplitItems.FindAsync(topSecretSplitItem.id);

            if (topSecretSplitItemRequest == null)
            {
                throw new Exception("There is not information for satellite" + name);
            }
            List <string> wordsSeparated = new List <string>(topSecretSplitItemRequest.message.Split(_wordsSeparator));

            SatelliteData satelliteData = new SatelliteData(topSecretSplitItemRequest.name, topSecretSplitItemRequest.distance, wordsSeparated);

            return(satelliteData);
        }
示例#14
0
            private static void GetMessagesFor(SatelliteSubRule rule, SatelliteData satelliteData)
            {
                if (rule.Messages.Count > 0)
                {
                    return;
                }
                List <string> messages = new List <string>();

                foreach (var ruleSet in rule.RuleSets)
                {
                    List <int> subRuleKeys = ruleSet.Where(x => satelliteData.SubRules.Keys.Any(y => x == y)).OrderByDescending(x => x).ToList();
                    foreach (int subRuleKey in subRuleKeys)
                    {
                        GetMessagesFor(satelliteData.SubRules[subRuleKey], satelliteData);
                    }
                    List <string> ruleSetMessages = new List <string> {
                        ""
                    };
                    foreach (int ruleKey in ruleSet)
                    {
                        if (satelliteData.SubRules.Keys.Contains(ruleKey))
                        {
                            List <string> newMessages = new List <string>();
                            ruleSetMessages.ForEach(x =>
                            {
                                satelliteData.SubRules[ruleKey].Messages.ForEach(y =>
                                {
                                    newMessages.Add(x + y);
                                });
                            });
                            ruleSetMessages = newMessages;
                        }
                        else
                        {
                            for (int index = 0; index < ruleSetMessages.Count; index++)
                            {
                                ruleSetMessages[index] += satelliteData.CharacterRules[ruleKey].MessageCharacters;
                            }
                        }
                    }
                    messages.AddRange(ruleSetMessages);
                }
                rule.Messages.AddRange(messages.Distinct());
            }
        public string PostTopSecretSplit(string name, dynamic topSecretSplitRequest)
        {
            try
            {
                TopSecretSplitRequestData topSecretSplitRequestData = JsonConvert.DeserializeObject <TopSecretSplitRequestData>(topSecretSplitRequest.ToString());

                //Convert POST input information to the previously defined(in exercice Level 2 "topsecret") SatelliteData class
                SatelliteData satelliteData = new SatelliteData(name, topSecretSplitRequestData.distance, topSecretSplitRequestData.message);

                //This save methos is an interface, it does not depend directly on the database implementation.
                _dbTopSecretSplitController.SaveNewSatelliteData(satelliteData);

                string resVal = "Data received OK from satellite " + name;
                return(resVal);
            }
            catch (Exception ex)
            {
                //fileLogger.Log(ex.Message);
                return(ex.Message);
            }
        }
        public override async Task <AllSatellitesData> GetListOfValidatedSatellitesData()
        {
            AllSatellitesData allSatellitesData = new AllSatellitesData();

            //Here I should ask for the information received from every satellite which has actually received a message
            List <TopSecretSplitItem> topSecretSplitItems = _context.TopSecretSplitItems.ToList(); //At this moment I get all the table because I have only one Imperial Ship to track. But it could be asked as a Query with some particular request (i.e: name of imperial Ship).

            //Here I should validate Date and Time from the last 3 messages.
            ValidateSatellitesData(topSecretSplitItems);

            foreach (TopSecretSplitItem item in topSecretSplitItems)
            {
                //Split the message string that came from the DB message, it was merge in one single string in order to be saved in one register.
                List <string> wordsOfMessage = new List <string>(item.message.Split(_wordsSeparator));

                SatelliteData satellitData = new SatelliteData(item.name, item.distance, wordsOfMessage);
                allSatellitesData.satellites.Add(satellitData);
            }

            return(allSatellitesData);
        }
示例#17
0
        internal void Parse(string text)
        {
            SatelliteData     = new SatelliteData();
            CalculateLab1Data = new CalculateLab1Data();
            var data  = GetData(text);
            int index = 0;

            SatelliteData.PRN  = Convert.ToInt32(data[index++]);
            SatelliteData.Date = new DateTime(
                Convert.ToInt32(data[index++]) + 2000,
                Convert.ToInt32(data[index++]),
                Convert.ToInt32(data[index++]),
                Convert.ToInt32(data[index++]),
                Convert.ToInt32(data[index++]),
                (int)Convert.ToDouble(data[index++]));
            SatelliteData.af0     = Convert.ToDouble(data[index++]);
            SatelliteData.af1     = Convert.ToDouble(data[index++]);
            SatelliteData.af2     = Convert.ToDouble(data[index++]);
            SatelliteData.AOED    = Convert.ToDouble(data[index++]);
            SatelliteData.Crs     = Convert.ToDouble(data[index++]);
            SatelliteData.delta_n = Convert.ToDouble(data[index++]);
            SatelliteData.M0      = Convert.ToDouble(data[index++]);
            SatelliteData.Cuc     = Convert.ToDouble(data[index++]);
            SatelliteData.e       = Convert.ToDouble(data[index++]);
            SatelliteData.Cus     = Convert.ToDouble(data[index++]);
            SatelliteData.sqrt_A  = Convert.ToDouble(data[index++]);
            SatelliteData.toe     = Convert.ToDouble(data[index++]);
            SatelliteData.Cic     = Convert.ToDouble(data[index++]);
            SatelliteData.Omega_0 = Convert.ToDouble(data[index++]);
            SatelliteData.Cis     = Convert.ToDouble(data[index++]);
            SatelliteData.i0      = Convert.ToDouble(data[index++]);
            SatelliteData.Crc     = Convert.ToDouble(data[index++]);
            SatelliteData.omega   = Convert.ToDouble(data[index++]);
            SatelliteData.Omega_  = Convert.ToDouble(data[index++]);
            SatelliteData.IDOT    = Convert.ToDouble(data[index++]);
            index = 32;
            SatelliteData.delta_tg = Convert.ToDouble(data[index++]);
            SatelliteData.AODC     = Convert.ToDouble(data[index++]);
        }
示例#18
0
        public virtual Object CreateDbItemWithSatelliteData(SatelliteData satelliteData)
        {
            Object genericVal = new Object();

            return(genericVal);
        }
示例#19
0
        public virtual async Task <SatelliteData> GetSatelliteDataFromName(string name)
        {
            SatelliteData satelliteData = new SatelliteData();

            return(satelliteData);
        }
示例#20
0
        //public IdbController(Object context)
        //{
        //}

        /// <summary>
        /// This Method is going to include the new information from the specific satellite in the db.
        /// I know it should be also possible to know (and save) which ship has this message been arrived from, then you can have more than one Ship sending.
        /// </summary>
        /// <param name="satelliteData"></param>
        public virtual async void SaveNewSatelliteData(SatelliteData satelliteData)
        {
        }