/// <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);
        }