internal CharacteristicReturn <CharacteristicBase> Get(string[] data, HomeKitServer server) { var all = server.GetAccessories(); var retCharactersitcs = new List <CharacteristicBase>(); foreach (var s in data) { var split = s.Split("."); var accessoryId = Convert.ToInt32(split[0]); var characteristicId = Convert.ToInt32(split[1]); var accessory = all.SingleOrDefault(a => a.Id == accessoryId); if (accessory == null) { _logger.LogError($"Could not find accessory with id {accessoryId}"); continue; } Characteristic characteristic = null; foreach (var service in accessory.Services) { var c = service.Characteristics.SingleOrDefault(a => a.Id == characteristicId); if (c != null) { characteristic = c; break; } } if (characteristic == null) { _logger.LogError($"Could not find characterstic with id {characteristicId}"); continue; } var baseChar = new CharacteristicBase(characteristic.DefaultType) { Id = characteristic.Id, Value = characteristic.Value ?? CharacteristicBase.GetDefault(characteristic.DefaultType), AccessoryId = accessoryId }; retCharactersitcs.Add(baseChar); } return(new CharacteristicReturn <CharacteristicBase> { Characteristics = retCharactersitcs }); }
public void SendNotification(Characteristic characteristic, List <HapSession> eventBasedNotification) { var baseChar = new CharacteristicBase(characteristic.DefaultType) { Id = characteristic.Id, Value = characteristic.Value, AccessoryId = characteristic.Service.Accessory.Id }; var charReturn = new CharacteristicsList <CharacteristicBase> { Characteristics = new List <CharacteristicBase> { baseChar } }; var data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(charReturn, HapMiddleware.JsonSettings)); var response = GetHttpResponse("EVENT/1.0", "application/hap+json", data); _logger.LogTrace($"Writing {Encoding.UTF8.GetString(response)}"); foreach (var session in eventBasedNotification) { lock (session) { try { var encrypted = EncryptData(response, session); session.Socket.Send(encrypted); } catch (Exception e) { _logger.LogError(e, "Could not set value"); } } } }
public bool SendNotification(Characteristic characteristic, HapSession session) { var baseChar = new CharacteristicBase(characteristic.DefaultType) { Id = characteristic.Id, Value = characteristic.Value, AccessoryId = characteristic.Service.Accessory.Id }; var charReturn = new CharacteristicsList <CharacteristicBase> { Characteristics = new List <CharacteristicBase> { baseChar } }; var data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(charReturn, HapMiddleware.JsonSettings)); var response = HttpServerConnection.GetHttpResponse("EVENT/1.0", "application/hap+json", data, DateTime.Now); _logger.LogTrace($"Writing {Encoding.UTF8.GetString(response)}"); lock (session) { try { var encrypted = HttpServerConnection.EncryptData(response, session); session.Client.Client.Send(encrypted); return(true); } catch (Exception e) { _logger.LogError(e, "Could not set value"); } } return(false); }
public GattCharactersticMismatch(CharacteristicBase concreteCharacteristicBase, UUID intendedCharacterstic) : base($"\"{concreteCharacteristicBase.GetType().Name} : {concreteCharacteristicBase.Uuid}\" is not a viable schema for the charactersitic with the UUID of \"{intendedCharacterstic}\"") { }