Example #1
0
            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);
                }
            }
Example #2
0
 public void Dispose()
 {
     if (_listener != null)
     {
         _listener.Close();
     }
     if (_sender != null)
     {
         _sender.Close();
     }
     if (_ready != null)
     {
         _ready.Close();
     }
     if (_state != SuccessState)
     {
         _state = FailedState;
     }
 }
Example #3
0
 private void Transition(IWorkState <IpcEventMessage> state)
 {
     _state = state.Transition(this);
 }
Example #4
0
 /// <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;
 }