public void InsertOrUpdateBeacon(Beacon beacon) { lock (dbLock) { using (var sqlcon = new SQLiteConnection(DBPath)) { sqlcon.Execute(Constants.DBClauseSyncOff); sqlcon.BeginTransaction(); try { if (sqlcon.Execute("UPDATE Beacon Set DeviceUUID=?," + "DeviceDistance=?,Proximity=?,FirstSeen=?,LastSeen=?,WelcomeMessage=?,SignalStrength=?,Major=?,Minor=? WHERE DeviceUUID=?", beacon.DeviceUUID, beacon.DeviceDistance, beacon.Proximity, beacon.FirstSeen, beacon.LastSeen, beacon.WelcomeMessage, beacon.SignalStrength, beacon.Major, beacon.Minor, beacon.DeviceUUID) == 0) sqlcon.Insert(beacon, typeof(Beacon)); sqlcon.Commit(); } catch (Exception ex) { #if DEBUG Console.WriteLine("Error in DeleteObject - {0}--{1}", ex.Message, ex.StackTrace); #endif sqlcon.Rollback(); } } } }
private void RangingBeaconsInRegion(object s, RangeEventArgs e) { RunOnUiThread(() => textInRange.Text = e.TagBeacons.Count.ToString()); var beac = e.TagBeacons.FirstOrDefault(); if (beac != null) { string prox = ""; RunOnUiThread(() => textUUID.Text = beac.ProximityUuid); switch ((ProximityType)beac.Proximity) { case ProximityType.Immediate: prox = "Very close"; break; case ProximityType.Near: prox = "Close"; break; case ProximityType.Far: prox = "Not too close"; break; } RunOnUiThread(() => { textProximity.Text = prox; textMajor.Text = beac.Major.ToString(); textMinor.Text = beac.Minor.ToString(); textDistance.Text = beac.Accuracy.ToString(); }); var exist = dbm.GetSingleBeacon(beac.ProximityUuid); var beacon = new Beacon { Proximity = beac.Proximity, DeviceUUID = beac.ProximityUuid, SignalStrength = beac.Rssi, Major = beac.Major, Minor = beac.Minor, DeviceDistance = beac.Accuracy, WelcomeMessage = "", LastSeen = DateTime.Now, }; if (exist == null) beacon.FirstSeen = DateTime.Now; dbm.InsertOrUpdateBeacon(beacon); var total = dbm.GetListOfBeacons().Select(t => t.DeviceUUID).Distinct().ToList().Count; RunOnUiThread(() => textNumberSeen.Text = total.ToString()); } }