Ejemplo n.º 1
0
        public IHttpActionResult Post([FromBody] Schedule schedule)
        {
            SetScheduleEvent scheduleEvent = new SetScheduleEvent(schedule.Hour, schedule.Minute, schedule.ActiveState);

            TemperatureWatcherExecutorCallback(scheduleEvent);
            return(Ok());
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Callback method for WebApi calls
        /// </summary>
        /// <param name="request">The request sent to the webapi</param>
        /// <returns>Returns different responses depending on request, or null if no response is required by the specific operation</returns>
        public IWebApiResponse ReceiveWebApiCall(IWebApiEvent request)
        {
            Trace.WriteLine("[TemperatureWatcher][Execution][Executor][ReceiveWebApiCall] Received WebApi call of type: " + request.GetType().Name);

            //Gets the executing status
            if (typeof(GetExecutingStateEvent) == request.GetType())
            {
                return(new GetExecutingStateResponse(
                           _executableHandler.IsExecuting,
                           _scheduleHandler.Hour,
                           _scheduleHandler.Minute,
                           _scheduleHandler.IsActive));
            }
            //Update schedule
            else if (typeof(SetScheduleEvent) == request.GetType())
            {
                SetScheduleEvent scheduleEvent = (SetScheduleEvent)request;
                if (scheduleEvent.IsActive)
                {
                    _scheduleHandler.UpdateSchedule(scheduleEvent.Hour, scheduleEvent.Minute, DateTime.Now);
                }
                else
                {
                    _scheduleHandler.Inactivate();
                }

                lock (_locker)
                {
                    //Update the file source if using file
                    if (Settings.TimeToLeave.FileSource.Enabled)
                    {
                        using (StreamWriter sw = new StreamWriter(Executor.Settings.TimeToLeave.FileSource.Path, false))
                        {
                            sw.WriteLine(string.Format("{0}:{1};{2}", scheduleEvent.Hour, scheduleEvent.Minute, scheduleEvent.IsActive.ToString().ToLower()));
                        }
                    }
                }
            }
            //Instant run of executable
            else if (typeof(ControlExecutableEvent) == request.GetType())
            {
                ControlExecutableEvent controlExecutableEvent = (ControlExecutableEvent)request;

                if (controlExecutableEvent.SendOnFlags)
                {
                    if (controlExecutableEvent.MinutesToKeepRunning > 0)
                    {
                        _executableHandler.TurnOnExecutable(
                            DateTime.Now.AddMinutes(controlExecutableEvent.MinutesToKeepRunning));
                    }
                    else
                    {
                        _executableHandler.TurnOnExecutable();
                    }
                }
                else
                {
                    _executableHandler.TurnOffExecutable();
                    _scheduleHandler.ResetTimer(true);
                }
            }
            //Get the current temperature
            else if (typeof(GetCurrentTemperatureEvent) == request.GetType())
            {
                return(new GetCurrentTemperatureResponse(_scheduleHandler.CurrentTemperature, _scheduleHandler.CurrentTemperatureUpdated));
            }
            //Throw exception if no recognized event
            else
            {
                throw new ArgumentException("Invalid web api event");
            }

            //Return null as default since all events does not return return data
            return(null);
        }