public void ContinueProcessing(IpcEventMessage msg, WaitHandle handleSignaled) { if (ReferenceEquals(msg._sender, handleSignaled)) { IWorkState <IpcEventMessage> newState = FailedState; try { if (!msg._ready.WaitOne(0, false)) { newState = WaitingReadyState; return; } if (!msg._channel.Registrar.WriteParameters(msg._channel.ChannelName, msg._identity, msg._eventName, msg._arguments)) { return; } bool noListener; string eventId = String.Format("{0}.{1}.{2}", msg._channel.ChannelName, msg._identity, msg._eventName); using (EventWaitHandle signal = new EventWaitHandle(false, EventResetMode.ManualReset, eventId, out noListener)) { if (noListener) { return; } else { msg._ready.Reset(); signal.Set(); newState = SuccessState; } } } finally { msg._sender.ReleaseMutex(); msg.Transition(newState); } } else { if (ReferenceEquals(msg._listener, handleSignaled)) { msg._listener.ReleaseMutex(); } msg.Transition(FailedState); } }
public void Dispose() { if (_listener != null) { _listener.Close(); } if (_sender != null) { _sender.Close(); } if (_ready != null) { _ready.Close(); } if (_state != SuccessState) { _state = FailedState; } }
private void Transition(IWorkState <IpcEventMessage> state) { _state = state.Transition(this); }
/// <summary> /// Initializes a new instance of the <see cref="WorkContext"/> class. /// </summary> /// <param name="state"> /// The state. /// </param> public WorkContext(IWorkState state) { this.State = state; }