예제 #1
0
        public static void NodeReturnsDirectiveNameWhenPositionIsWithinDirectiveName()
        {
            var node    = new DirectiveName(42, string.Empty);
            var builder = new TemplateCompletionBuilder(42);

            builder.Visit(node);
            Assert.Same(node, builder.Node);
        }
예제 #2
0
        protected internal override void VisitDirectiveName(DirectiveName node)
        {
            base.VisitDirectiveName(node);

            if (node.Span.Start <= this.position && this.position <= node.Span.End)
            {
                this.Completions = DirectiveDescriptor.GetBuiltInDirectives()
                                   .Where(descriptor => !string.IsNullOrEmpty(descriptor.DisplayName)) // Skip custom directives
                                   .Select(CreateDirectiveCompletion)
                                   .ToList();
                this.Node = node;
            }
        }
예제 #3
0
        private Object HandleGetTargetTemperatureRequest(
            DirectiveName responseName,
            AlexaThermostat device
            )
        {
            TemperatureMode mode = new TemperatureMode()
            {
                Value = device.mode.ToString(),
            };
            GetTargetTemperatureResponsePayload payload;

            if (device.mode == ThermostatMode.OFF)
            {
                payload = new GetTargetTemperatureResponsePayload()
                {
                    TemperatureMode = mode
                };
            }
            else
            {
                payload = new GetTargetTemperatureResponsePayload()
                {
                    TargetTemperature = new TargetTemperature()
                    {
                        Value = device.targetTemperatureC,
                    },
                    TemperatureMode = mode
                };
            }
            return(new Response()
            {
                Header = new Header()
                {
                    Namespace = "Alexa.ConnectedHome.Query",
                    Name = responseName,
                    PayloadVersion = "2",
                    MessageID = Guid.NewGuid(),
                },
                Payload = payload,
            });
        }
예제 #4
0
 private Object HandleGetTemperatureReadingRequest(
     DirectiveName responseName,
     AlexaThermostat device
     )
 {
     return(new Response()
     {
         Header = new Header()
         {
             Namespace = "Alexa.ConnectedHome.Query",
             Name = responseName,
             PayloadVersion = "2",
             MessageID = Guid.NewGuid(),
         },
         Payload = new GetTemperatureReadingResponsePayload()
         {
             TemperatureReading = new TargetTemperature()
             {
                 Value = device.currentTemperatureC,
             }
         },
     });
 }
예제 #5
0
        private Object HandleTemperatureChangeRequest(
            DirectiveName responseName,
            AlexaThermostat device,
            double setTempC
            )
        {
            if (device.mode == ThermostatMode.OFF)
            {
                return(new Response()
                {
                    Header = new Header()
                    {
                        Namespace = "Alexa.ConnectedHome.Control",
                        Name = DirectiveName.UnwillingToSetValueError,
                        PayloadVersion = "2",
                        MessageID = Guid.NewGuid(),
                    },
                    Payload = new UnwillingToSetValueErrorPayload()
                    {
                        ErrorInfo = new ErrorInfo()
                        {
                            Code = "THERMOSTAT_IS_OFF",
                            Description = "Can't complete requested operation because the thermostat is off",
                        }
                    },
                });
            }

            double setTempF      = setTempC * 1.8 + 32.0;
            ushort convertedTemp = Convert.ToUInt16(Math.Round(setTempF * 10.0, 0));

            device.SetTemp(convertedTemp);

            return(new Response()
            {
                Header = new Header()
                {
                    Namespace = "Alexa.ConnectedHome.Control",
                    Name = responseName,
                    PayloadVersion = "2",
                    MessageID = Guid.NewGuid(),
                },
                Payload = new SetTargetTemperatureConfirmationPayload()
                {
                    TargetTemperature = new TargetTemperature()
                    {
                        Value = setTempC,
                    },
                    TemperatureMode = new TemperatureMode()
                    {
                        Value = device.mode.ToString(),
                    },
                    PreviousState = new TargetTemperaturePreviousState()
                    {
                        TargetTemperature = new TargetTemperature()
                        {
                            Value = device.targetTemperatureC,
                        },
                        TemperatureMode = new TemperatureMode()
                        {
                            Value = device.mode.ToString(),
                        }
                    },
                },
            });
        }
예제 #6
0
        private Object HandleDeltaPercentageRequest(JObject request, string eventName, DirectiveName responseType)
        {
            DeltaPercentageRequestPayload payload =
                JsonConvert.DeserializeObject <DeltaPercentageRequestPayload>(
                    request["payload"].ToString()
                    );
            string DeviceID      = payload.Appliance.ApplianceId;
            double setPercent    = payload.DeltaPercentage.Value;
            ushort scaledPercent = Convert.ToUInt16(Math.Round(setPercent * 655.35, 0));

            Appliance  device          = DeviceList.GetDevice(DeviceID);
            ILevelable levelableDevice = device as ILevelable;

            if (levelableDevice != null)
            {
                if (eventName == "raise")
                {
                    levelableDevice.RaiseLevel(scaledPercent);
                }
                else if (eventName == "lower")
                {
                    levelableDevice.LowerLevel(scaledPercent);
                }
            }

            return(new Response()
            {
                Header = new Header()
                {
                    Namespace = "Alexa.ConnectedHome.Control",
                    Name = responseType,
                    PayloadVersion = "2",
                    MessageID = Guid.NewGuid(),
                },
                Payload = new Dictionary <string, string> {
                },
            });
        }