public void ProcessRequest(MigClientRequest request) { var context = request.Context.Data as HttpListenerContext; var requestOrigin = context.Request.RemoteEndPoint.Address.ToString(); var migCommand = request.Command; switch (migCommand.Command) { case "Events.Push": //TODO: implemet security and trust mechanism var stream = request.RequestText; var moduleEvent = JsonConvert.DeserializeObject <ModuleEvent>( stream, new JsonSerializerSettings() { Culture = System.Globalization.CultureInfo.InvariantCulture } ); // prefix remote event domain with HGIC:<remote_node_address>.<domain> moduleEvent.Module.Domain = "HGIC:" + requestOrigin.Replace(".", "_") + "." + moduleEvent.Module.Domain; // var module = homegenie.Modules.Find(delegate(Module o) { return(o.Domain == moduleEvent.Module.Domain && o.Address == moduleEvent.Module.Address); }); if (module == null) { module = moduleEvent.Module; homegenie.Modules.Add(module); } Utility.ModuleParameterSet(module, moduleEvent.Parameter.Name, moduleEvent.Parameter.Value); // "<ip>:<port>" remote endpoint port is passed as the first argument from the remote point itself module.RoutingNode = requestOrigin + (migCommand.GetOption(0) != "" ? ":" + migCommand.GetOption(0) : ""); // homegenie.RaiseEvent( requestOrigin, moduleEvent.Module.Domain, moduleEvent.Module.Address, requestOrigin, moduleEvent.Parameter.Name, moduleEvent.Parameter.Value ); var eventData = new ProgramManager.RoutedEvent() { Sender = requestOrigin, Module = module, Parameter = moduleEvent.Parameter }; ThreadPool.QueueUserWorkItem(new WaitCallback(homegenie.ProgramManager.RoutePropertyChangedEvent), eventData); break; } }
public void RouteModuleEvent(ProgramManager.RoutedEvent eventData) { if (moduleUpdateHandler == null) { return; } var module = new ModuleHelper(homegenie, eventData.Module); var parameter = eventData.Parameter; var callback = new WaitCallback((state) => { try { homegenie.MigService.RaiseEvent( this, Domains.HomeAutomation_HomeGenie, SourceModule.Scheduler, "Scheduler Routed Event", Properties.SchedulerModuleUpdateStart, schedulerItem.Name); moduleUpdateHandler(module, parameter); homegenie.MigService.RaiseEvent( this, Domains.HomeAutomation_HomeGenie, SourceModule.Scheduler, "Scheduler Routed Event", Properties.SchedulerModuleUpdateEnd, schedulerItem.Name); } catch (Exception e) { homegenie.MigService.RaiseEvent( this, Domains.HomeAutomation_HomeGenie, SourceModule.Scheduler, e.Message.Replace('\n', ' ').Replace('\r', ' '), Properties.SchedulerError, schedulerItem.Name); } }); ThreadPool.QueueUserWorkItem(callback); }