コード例 #1
0
        public MessageContext Create(IInboundMessage message)
        {
            if (message == null) throw new ArgumentNullException(nameof(message));

            _currentContext = new MessageContext(message);

            IdentifyWords();

            IdentifyAreas();
            IdentifyComponents();
            IdentifyComponentStates();
            FilterComponentIds();

            return _currentContext;
        }
コード例 #2
0
        private string ProcessMessage(MessageContext messageContext)
        {
            if (messageContext.GetPatternMatch("Hi").Success)
            {
                return $"{Emoji.VictoryHand} Hi, was kann ich für Dich tun?";
            }

            if (messageContext.GetPatternMatch("Danke").Success)
            {
                return $"{Emoji.Wink} Habe ich doch gerne gemacht.";
            }

            if (messageContext.GetPatternMatch("Wetter").Success)
            {
                return GetWeatherStatus();
            }

            if (messageContext.GetPatternMatch("Fenster").Success)
            {
                return GetWindowStatus();
            }

            if (!messageContext.FilteredComponentIds.Any())
            {
                if (messageContext.IdentifiedComponentIds.Count > 0)
                {
                    return $"{Emoji.Confused} Mit so vielen Anfragen kann ich nicht umgehen. Bitte nenne mir nur eine eindeutige Komponente.";
                }

                return $"{Emoji.Confused} Du musst mir schon einen Sensor oder Aktor nennen.";
            }

            if (messageContext.FilteredComponentIds.Count > 1)
            {
                return $"{Emoji.Flushed} Bitte nicht mehrere Komponenten auf einmal.";
            }

            if (messageContext.FilteredComponentIds.Count == 1)
            {
                var component = _componentService.GetComponent<IComponent>(messageContext.IdentifiedComponentIds.First());

                IActuator actuator = component as IActuator;
                if (actuator != null)
                {
                    return UpdateActuatorState(actuator, messageContext);
                }

                ISensor sensor = component as ISensor;
                if (sensor != null)
                {
                    return GetSensorStatus(sensor);
                }
            }

            return $"{Emoji.Confused} Das habe ich leider nicht verstanden. Bitte stelle Deine Anfrage präziser.";
        }
コード例 #3
0
        private string UpdateActuatorState(IActuator actuator, MessageContext messageContext)
        {
            if (messageContext.IdentifiedComponentStates.Count == 0)
            {
                return $"{Emoji.Confused} Was soll ich damit machen?";
            }

            if (messageContext.IdentifiedComponentStates.Count > 1)
            {
                return $"{Emoji.Confused} Das was du möchtest ist nicht eindeutig.";
            }

            if (!actuator.SupportsState(messageContext.IdentifiedComponentStates.First()))
            {
                return $"{Emoji.Hushed} Das wird nicht funktionieren.";
            }

            actuator.SetState(messageContext.IdentifiedComponentStates.First());
            return $"{Emoji.ThumbsUp} Habe ich erledigt. Kann ich noch etwas für dich tun?";
        }
コード例 #4
0
        private string GenerateDebugOutput(MessageContext messageContext)
        {
            var debugOutput = new StringBuilder();

            debugOutput.AppendLine("<b>DEBUG:</b>");

            debugOutput.AppendLine("<b>[Original message]</b>");
            debugOutput.AppendLine(messageContext.OriginalMessage.Text);

            int counter = 1;
            debugOutput.AppendLine("<b>[Identified components]</b>");
            foreach (var componentId in messageContext.IdentifiedComponentIds)
            {
                debugOutput.AppendLine($"{counter} - {componentId}");
                counter++;
            }

            counter = 1;
            debugOutput.AppendLine("<b>[Identified areas]</b>");
            foreach (var areaId in messageContext.IdentifiedAreaIds)
            {
                debugOutput.AppendLine($"{counter} - {areaId}");
                counter++;
            }

            counter = 1;
            debugOutput.AppendLine("<b>[Filtered components]</b>");
            foreach (var componentId in messageContext.FilteredComponentIds)
            {
                debugOutput.AppendLine($"{counter} - {componentId}");
                counter++;
            }

            counter = 1;
            debugOutput.AppendLine("<b>[Identified component states]</b>");
            foreach (var componentState in messageContext.IdentifiedComponentStates)
            {
                debugOutput.AppendLine($"{counter} - {componentState}");
                counter++;
            }

            return debugOutput.ToString();
        }