public IPCDispatchResult Dispatch(IIPCMessage message)
        {
            string receaverUri = new IPCUri(_receaverID, IPCBaseMessagesQueue.URISuffix).Value;

            _receaverQueue = (IPCBaseMessagesQueue)Activator.GetObject(typeof(IPCBaseMessagesQueue),
                receaverUri);

            // check if message is valid
            if (message == null || !message.IsValid) {
                return IPCDispatchResult.InvalidMessageClass;
            }

            try {
                if (RemotingServices.IsTransparentProxy(_receaverQueue)) {
                    switch (message.MessageType) {
                        case IPCDispatchType.Async:
                            return DoDispatchAsyncMessage(message as IPCBaseAsyncMessage, _receaverQueue);
                        case IPCDispatchType.Sync:
                            return DoDispatchSyncMessage(message as IPCBaseSyncMessage, _receaverQueue);
                        default:
                            break;
                    }
                }
            } catch (Exception ex) {
                if (ex is RemotingException) {
                    return IPCDispatchResult.ReceaverNotExists;
                }
                if (ex is SerializationException) {
                    return IPCDispatchResult.InvalidMessageClass;
                }
                return IPCDispatchResult.UnexpectedFail;
            }
            return IPCDispatchResult.Success;
        }
 private void ListenQueue()
 {
     while (true)
     {
         IIPCMessage message = null;
         lock (_locker) {
             if (_currentQueue.Count() > 0)
             {
                 message = _currentQueue.DequeueMessage();
             }
         }
         if (message != null)
         {
             if (message.MessageType == IPCDispatchType.Sync)
             {
                 using (EventWaitHandle _dispatcherWaitHandle =
                            new EventWaitHandle(false, EventResetMode.AutoReset, message.DispatherID.Value)) {
                     OnReceaveIPCMessage(this, new ReceaveMessageEventArgs(message));
                     _dispatcherWaitHandle.Set();
                 };
             }
             else
             {
                 OnReceaveIPCMessage(this, new ReceaveMessageEventArgs(message));
             }
         }
         else
         {
             _currentWaitHandle.WaitOne();
         }
     }
 }
示例#3
0
 private static void ForwardResponce(IIPCMessage message, IIPCGUID receaver)
 {
     using (BaseIPCDispatcher dispatcher = new BaseIPCDispatcher(receaver)) {
             if (dispatcher.Dispatch(message) == IPCDispatchResult.Success)
                 Console.WriteLine("Message has been forwarded succesfully!");
             else
                 Console.WriteLine("Unable to forward message");
         }
 }
示例#4
0
 private static void ForwardResponce(IIPCMessage message, IIPCGUID receaver)
 {
     using (BaseIPCDispatcher dispatcher = new BaseIPCDispatcher(receaver)) {
         if (dispatcher.Dispatch(message) == IPCDispatchResult.Success)
         {
             Console.WriteLine("Message has been forwarded succesfully!");
         }
         else
         {
             Console.WriteLine("Unable to forward message");
         }
     }
 }
        public IIPCMessage DequeueMessage()
        {
            IIPCMessage tmpResult = tasks.Dequeue();

            if (tmpResult is IPCSyncHelperMessage)
            {
                IPCSyncHelperMessage messageHelper = tmpResult as IPCSyncHelperMessage;
                IIPCMessage          realMessage   = (IIPCMessage)Activator.GetObject(messageHelper.OwnerType,
                                                                                      messageHelper.OwnerFullUri);
                return(realMessage);
            }
            else
            {
                return(tmpResult);
            }
        }
        public IPCDispatchResult Dispatch(IIPCMessage message)
        {
            string receaverUri = new IPCUri(_receaverID, IPCBaseMessagesQueue.URISuffix).Value;

            _receaverQueue = (IPCBaseMessagesQueue)Activator.GetObject(typeof(IPCBaseMessagesQueue),
                                                                       receaverUri);

            // check if message is valid
            if (message == null || !message.IsValid)
            {
                return(IPCDispatchResult.InvalidMessageClass);
            }

            try {
                if (RemotingServices.IsTransparentProxy(_receaverQueue))
                {
                    switch (message.MessageType)
                    {
                    case IPCDispatchType.Async:
                        return(DoDispatchAsyncMessage(message as IPCBaseAsyncMessage, _receaverQueue));

                    case IPCDispatchType.Sync:
                        return(DoDispatchSyncMessage(message as IPCBaseSyncMessage, _receaverQueue));

                    default:
                        break;
                    }
                }
            } catch (Exception ex) {
                if (ex is RemotingException)
                {
                    return(IPCDispatchResult.ReceaverNotExists);
                }
                if (ex is SerializationException)
                {
                    return(IPCDispatchResult.InvalidMessageClass);
                }
                return(IPCDispatchResult.UnexpectedFail);
            }
            return(IPCDispatchResult.Success);
        }
 public void EnqueueMessage(IIPCMessage message)
 {
     tasks.Enqueue(message);
 }
 public void EnqueueMessage(IIPCMessage message)
 {
     tasks.Enqueue(message);
 }
 public ReceaveMessageEventArgs(IIPCMessage message)
 {
     _message = message;
 }
示例#10
0
 public ReceaveMessageEventArgs(IIPCMessage message)
 {
     _message = message;
 }