/// <summary>
        /// Reset to initial state
        /// </summary>
        public override void Reset()
        {
            base.Reset();

            // detach events from old instance
            if (recvReader != null)
            {
                recvReader.MessageAvailable -= new MessageBufferEventHandler(OnRecvReaderProcessMessage);
                recvReader.MismatchMessageLengthFound -= new MismatchMessageLengthFoundEventHandler(OnRecvReaderMismatchMessageLengthFound);
                recvReader.SplittedMessageFound -= new SplittedMessageFoundEventHandler(OnRecvReaderSplittedPacketFound);
                recvReader.CompletingSplittedMessage -= new CompletingSplittedMessageEventHandler(OnRecvReaderCompletingSplittedPacket);
            }

            // create new instance
            recvReader = new MessageParser();
            recvReader.MessageAvailable += new MessageBufferEventHandler(OnRecvReaderProcessMessage);
            recvReader.MismatchMessageLengthFound += new MismatchMessageLengthFoundEventHandler(OnRecvReaderMismatchMessageLengthFound);
            recvReader.SplittedMessageFound += new SplittedMessageFoundEventHandler(OnRecvReaderSplittedPacketFound);
            recvReader.CompletingSplittedMessage += new CompletingSplittedMessageEventHandler(OnRecvReaderCompletingSplittedPacket);
        }
        /// <summary>
        /// Reset to initial state
        /// </summary>
        public override void Reset()
        {
            base.Reset();

            // detach events if old instance exists
            if (sendReader != null)
            {
                sendReader.MessageAvailable -= new MessageBufferEventHandler(OnSendReaderProcessMessage);
                sendReader.MismatchMessageLengthFound -= new MismatchMessageLengthFoundEventHandler(OnSendReaderMismatchMessageLengthFound);
                sendReader.SplittedMessageFound -= new SplittedMessageFoundEventHandler(OnSendReaderSplittedMessageFound);
                sendReader.CompletingSplittedMessage -= new CompletingSplittedMessageEventHandler(OnSendReaderCompletingSplittedMessage);
            }

            // initialize a reader for outgoing traffic
            sendReader = new MessageParser();
            sendReader.MessageAvailable += new MessageBufferEventHandler(OnSendReaderProcessMessage);
            sendReader.MismatchMessageLengthFound += new MismatchMessageLengthFoundEventHandler(OnSendReaderMismatchMessageLengthFound);           
            sendReader.SplittedMessageFound += new SplittedMessageFoundEventHandler(OnSendReaderSplittedMessageFound);
            sendReader.CompletingSplittedMessage += new CompletingSplittedMessageEventHandler(OnSendReaderCompletingSplittedMessage);           
        }