示例#1
0
        public void Run()
        {
            ConsoleOutputLogger.WriteLine("Miataru Thread started");

            miataruclient client = new miataruclient();

            while (!Shutdown)
            {
                try
                {
                    foreach (MiataruAccount Account in MiataruConfiguration.MiataruAccountConfigFile.MiataruAccounts)
                    {
                        // retrieve new data for this account...
                        #region Retrieve Data
                        List <MiataruLocation> Locations = client.GetLastLocationForDevice(Account.MiataruDeviceID, Account.MiataruServerURL);
                        #endregion

                        #region handle retrieved location data
                        if (Locations != null)
                        {
                            // create a MiataruDataObject out of the last known location
                            MiataruDataObject retrievedData = new MiataruDataObject(Account.Name, Locations[0].Device, Locations[0].Timestamp, Locations[0].Latitude, Locations[0].Longitude, Locations[0].HorizontalAccuracy);


                            if (CurrentLocations.ContainsKey(retrievedData.DeviceID))
                            {
                                // check if the coordinates have been updated...
                                MiataruDataObject alreadyStored = CurrentLocations[Account.MiataruDeviceID];

                                if ((alreadyStored.Latitude != retrievedData.Latitude) || (alreadyStored.Longitude != retrievedData.Longitude))
                                {
                                    CurrentLocations[Account.MiataruDeviceID] = retrievedData;
                                    // store to disk
                                    miatarustore.Write(retrievedData.Serialize());
                                    ConsoleOutputLogger.WriteLine("Miataru: " + retrievedData.AccountName + " - " + retrievedData.Latitude + "," + retrievedData.Longitude + "," + retrievedData.AccuracyInMeters);
                                }
                            }
                            else
                            {
                                // it's new! add it!
                                CurrentLocations.Add(retrievedData.DeviceID, retrievedData);
                                miatarustore.Write(retrievedData.Serialize());
                                ConsoleOutputLogger.WriteLine("Miataru: " + retrievedData.AccountName + " - " + retrievedData.Latitude + "," + retrievedData.Longitude + "," + retrievedData.AccuracyInMeters);
                            }
                        }
                        else
                        {
                            ConsoleOutputLogger.WriteLine("Miataru returned NULL for " + Account.MiataruDeviceID + " on " + Account.MiataruServerURL);
                        }
                        #endregion
                    }
                }
                catch (Exception e)
                {
                    ConsoleOutputLogger.WriteLine(e.Message + " - " + e.StackTrace);
                    Thread.Sleep(100);
                }

                Thread.Sleep(MiataruUpdateTime);
            }
        }