public override int Read(byte[] buffer, int offset, int count)
        {
            if (IsClosed)
            {
                return(-1);
            }

            while (stream.Length == 0)
            {
                ReadLock.Wait <object>(null, (uint)this.ReadTimeout);
                ReadLock = new SyncObject(Client);

                //maybe needs to be remove but still... there was a time out set on it
                if (stream.Length == 0)
                {
                    return(0);
                }
                ReadLock = new SyncObject(Client);
            }

            lock (FlushLock)
            {
                stream.Position = 0;
                int read = stream.Read(buffer, offset, count);

                //need a better method soon
                int    size = (int)(stream.Length - stream.Position);
                byte[] temp = new byte[size];
                stream.Read(temp, 0, size);
                this.stream = new MemoryStream();
                this.stream.Write(temp, 0, temp.Length);

                StreamLock.Pulse();
                return(read);
            }
        }