public object InterfaceControl(MigInterfaceCommand cmd) { object response = null; var target = systemModules.Find(m => m.Domain == cmd.Domain && m.Address == cmd.Address); bool isRemoteModule = (target != null && !String.IsNullOrWhiteSpace(target.RoutingNode)); if (isRemoteModule) { try { string domain = cmd.Domain; if (domain.StartsWith("HGIC:")) domain = domain.Substring(domain.IndexOf(".") + 1); string serviceUrl = "http://" + target.RoutingNode + "/api/" + domain + "/" + cmd.Address + "/" + cmd.Command + "/" + cmd.OptionsString; Automation.Scripting.NetHelper netHelper = new Automation.Scripting.NetHelper(this).WebService(serviceUrl); string username = webGateway.GetOption("Username").Value; string password = webGateway.GetOption("Password").Value; if (!String.IsNullOrWhiteSpace(username) && !String.IsNullOrWhiteSpace(password)) { netHelper.WithCredentials(username, password); } response = netHelper.GetData(); } catch (Exception ex) { LogError(Domains.HomeAutomation_HomeGenie, "Interconnection:" + target.RoutingNode, ex.Message, "Exception.StackTrace", ex.StackTrace); } } else { var migInterface = migService.GetInterface(cmd.Domain); if (migInterface != null) { try { response = migInterface.InterfaceControl(cmd); } catch (Exception ex) { LogError(Domains.HomeAutomation_HomeGenie, "InterfaceControl", ex.Message, "Exception.StackTrace", ex.StackTrace); } } // // If the command was not already handled, let automation programs process it if (response == null || String.IsNullOrWhiteSpace(response.ToString())) { response = ProgramDynamicApi.TryApiCall(cmd); } // // Macro Recording // // TODO: find a better solution for this.... // TODO: it was: migService_ServiceRequestPostProcess(this, new ProcessRequestEventArgs(cmd)); // TODO: !IMPORTANT! if (masterControlProgram != null && masterControlProgram.MacroRecorder.IsRecordingEnabled && cmd != null && cmd.Command != null && (cmd.Command.StartsWith("Control.") || (cmd.Command.StartsWith("AvMedia.") && cmd.Command != "AvMedia.Browse" && cmd.Command != "AvMedia.GetUri"))) { masterControlProgram.MacroRecorder.AddCommand(cmd); } } return response; }
public object InterfaceControl(MIGInterfaceCommand cmd) { object response = null; var target = systemModules.Find(m => m.Domain == cmd.Domain && m.Address == cmd.NodeId); bool isRemoteModule = (target != null && !String.IsNullOrWhiteSpace(target.RoutingNode)); if (isRemoteModule) { try { string domain = cmd.Domain; if (domain.StartsWith("HGIC:")) domain = domain.Substring(domain.IndexOf(".") + 1); string serviceUrl = "http://" + target.RoutingNode + "/api/" + domain + "/" + cmd.NodeId + "/" + cmd.Command + "/" + cmd.OptionsString; Automation.Scripting.NetHelper netHelper = new Automation.Scripting.NetHelper(this).WebService(serviceUrl); if (!String.IsNullOrWhiteSpace(systemConfiguration.HomeGenie.UserLogin) && !String.IsNullOrWhiteSpace(systemConfiguration.HomeGenie.UserPassword)) { netHelper.WithCredentials(systemConfiguration.HomeGenie.UserLogin, systemConfiguration.HomeGenie.UserPassword); } response = netHelper.GetData(); } catch (Exception ex) { HomeGenieService.LogEvent(Domains.HomeAutomation_HomeGenie, "Interconnection:" + target.RoutingNode, ex.Message, "Exception.StackTrace", ex.StackTrace); } } else { MIGInterface migInterface = GetInterface(cmd.Domain); if (migInterface != null) { try { response = migInterface.InterfaceControl(cmd); } catch (Exception ex) { HomeGenieService.LogEvent(Domains.HomeAutomation_HomeGenie, "InterfaceControl", ex.Message, "Exception.StackTrace", ex.StackTrace); } } // if (response == null || response.Equals("")) { response = migService.WebServiceDynamicApiCall(cmd); } // let HG post process the local command migService_ServiceRequestPostProcess(null, cmd); } return response; }