public void RunHosts() { // You get one shot at startup. Udbus.v4v.v4vConnection connection = TryV4VConnection(Log_io_debug); if (connection == null) // If failed to connect to V4V { // Continue attempting to setup in another thread. this.log.Warning("Failed to connect to V4V. Continuing to establish V4V connection in another thread"); RunHostsInAnotherThread(); } // Ends if failed to connect to V4V else // Else connected to V4V { // Try setting up the service connection. Udbus.Core.ServiceConnectionParams serviceConnectionParams = TryServiceConnectionParams(connection); if (serviceConnectionParams == null) // If failed to set up service connection { RunHostsInAnotherThread(); } // Ends if failed to set up service connection else // Else setup service connection { FinishRunHosts(connection, serviceConnectionParams); } // Ends else setup service connection } // Ends else connected to V4V }
private void InitFields() { this.connection = null; this.serviceConnectionParams = null; this.threadInfo = default(DbusUtils.VisitorThreadInfo); this.threadSignalLoop = null; this.hosts = null; }
private void RunHostsThread() { log.Info("Setting up running hosts in another thread"); Udbus.v4v.v4vConnection connection = null; Udbus.Core.ServiceConnectionParams serviceConnectionParams = null; DbusHosts.GetV4vConnection(out connection, out serviceConnectionParams, Log_io_debug, this.eventStop, log); log.Info("Established service connection"); FinishRunHosts(connection, serviceConnectionParams); log.Info("Finished setting up running hosts in another thread"); }
public static void GetV4vConnection(out Udbus.v4v.v4vConnection connection, out Udbus.Core.ServiceConnectionParams serviceConnectionParams, Udbus.Serialization.UdbusDelegates.D_io_debug io_debug, System.Threading.ManualResetEvent stop, Udbus.Core.Logging.ILog log) { connection = null; serviceConnectionParams = null; while (serviceConnectionParams == null) { using (Udbus.v4v.v4vConnection connectionTemp = KeepTryingToConnectToV4V(io_debug, stop, log)) { if (connectionTemp != null) // If got v4v connection { Udbus.v4v.v4vConnection connectionTemp2 = connectionTemp.Release(); try { Udbus.Core.ServiceConnectionParams serviceConnectionParamsTemp = TryServiceConnectionParams(connectionTemp2, log); if (serviceConnectionParamsTemp == null) // If failed to create service connection { connectionTemp.Swap(connectionTemp2); } // Ends if failed to create service connection else // Else created service connection { serviceConnectionParams = serviceConnectionParamsTemp; connection = connectionTemp2; } // Ends else created service connection } catch (Exception /*ex*/) { connectionTemp.Swap(connectionTemp2); throw; } } // Ends if got v4v connection } // Ends using v4vConnection if (serviceConnectionParams == null) // If failed to create connection { // Wait a while. System.Threading.Thread.Sleep(ConnectionWaitMilliseconds); } // Ends if failed to create connection } // Ends while trying to setup service connection }
internal static com.citrix.xenclient.xenmgr.diag.diagService CreateDbusDiag(out Udbus.Core.ServiceConnectionParams serviceConnectionParams, Udbus.Core.Logging.ILog log, Udbus.Serialization.UdbusDelegates.D_io_debug io_debug) { // Create a V4V connection. Udbus.v4v.v4vConnection connection; System.Threading.ManualResetEvent stop = new System.Threading.ManualResetEvent(false); DbusHosts.GetV4vConnection(out connection, out serviceConnectionParams, io_debug, stop, log ); // Use dbus interface to xenmgr.diag. Udbus.Serialization.DbusConnectionParameters dbusConnectionParameters = com.citrix.xenclient.xenmgr.diag.diagService.DefaultConnectionParameters; dbusConnectionParameters.Destination = "com.citrix.xenclient.xenmgr"; com.citrix.xenclient.xenmgr.diag.diagService diag = com.citrix.xenclient.xenmgr.diag.diagService.Create(serviceConnectionParams, dbusConnectionParameters); return(diag); }
public static void GetV4vConnection(out Udbus.v4v.v4vConnection connection, out Udbus.Core.ServiceConnectionParams serviceConnectionParams, Udbus.Serialization.UdbusDelegates.D_io_debug io_debug, System.Threading.ManualResetEvent stop, Udbus.Core.Logging.ILog log) { connection = null; serviceConnectionParams = null; while (serviceConnectionParams == null) { using (Udbus.v4v.v4vConnection connectionTemp = KeepTryingToConnectToV4V(io_debug, stop, log)) { if (connectionTemp != null) // If got v4v connection { Udbus.v4v.v4vConnection connectionTemp2 = connectionTemp.Release(); try { Udbus.Core.ServiceConnectionParams serviceConnectionParamsTemp = TryServiceConnectionParams(connectionTemp2, log); if (serviceConnectionParamsTemp == null) // If failed to create service connection { connectionTemp.Swap(connectionTemp2); } // Ends if failed to create service connection else // Else created service connection { serviceConnectionParams = serviceConnectionParamsTemp; connection = connectionTemp2; } // Ends else created service connection } catch (Exception /*ex*/) { connectionTemp.Swap(connectionTemp2); throw; } } // Ends if got v4v connection } // Ends using v4vConnection if (serviceConnectionParams == null) // If failed to create connection { // Wait a while. System.Threading.Thread.Sleep(ConnectionWaitMilliseconds); } // Ends if failed to create connection } // Ends while trying to setup service connection }
static private Udbus.Core.ServiceConnectionParams TryServiceConnectionParams(Udbus.v4v.v4vConnection connection, Udbus.Core.Logging.ILog log) { Udbus.Core.ServiceConnectionParams result = null; try { Udbus.Core.ServiceConnectionParams create = new Udbus.Core.ServiceConnectionParams(connection); result = create; } catch (Udbus.Serialization.Exceptions.UdbusAuthorisationException authex) { log.Exception("Authorisation Error creating ServiceConnectionParams. {0}", authex); } catch (Exception ex) { log.Exception("Error creating ServiceConnectionParams. {0}", ex); } return(result); }
private void FinishRunHosts(Udbus.v4v.v4vConnection connection, Udbus.Core.ServiceConnectionParams serviceConnectionParams) { this.connection = connection; this.serviceConnectionParams = serviceConnectionParams; log.Info("Connection helloed with name {0} and signalName {1}", serviceConnectionParams.Name, serviceConnectionParams.SignalName); System.Uri uriBase = new System.Uri(Udbus.WCF.Constants.BaseAddress); new Udbus.WCF.Service.Host.Init.InitHostMakerRegistry(); new global::XenClientGuestService.wcf.Hosts.Init.InitHostMakerRegistry(); Udbus.WCF.Service.Host.RegistryDictionaryHolder registry = Udbus.WCF.Service.Host.HostMakerRegistry.RegistryDictionaryClone; log.Info("Launching hosts..."); // Build all hosts including "special" properties host. ICollection <Udbus.WCF.Service.Host.ServiceHostCreationData> hostdata = Udbus.WCF.Service.Host.HostMakerRegistry.BuildAllHosts( registry.Values , new Udbus.WCF.Host.WCFServiceParams(serviceConnectionParams) , new Uri[] { uriBase } ); System.ServiceModel.NetNamedPipeBinding namedpipeBinding = new System.ServiceModel.NetNamedPipeBinding(); System.ServiceModel.Channels.Binding binding = namedpipeBinding; binding.SendTimeout = TimeSpan.MaxValue; binding.ReceiveTimeout = TimeSpan.MaxValue; foreach (Udbus.WCF.Service.Host.ServiceHostCreationData host in hostdata) { host.Host.AddServiceEndpoint(host.CreationParams.ContractType, binding, host.CreationParams.RelativeName); } this.hosts = hostdata.Select <Udbus.WCF.Service.Host.ServiceHostCreationData, System.ServiceModel.ServiceHost>(Udbus.WCF.Service.Host.ServiceHostCreationData.DataToHost); DbusUtils.RunHosts(hosts); this.threadInfo = RunSignalsAsync(out this.threadSignalLoop, serviceConnectionParams); }
static public ICollection <Udbus.WCF.Service.Host.ServiceHostCreationData> BuildAllHosts(IEnumerable <Udbus.WCF.Service.Host.IMakeServiceHostCreationData> hostMakers, Udbus.Core.ServiceConnectionParams serviceparams, System.Uri[] uriBase, params Type[] exclude) { return(BuildAllHosts(hostMakers, new Udbus.WCF.Host.WCFServiceParams(serviceparams), uriBase, exclude)); }
private void InitFields() { this.connection = null; this.serviceConnectionParams = null; this.threadInfo = default(DbusUtils.VisitorThreadInfo); this.threadSignalLoop = null; this.hosts = null; }
private void FinishRunHosts(Udbus.v4v.v4vConnection connection, Udbus.Core.ServiceConnectionParams serviceConnectionParams) { this.connection = connection; this.serviceConnectionParams = serviceConnectionParams; log.Info("Connection helloed with name {0} and signalName {1}", serviceConnectionParams.Name, serviceConnectionParams.SignalName); System.Uri uriBase = new System.Uri(Udbus.WCF.Constants.BaseAddress); new Udbus.WCF.Service.Host.Init.InitHostMakerRegistry(); new global::XenClientGuestService.wcf.Hosts.Init.InitHostMakerRegistry(); Udbus.WCF.Service.Host.RegistryDictionaryHolder registry = Udbus.WCF.Service.Host.HostMakerRegistry.RegistryDictionaryClone; log.Info("Launching hosts..."); // Build all hosts including "special" properties host. ICollection<Udbus.WCF.Service.Host.ServiceHostCreationData> hostdata = Udbus.WCF.Service.Host.HostMakerRegistry.BuildAllHosts( registry.Values , new Udbus.WCF.Host.WCFServiceParams(serviceConnectionParams) , new Uri[] { uriBase } ); System.ServiceModel.NetNamedPipeBinding namedpipeBinding = new System.ServiceModel.NetNamedPipeBinding(); System.ServiceModel.Channels.Binding binding = namedpipeBinding; binding.SendTimeout = TimeSpan.MaxValue; binding.ReceiveTimeout = TimeSpan.MaxValue; foreach (Udbus.WCF.Service.Host.ServiceHostCreationData host in hostdata) { host.Host.AddServiceEndpoint(host.CreationParams.ContractType, binding, host.CreationParams.RelativeName); } this.hosts = hostdata.Select<Udbus.WCF.Service.Host.ServiceHostCreationData, System.ServiceModel.ServiceHost>(Udbus.WCF.Service.Host.ServiceHostCreationData.DataToHost); DbusUtils.RunHosts(hosts); this.threadInfo = RunSignalsAsync(out this.threadSignalLoop, serviceConnectionParams); }
public WCFServiceParams(Udbus.Core.ServiceConnectionParams ServiceConnectionParams, System.Nullable <Udbus.Serialization.DbusConnectionParameters> DbusConnectionParameters) { this.ServiceConnectionParams = ServiceConnectionParams; this.DbusConnectionParameters = DbusConnectionParameters; }
internal com.citrix.xenclient.xenmgr.diag.diagService CreateDbusDiag(out Udbus.Core.ServiceConnectionParams serviceConnectionParams) { return(CreateDbusDiag(out serviceConnectionParams, this.log, this.Log_Io_Debug)); }
public VisitorThreadInfo(Udbus.Core.ServiceConnectionParams serviceConnectionParams, System.Threading.EventWaitHandle stop) : this(serviceConnectionParams.SignalConnector, serviceConnectionParams.SignalVisitor, serviceConnectionParams.ReceiverPool, stop, DefaultTextWriter) { }
public VisitorThreadInfo(Udbus.Core.ServiceConnectionParams serviceConnectionParams) : this(serviceConnectionParams.SignalConnector, serviceConnectionParams.SignalVisitor, serviceConnectionParams.ReceiverPool, DefaultWaitHandle(), DefaultTextWriter) { }
private static Udbus.Core.ServiceConnectionParams TryServiceConnectionParams(Udbus.v4v.v4vConnection connection, Udbus.Core.Logging.ILog log) { Udbus.Core.ServiceConnectionParams result = null; try { Udbus.Core.ServiceConnectionParams create = new Udbus.Core.ServiceConnectionParams(connection); result = create; } catch (Udbus.Serialization.Exceptions.UdbusAuthorisationException authex) { log.Exception("Authorisation Error creating ServiceConnectionParams. {0}", authex); } catch (Exception ex) { log.Exception("Error creating ServiceConnectionParams. {0}", ex); } return result; }
public static DbusUtils.VisitorThreadInfo RunSignalsAsync(out System.Threading.Thread threadSignalLoop, Udbus.Core.ServiceConnectionParams serviceConnectionParams) { DbusUtils.VisitorThreadInfo threadInfo = new DbusUtils.VisitorThreadInfo(serviceConnectionParams); threadSignalLoop = DbusUtils.LoopSignalsThread(); threadSignalLoop.IsBackground = true; threadSignalLoop.Start(threadInfo); return(threadInfo); }
public WCFServiceParams(Udbus.Core.ServiceConnectionParams ServiceConnectionParams) : this(ServiceConnectionParams, null) { }
static public ICollection <Udbus.WCF.Service.Host.ServiceHostCreationData> BuildAllHosts(Udbus.Core.ServiceConnectionParams serviceparams, System.Uri uriBase, params Type[] exclude) { return(BuildAllHosts(serviceparams, new System.Uri[] { uriBase }, exclude)); }
public WCFServiceParams(Udbus.Core.ServiceConnectionParams ServiceConnectionParams, System.Nullable<Udbus.Serialization.DbusConnectionParameters> DbusConnectionParameters) { this.ServiceConnectionParams = ServiceConnectionParams; this.DbusConnectionParameters = DbusConnectionParameters; }