コード例 #1
0
            public static List <ArmedTrap> ListNearTraps(UserLocationRequest userLocation)
            {
                List <ArmedTrap> result = new List <ArmedTrap>();

                //WHERE
                //                  AT.User_Id <> '{2}'
                //                AND AT.Disarmed = 0

                string query = @"DECLARE @SearchLocation GEOGRAPHY = GEOGRAPHY::STGeomFromText('POINT({0} {1})', 4326);

                            WITH ARMED_TRAPS AS(
	                            SELECT
		                            AT.Id AS 'Id',
		                            AT.Date AS 'Date',
		                            AT.User_Id AS 'UserId',
		                            AT.Latitude AS 'Latitude',
		                            AT.Longitude AS 'Longitude',
		                            AT.NameKey AS 'NameKey',
		                            CAST(@SearchLocation.STDistance(GEOGRAPHY::Point(AT.Latitude , AT.Longitude, 4326)) / 1000 AS INT) AS 'DistanceMeters'
	                            FROM
		                            ArmedTraps AT
	                            WHERE
		                            AT.User_Id <> '{2}'
                                    AND AT.Disarmed = 0
                            )

                            SELECT
	                            *
                            FROM
	                            ARMED_TRAPS
                            WHERE
	                            DistanceMeters < 500
                            ORDER BY
	                            DistanceMeters"    ;

                query = string.Format(query, userLocation.longitude.ToString(CultureInfo.InvariantCulture), userLocation.latitude.ToString(CultureInfo.InvariantCulture), userLocation.userId);

                SqlCommand command = new SqlCommand(query, Settings.connection);

                using (SqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        ArmedTrap armedTrap = new ArmedTrap();

                        armedTrap.Id        = reader.GetGuid(0).ToString();
                        armedTrap.Date      = reader.GetDateTime(1);
                        armedTrap.UserId    = reader.GetGuid(2).ToString();
                        armedTrap.Latitude  = (float)reader.GetDouble(3);
                        armedTrap.Longitude = (float)reader.GetDouble(4);
                        armedTrap.NameKey   = reader.GetString(5);
                        armedTrap.Distance  = reader.GetInt32(6);

                        result.Add(armedTrap);
                    }
                }

                return(result);
            }
コード例 #2
0
        public async Task InsertArmedTrap(ArmedTrapRequest request)
        {
            ArmedTrap armedTrap = Parse(request);

            armedTrap.Date     = DateTime.UtcNow;
            armedTrap.Disarmed = false;

            AppRepository.EntitiesContext.ArmedTraps.Add(armedTrap);

            await AppRepository.EntitiesContext.SaveChangesAsync();
        }
コード例 #3
0
        private ArmedTrap Parse(ArmedTrapRequest request)
        {
            if (request != null)
            {
                ArmedTrap response = new ArmedTrap();

                response.Latitude  = request.Latitude;
                response.Longitude = request.Longitude;
                response.NameKey   = request.NameKey;
                response.User      = AppRepository.EntitiesContext.Users.Find(new Guid(request.UserId));

                return(response);
            }
            else
            {
                return(null);
            }
        }
コード例 #4
0
        private ArmedTrapResult Parse(ArmedTrap armedTrap)
        {
            if (armedTrap != null)
            {
                ArmedTrapResult response = new ArmedTrapResult();

                response.Date      = armedTrap.Date;
                response.Disarmed  = armedTrap.Disarmed;
                response.Id        = armedTrap.Id.ToString();
                response.Latitude  = armedTrap.Latitude;
                response.Longitude = armedTrap.Longitude;
                response.NameKey   = armedTrap.NameKey;
                response.UserId    = armedTrap.User.Id.ToString();
                return(response);
            }
            else
            {
                return(null);
            }
        }
コード例 #5
0
        public static void Process()
        {
            try
            {
                Console.WriteLine("Connecting SQL...");
                Settings.connection = new SqlConnection(ConfigurationManager.ConnectionStrings["MyTrapConnectionString"].ToString());

                Settings.connection.Open();
                Console.WriteLine("Connected SQL!");

                string storageConnectionString = ConfigurationManager.AppSettings["StorageConnectionString"];

                CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnectionString);

                CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

                CloudQueue queue = queueClient.GetQueueReference("positionqueue");

                queue.CreateIfNotExists();

                List <CloudQueueMessage> messages = new List <CloudQueueMessage>();

                for (int cont = 0; cont < Settings.MAX_LOOP_GET_MESSAGES; cont++)
                {
                    Console.WriteLine("Getting messages queue loop:" + (cont + 1));

                    var messagesLoop = queue.GetMessages(Settings.AMOUNT_MESSAGES_CHECK).ToList();

                    if (messagesLoop == null || messagesLoop.Count == 0)
                    {
                        Console.WriteLine("No more messages");
                        break;
                    }
                    else
                    {
                        Console.WriteLine("Messages Received:" + messagesLoop.Count);
                        messages.AddRange(messagesLoop);
                    }
                }

                if (messages != null && messages.Count > 0)
                {
                    foreach (CloudQueueMessage message in messages)
                    {
                        try
                        {
                            string json = message.AsString;

                            UserLocationRequest userLocation = JsonConvert.DeserializeObject <UserLocationRequest>(json);

                            List <ArmedTrap> armedTraps = ArmedTrap.ListNearTraps(userLocation);

                            ArmedTrap nearTrap = armedTraps.FirstOrDefault();

                            if (nearTrap != null && nearTrap.Distance <= 200)
                            {
                                ArmedTrap.DisarmTrap(nearTrap.Id);

                                //ArmedTrap.UpdateUserPoints(userLocation.userId, nearTrap.NameKey);

                                SendApiProcessDisarmedTrap(userLocation.userId, nearTrap.Id);
                            }
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e.Message);
                        }

                        queue.DeleteMessage(message);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            finally
            {
                if (Settings.connection != null)
                {
                    Console.WriteLine("Closing SQL...");
                    Settings.connection.Close();
                    Console.WriteLine("SQL Closed!");
                }
            }
        }
コード例 #6
0
        public async Task <ArmedTrapResult> GetArmedTrapById(string armedTrapId)
        {
            ArmedTrap armedTrap = await AppRepository.EntitiesContext.ArmedTraps.Where(a => a.Id == new Guid(armedTrapId)).Include(a => a.User).FirstOrDefaultAsync();

            return(Parse(armedTrap));
        }