예제 #1
0
        public static List <SearchableLocation> GetClosestLocation(Coordinates coors, int count)
        {
            List <SearchableLocation> closests  = new List <SearchableLocation>();
            List <SearchableLocation> locations = new List <SearchableLocation>(Locations); //shallow clone

            for (int i = 0; i < count; i++)
            {
                SearchableLocation close = GetClosestLocation(locations, coors);
                locations.Remove(close);
                closests.Add(close);
            }
            return(closests);
        }
예제 #2
0
        public static SearchableLocation GetClosestLocation(List <SearchableLocation> locations, Coordinates coors)
        {
            SearchableLocation closests         = locations[0];
            double             dx               = Locations[0].Lon - coors.lon;
            double             dy               = Locations[0].Lat - coors.lat;
            double             shortestDistance = Math.Sqrt(dx * dx + dy * dy);

            for (int i = 1; i < locations.Count; i++)
            {
                dx = locations[i].Lon - coors.lon;
                dy = locations[i].Lat - coors.lat;
                double distance = Math.Sqrt(dx * dx + dy * dy);
                if (distance < shortestDistance)
                {
                    shortestDistance = distance;
                    closests         = locations[i];
                }
            }
            return(closests);
        }
예제 #3
0
        public void handle(Messaging message)
        {
            try
            {
                long        id      = message.sender.id;
                PayloadData payload = new PayloadData(message.postback.payload);
                //Console.WriteLine(payload);
                switch (payload.Payload)
                {
                case "GET_STARTED_PAYLOAD":
                    rmanager.SendWelcomeMessage(id, payload.Language);
                    break;

                case "SEND_LOCATION_CHOICE":
                    rmanager.SendLocationsChoice(id, payload.Language);
                    break;

                // tijd keuze extra
                case "SEND_DATE_CHOICE":
                    rmanager.SendDateChoice(message.sender.id, payload.Language);
                    break;

                case "DEVELOPER_DEFINED_DATE_SPECIFIC":
                    rmanager.SendDayOption(message.sender.id, payload.Language);
                    break;

                case "SEND_LANGUAGE_OPTIONS":
                    rmanager.ChangeLanguage(message.sender.id);
                    break;

                case "GET_TOILET":
                    string[]           co       = payload.Value.Split(':');
                    SearchableLocation location = DataConstants.GetClosestsToilet(double.Parse(co[0]), double.Parse(co[1]));
                    // Console.WriteLine($"Closest location found: {location.PrettyName} ");
                    rmanager.SendGenericMessage(LocationFactory.MakeLocationResponse(id, location.Lat, location.Lon, payload.Language));
                    break;

                case "SET_LANGUAGE":
                    rmanager.SendWelcomeMessage(id, payload.Value);
                    break;

                case "GET_USER_LOCATION":
                    if (!string.IsNullOrWhiteSpace(payload.Value) && payload.Value == "true")
                    {
                        TempUserData.Instance.Add(id, payload.Language, true);
                    }
                    else
                    {
                        TempUserData.Instance.Add(id, payload.Language, false);
                    }
                    rmanager.SendGetLocationButton(message.sender.id, payload.Language);
                    break;

                case "DEVELOPER_DEFINED_SEARCHFALSE":
                    rmanager.SendInfoForEnding(message.sender.id, payload.Language);
                    break;

                case "GET_EVENT_HERE_NOW":
                    rmanager.SendLocationQuery(id, int.Parse(payload.Value), payload.Language);
                    break;

                case "DEVELOPER_DEFINED_LOCATION":
                    if (payload.Value != "ALL")
                    {
                        RemoteDataManager.GetInstance().GetEventsHereNow(id, DataConstants.GetLocation(payload.Value).Id, DataConstants.Now, payload.Language);
                    }
                    else
                    {
                        RemoteDataManager.GetInstance().GetEventsNow(id, payload.Language, DataConstants.Now);
                    }
                    break;

                case "DEVELOPER_DEFINED_DAY":
                    rmanager.SendTimePeriod(id, payload.Value, payload.Language);
                    break;

                case "DEVELOPER_DEFINED_COORDINATES":
                    string[] data = payload.Value.Split(':');
                    List <SearchableLocation> locatio = DataConstants.GetClosestLocation(new Coordinates {
                        lat = double.Parse(data[1]), lon = double.Parse(data[0])
                    }, 3);
                    // Console.WriteLine($"Closest location found: {location.PrettyName} ");
                    rmanager.SendLocationResult(id, locatio, payload.Language);
                    break;

                case "DEVELOPER_DEFINED_DESCRIPTION":
                    rmanager.SendTextMessage(id, payload.Value);
                    break;

                case "DEVELOPER_DEFINED_HOURS":
                    string[] dat = payload.Value.Split('|');
                    rmanager.SendHoursChoice(id, dat[0], dat[1], payload.Language);
                    break;

                case "DEVELOPER_DEFINED_HOURS_COMP":
                    string[] da = payload.Value.Split('|');
                    payload.Value = $"{da[1]}{da[0]}:00+02:00";
                    //rmanager.SendTextMessage(id, value);
                    //Console.WriteLine("Datum: " + payload.Value);
                    RemoteDataManager.GetInstance().GetEventsAtTime(id, payload.Value, payload.Language);
                    break;

                case "DEVELOPER_DEFINED_NEXT":
                    // moet nog normaal gezet worden maar voor test gevallen is het deze tijd
                    int pos = payload.Value.IndexOf("-_-");
                    RemoteDataManager.GetInstance().GetNextEvents(payload.Value.Substring(0, pos), payload.Value.Substring(pos + 3), 3, id, payload.Language);
                    break;

                default:
                    //do nothing
                    break;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }