Esempio n. 1
0
        public InterProcessMessage GetMessage()
        {
            string cont = Console.ReadLine();

            if (cont == null)
            {
                return(null);
            }

            return(InterProcessMessage.Parse(cont));
        }
Esempio n. 2
0
        /// <summary>Read a message.</summary>
        /// <returns>Message read or <c>null</c> when disconnected.</returns>
        public InterProcessMessage GetMessage()
        {
            if (!_running)
            {
                return(null);
            }
            if (_messageQueue.Count > 0)
            {
                return(_messageQueue.Dequeue());
            }

            while (_messageQueue.Count == 0)
            {
                int readLen = _ns.Read(_buffer, 0, BufferSize);
                if (readLen == 0)
                {
                    return(null);
                }

                _frag += TcpEncoding.GetString(_buffer, 0, readLen);

                int start = 0;
                int len   = _frag.Length;
                while (start < len)
                {
                    int sepIndex = _frag.IndexOf(PackageSeparator, start);
                    if (sepIndex < 0)
                    {
                        break;
                    }

                    _messageQueue.Enqueue(InterProcessMessage.Parse(_frag.Substring(start, sepIndex - start)));
                    start = sepIndex + 1;
                }

                _frag = _frag.Substring(start, len - start);
            }

            return(_messageQueue.Dequeue());
        }