/// <summary> /// Find the object to pass the method call through to. /// </summary> /// <typeparam name="T">Type implementing method.</typeparam> /// <param name="query">Query string in URI format.</param> /// <param name="wcfserviceParams">WCF service connection parameters.</param> /// <param name="services">Object registry.</param> /// <param name="createService1">Function to create Dbus Service taking service connection parameters.</param> /// <param name="createService2">Function to create Dbus Service taking service connection parameters and Dbus connection parameters.</param> /// <param name="defaultConnectionParameters">Default Dbus connection parameters for Dbus Service.</param> /// <returns>Object implementing method.</returns> static public T GetWCFMethodTarget <T>(string query , Udbus.WCF.Host.WCFServiceParams wcfserviceParams , System.Collections.Generic.IDictionary <DbusServiceKey, T> services , System.Func <Udbus.Core.ServiceConnectionParams, T> createService1 , System.Func <Udbus.Core.ServiceConnectionParams, Udbus.Serialization.DbusConnectionParameters, T> createService2 , Udbus.Serialization.ReadonlyDbusConnectionParameters defaultConnectionParameters) { // Look for query parameters. string busnameValue; string pathValue; GetDbusParametersFromQuery(query, out busnameValue, out pathValue); // Lookup existing service. DbusServiceKey find = new DbusServiceKey(busnameValue, pathValue); T result; if (services.TryGetValue(find, out result) == false) // If object not in registry { result = CreateDbusService(wcfserviceParams, createService1, createService2, defaultConnectionParameters, busnameValue, pathValue); // Store new service for future generations. services[find] = result; } // Ends if object not in registry return(result); }
/// <summary> /// Create a Dbus Service based on the supplied parameters. /// </summary> /// <typeparam name="T">Dbus Service type.</typeparam> /// <param name="wcfserviceParams">WCF service connection parameters.</param> /// <param name="createService1">Function to create Dbus Service taking service connection parameters.</param> /// <param name="createService2">Function to create Dbus Service taking service connection parameters and Dbus connection parameters.</param> /// <param name="defaultConnectionParameters">Default Dbus connection parameters for Dbus Service.</param> /// <returns>new Dbus Service instance.</returns> public static T CreateDbusService <T>(Udbus.WCF.Host.WCFServiceParams wcfserviceParams , System.Func <Udbus.Core.ServiceConnectionParams, T> createService1 , System.Func <Udbus.Core.ServiceConnectionParams, Udbus.Serialization.DbusConnectionParameters, T> createService2 , Udbus.Serialization.ReadonlyDbusConnectionParameters defaultConnectionParameters) { return(CreateDbusService(System.ServiceModel.OperationContext.Current.IncomingMessageHeaders.To.Query, wcfserviceParams, createService1, createService2, defaultConnectionParameters)); }
/// <summary> /// Find the object to pass the method call through to, using query information embedded in current WCF method invocation. /// </summary> /// <typeparam name="T">Type implementing method.</typeparam> /// <param name="wcfserviceParams">WCF service connection parameters.</param> /// <param name="services">Object registry.</param> /// <param name="createService1">Function to create Dbus Service taking service connection parameters.</param> /// <param name="createService2">Function to create Dbus Service taking service connection parameters and Dbus connection parameters.</param> /// <param name="defaultConnectionParameters">Default Dbus connection parameters for Dbus Service.</param> /// <returns>Object implementing method.</returns> static public T GetWCFMethodTarget <T>(Udbus.WCF.Host.WCFServiceParams wcfserviceParams , System.Collections.Generic.IDictionary <DbusServiceKey, T> services , System.Func <Udbus.Core.ServiceConnectionParams, T> createService1 , System.Func <Udbus.Core.ServiceConnectionParams, Udbus.Serialization.DbusConnectionParameters, T> createService2 , Udbus.Serialization.ReadonlyDbusConnectionParameters defaultConnectionParameters) { return(GetWCFMethodTarget(System.ServiceModel.OperationContext.Current.IncomingMessageHeaders.To.Query, wcfserviceParams, services, createService1, createService2, defaultConnectionParameters)); }
/// <summary> /// Create a Dbus Service based on the supplied parameters. /// </summary> /// <typeparam name="T">Dbus Service type.</typeparam> /// <param name="query">Query string in URI format.</param> /// <param name="wcfserviceParams">WCF service connection parameters.</param> /// <param name="createService1">Function to create Dbus Service taking service connection parameters.</param> /// <param name="createService2">Function to create Dbus Service taking service connection parameters and Dbus connection parameters.</param> /// <param name="defaultConnectionParameters">Default Dbus connection parameters for Dbus Service.</param> /// <returns>new Dbus Service instance.</returns> public static T CreateDbusService <T>(string query , Udbus.WCF.Host.WCFServiceParams wcfserviceParams , System.Func <Udbus.Core.ServiceConnectionParams, T> createService1 , System.Func <Udbus.Core.ServiceConnectionParams, Udbus.Serialization.DbusConnectionParameters, T> createService2 , Udbus.Serialization.ReadonlyDbusConnectionParameters defaultConnectionParameters) { string busname; string path; GetDbusParametersFromQuery(query, out busname, out path); return(CreateDbusService(wcfserviceParams, createService1, createService2, defaultConnectionParameters, busname, path)); }
/// <summary> /// Create a Dbus Service based on the supplied parameters. /// </summary> /// <typeparam name="T">Dbus Service type.</typeparam> /// <param name="wcfserviceParams">WCF service connection parameters.</param> /// <param name="createService1">Function to create Dbus Service taking service connection parameters.</param> /// <param name="createService2">Function to create Dbus Service taking service connection parameters and Dbus connection parameters.</param> /// <param name="defaultConnectionParameters">Default Dbus connection parameters for Dbus Service.</param> /// <param name="busname">Dbus bus name for Dbus Service.</param> /// <param name="path">Dbus path for Dbus Service.</param> /// <returns>new Dbus Service instance.</returns> public static T CreateDbusService <T>(Udbus.WCF.Host.WCFServiceParams wcfserviceParams , System.Func <Udbus.Core.ServiceConnectionParams, T> createService1 , System.Func <Udbus.Core.ServiceConnectionParams, Udbus.Serialization.DbusConnectionParameters, T> createService2 , Udbus.Serialization.ReadonlyDbusConnectionParameters defaultConnectionParameters , string busname, string path) { T result; if (string.IsNullOrEmpty(busname) && string.IsNullOrEmpty(path)) // If no parameters provided { if (wcfserviceParams.DbusConnectionParameters.HasValue) // If WCF Service was initialised with some settings { // Create Dbus Service with WCF service's dbus connect settings. result = createService2(wcfserviceParams.ServiceConnectionParams, wcfserviceParams.DbusConnectionParameters.Value); } // Ends if WCF Service was initialised with some settings else // Else WCF Service was not initialised with some settings { // Create Dbus Service with default dbus connect settings. result = createService1(wcfserviceParams.ServiceConnectionParams); } // Ends else WCF Service was not initialised with some settings } // Ends if no parameters provided else // Else parameters provided { Udbus.Serialization.DbusConnectionParameters connectionParameters; if (wcfserviceParams.DbusConnectionParameters.HasValue) // If WCF Service was initialised with some settings { // Use WCF service's dbus connect settings as starting point. connectionParameters = wcfserviceParams.DbusConnectionParameters.Value; } // Ends if WCF Service was initialised with some settings else // Else WCF Service was not initialised with some settings { // Use default dbus connect settings as starting point. connectionParameters = defaultConnectionParameters; } // Ends else WCF Service was not initialised with some settings if (!string.IsNullOrEmpty(busname)) // If busname supplied { connectionParameters.Destination = busname; } // Ends if busname supplied if (!string.IsNullOrEmpty(path)) // If path supplied { connectionParameters.Path = path; } // Ends if path supplied result = createService2(wcfserviceParams.ServiceConnectionParams, connectionParameters); } // Ends else parameters provided return(result); }