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 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 BaseIPCReceaver() { _ownGUID = new IPCReceaverGUID(); _currentWaitHandle = new EventWaitHandle(false, EventResetMode.AutoReset, _ownGUID.Value); _currentQueue = DoCreateQueue(); // do not use security // ensure that IPC server is alive if (!ChannelServices.RegisteredChannels.Any(i => i.ChannelName == _ownGUID.Value)) { channel = new IpcServerChannel(_ownGUID.Value, _ownGUID.Value); if (!ChannelServices.RegisteredChannels.Any(i => i == channel)) { ChannelServices.RegisterChannel(channel, false); } } RemotingServices.Marshal(_currentQueue, _currentQueue.UriSuffix, typeof(IPCBaseMessagesQueue)); _worker = new Thread(ListenQueue); _worker.Start(); }
internal virtual IPCDispatchResult DoDispatchSyncMessage(IPCBaseSyncMessage message, IPCBaseMessagesQueue receaverQueue) { // ensure that IPC server is alive if (!ChannelServices.RegisteredChannels.Any(i => i.ChannelName == _dispatcherID.Value)) { serverChannel = new IpcServerChannel(_dispatcherID.Value, _dispatcherID.Value); if (!ChannelServices.RegisteredChannels.Any(i => i == serverChannel)) { ChannelServices.RegisterChannel(serverChannel, false); } } // share object RemotingServices.Marshal(message, message.UriSuffix, message.GetType()); try { // notify receaver IIPCGUID helperID = new IPCGUID(message.GetHashCode()); IPCSyncHelperMessage helperMessage = new IPCSyncHelperMessage(new IPCUri(_dispatcherID, message).Value, message.GetType(), helperID); helperMessage.DispatherID = _dispatcherID; message.DispatherID = _dispatcherID; receaverQueue.EnqueueMessage(helperMessage); _receaverWaitHandle.Set(); if (!_dispatcherWaitHandle.WaitOne(message.TimeOut)) return IPCDispatchResult.Timeout; } finally { RemotingServices.Disconnect(message); } return IPCDispatchResult.Success; }
internal virtual IPCDispatchResult DoDispatchAsyncMessage(IPCBaseAsyncMessage message, IPCBaseMessagesQueue receaverQueue) { _receaverQueue.EnqueueMessage(message); _receaverWaitHandle.Set(); return IPCDispatchResult.Success; }
internal virtual IPCDispatchResult DoDispatchSyncMessage(IPCBaseSyncMessage message, IPCBaseMessagesQueue receaverQueue) { // ensure that IPC server is alive if (!ChannelServices.RegisteredChannels.Any(i => i.ChannelName == _dispatcherID.Value)) { serverChannel = new IpcServerChannel(_dispatcherID.Value, _dispatcherID.Value); if (!ChannelServices.RegisteredChannels.Any(i => i == serverChannel)) { ChannelServices.RegisterChannel(serverChannel, false); } } // share object RemotingServices.Marshal(message, message.UriSuffix, message.GetType()); try { // notify receaver IIPCGUID helperID = new IPCGUID(message.GetHashCode()); IPCSyncHelperMessage helperMessage = new IPCSyncHelperMessage(new IPCUri(_dispatcherID, message).Value, message.GetType(), helperID); helperMessage.DispatherID = _dispatcherID; message.DispatherID = _dispatcherID; receaverQueue.EnqueueMessage(helperMessage); _receaverWaitHandle.Set(); if (!_dispatcherWaitHandle.WaitOne(message.TimeOut)) { return(IPCDispatchResult.Timeout); } } finally { RemotingServices.Disconnect(message); } return(IPCDispatchResult.Success); }
internal virtual IPCDispatchResult DoDispatchAsyncMessage(IPCBaseAsyncMessage message, IPCBaseMessagesQueue receaverQueue) { _receaverQueue.EnqueueMessage(message); _receaverWaitHandle.Set(); return(IPCDispatchResult.Success); }