コード例 #1
0
        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
            });
        }
コード例 #2
0
        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");
                    }
                }
            }
        }
コード例 #3
0
ファイル: HttpServer.cs プロジェクト: vsssunder/automatica
        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);
        }
コード例 #4
0
 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}\"")
 {
 }