/// <summary> /// Forwards all the (if any) messages from the remote dispatcher to the local one. /// </summary> public void ForwardRemoteMessages() { // Avoid to do thread locking as far as possible if (messageWaiting) { List <IMessage> messages; lock (messageBufferLock) { messages = messageBuffer[messageBufferIndex]; messageBufferIndex = (messageBufferIndex == 0 ? 1 : 0); messageWaiting = false; } LocalDispatcher.ForwardSend(messages); } }
public RemoteDispatcherProxy(IDispatcher localDispatcher, ISerializer serializer, IRemoteCommunicator remoteCommunicator) { this.LocalDispatcher = localDispatcher; this.Serializer = serializer; this.RemoteCommunicator = remoteCommunicator; messageBuffer = new List <IMessage> [2]; messageBuffer[0] = new List <IMessage>(); messageBuffer[1] = new List <IMessage>(); messageBufferIndex = 0; messageWaiting = false; messageBufferLock = new object(); outgoingStream = new MemoryStream(); LocalDispatcher.RegisterListenerForAll(this); LocalDispatcher.AddToForwardIgnoreList(this); RemoteCommunicator.RegisterReceiver(ReceiveRemoteMessage); }