public async Task<Beacon> Ping(Guid uuid, int major, int minor, int proximity = 0) { var beaconProvider = TypeResolver.IBeaconProvider; var ret = beaconProvider.FindBeacon(uuid, major, minor); using (var db = new Context()) { var client = await db.Clients.FindAsync(ClientID); db.Beacons.Attach(ret); var ping = new BeaconPing { Client = client, Date = DateTime.Now, Beacon = ret, Proximity = proximity }; db.BeaconPings.Add(ping); await db.SaveChangesAsync(); await TypeResolver.IScreenManager.UpdateClient(ping); } return ret; }
public async Task UpdateClient(BeaconPing ping) { var screens = Sockets.Keys.ToList(); var msg = new { msg = "client", clientid = ping.Client.ClientID, uuid = ping.Beacon.UUID, major = ping.Beacon.Major, minor = ping.Beacon.Minor, name = ping.Client.Name ?? "Unnamed" }; foreach (var socket in screens) { WebSocket ws = Sockets[socket]; try { if (ws.State != WebSocketState.Open) { RemoveScreen(socket); continue; } await ws.sendObject(msg); } catch (ObjectDisposedException) { RemoveScreen(socket); } } }