/// <summary> /// /// </summary> static void BeginOpenAsyncCallback(IAsyncResult ar) { MessageContainerTransportClient client = (MessageContainerTransportClient)ar.AsyncState; try { IMessageContainerTransport serverInterface; lock (client) { serverInterface = client._proxyServerInterface; } if (serverInterface == null) { return; } if (ar.IsCompleted) { client._connectionSessionID = serverInterface.ClientRegister(); SystemMonitor.Report("Client registered sessionID [" + client.ConnectionSessionID + "]"); //// Release this as early as possible, since it might be needed before the event is raised. //client._connectingEvent.Set(); } ((IChannel)serverInterface).EndOpen(ar); } catch (Exception ex) { TracerHelper.Trace("Failed to create proxy interface [" + ex.Message + "]"); } finally {// This will get executed even if the return statement is hit. client._connectingEvent.Set(); } if (client.ConnectionStatusChangedEvent != null) { GeneralHelper.FireAndForget(delegate() { client.ConnectionStatusChangedEvent(true); }); } }
public override bool ArbiterInitialize(Arbiter arbiter) { bool result = base.ArbiterInitialize(arbiter); lock (this) { if (_transportClient != null) { throw new Exception("Already initialized."); } _transportClient = new MessageContainerTransportClient(); _transportClient.ConnectionStatusChangedEvent += new MessageContainerTransportClient.ConnectionStatusChangedDelegate(_transportClient_ConnectionStatusChangedEvent); _transportClient.MessageContainerReceivedEvent += new HandlerDelegate<MessageContainer>(_transport_MessageReceivedEvent); } _transportClient.Initialize(_serverAddressUri); return result; }
/// <summary> /// Helper. /// </summary> static void CreateClientProxyInterface(MessageContainerTransportClient client) { TracerHelper.TraceEntry(); if (client._proxyServerInterface != null && client._connectingEvent.WaitOne(client._defaultConnectionTimeOut) == false) { SystemMonitor.OperationError("Timed out, since another creation is in progress."); return; } SystemMonitor.CheckOperationWarning(string.IsNullOrEmpty(client._connectionSessionID), "Session seems to be active."); client._connectingEvent.Reset(); try { IMessageContainerTransport serverInterface; DuplexChannelFactory <IMessageContainerTransport> channelFactory = null; lock (client) { if (client._proxyServerInterface != null) { ((IChannel)client._proxyServerInterface).Opened -= new EventHandler(client.MessageContainerTransportClient_Opened); ((IChannel)client._proxyServerInterface).Opening -= new EventHandler(client.MessageContainerTransportClient_Opening); ((IChannel)client._proxyServerInterface).Faulted -= new EventHandler(client.MessageContainerTransportClient_Faulted); ((IChannel)client._proxyServerInterface).Closing -= new EventHandler(client.MessageContainerTransportClient_Closing); } client._connectionSessionID = string.Empty; if (client._channelFactory == null) { return; } channelFactory = client._channelFactory; } serverInterface = channelFactory.CreateChannel(); ((IChannel)serverInterface).Opened += new EventHandler(client.MessageContainerTransportClient_Opened); ((IChannel)serverInterface).Opening += new EventHandler(client.MessageContainerTransportClient_Opening); ((IChannel)serverInterface).Faulted += new EventHandler(client.MessageContainerTransportClient_Faulted); ((IChannel)serverInterface).Closing += new EventHandler(client.MessageContainerTransportClient_Closing); lock (client) { client._proxyServerInterface = serverInterface; } ((IChannel)serverInterface).BeginOpen(TimeSpan.FromSeconds(10), BeginOpenAsyncCallback, client); //client._connectionSessionID = serverInterface.ClientRegister(); //SystemMonitor.Report("Client registered sessionID [" + client.ConnectionSessionID + "]"); //// Release this as early as possible, since it might be needed before the event is raised. //client._connectingEvent.Set(); //if (client.ConnectionStatusChangedEvent != null) //{ // GeneralHelper.FireAndForget(delegate() { client.ConnectionStatusChangedEvent(true); }); //} } catch (Exception ex) { TracerHelper.Trace("Failed to create proxy interface [" + ex.Message + "]"); } finally {// Always make sure to leave the baseMethod with a released event. //client._connectingEvent.Set(); } }
/// <summary> /// Helper. /// </summary> static void CreateClientProxyInterface(MessageContainerTransportClient client) { TracerHelper.TraceEntry(); if (client._proxyServerInterface != null && client._connectingEvent.WaitOne(client._defaultConnectionTimeOut) == false) { SystemMonitor.OperationError("Timed out, since another creation is in progress."); return; } SystemMonitor.CheckOperationWarning(string.IsNullOrEmpty(client._connectionSessionID), "Session seems to be active."); client._connectingEvent.Reset(); try { IMessageContainerTransport serverInterface; DuplexChannelFactory<IMessageContainerTransport> channelFactory = null; lock (client) { if (client._proxyServerInterface != null) { ((IChannel)client._proxyServerInterface).Opened -= new EventHandler(client.MessageContainerTransportClient_Opened); ((IChannel)client._proxyServerInterface).Opening -= new EventHandler(client.MessageContainerTransportClient_Opening); ((IChannel)client._proxyServerInterface).Faulted -= new EventHandler(client.MessageContainerTransportClient_Faulted); ((IChannel)client._proxyServerInterface).Closing -= new EventHandler(client.MessageContainerTransportClient_Closing); } client._connectionSessionID = string.Empty; if (client._channelFactory == null) { return; } channelFactory = client._channelFactory; } serverInterface = channelFactory.CreateChannel(); ((IChannel)serverInterface).Opened += new EventHandler(client.MessageContainerTransportClient_Opened); ((IChannel)serverInterface).Opening += new EventHandler(client.MessageContainerTransportClient_Opening); ((IChannel)serverInterface).Faulted += new EventHandler(client.MessageContainerTransportClient_Faulted); ((IChannel)serverInterface).Closing += new EventHandler(client.MessageContainerTransportClient_Closing); lock(client) { client._proxyServerInterface = serverInterface; } ((IChannel)serverInterface).BeginOpen(TimeSpan.FromSeconds(10), BeginOpenAsyncCallback, client); //client._connectionSessionID = serverInterface.ClientRegister(); //SystemMonitor.Report("Client registered sessionID [" + client.ConnectionSessionID + "]"); //// Release this as early as possible, since it might be needed before the event is raised. //client._connectingEvent.Set(); //if (client.ConnectionStatusChangedEvent != null) //{ // GeneralHelper.FireAndForget(delegate() { client.ConnectionStatusChangedEvent(true); }); //} } catch (Exception ex) { TracerHelper.Trace("Failed to create proxy interface [" + ex.Message + "]"); } finally {// Always make sure to leave the baseMethod with a released event. //client._connectingEvent.Set(); } }
public override bool ArbiterUnInitialize() { bool result = base.ArbiterUnInitialize(); lock (this) { if (_transportClient != null) { _transportClient.UnInitialize(); _transportClient = null; } } return result; }