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); }
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(); }
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); } }
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); } }
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!"); } } }
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)); }