Ejemplo n.º 1
0
            /// <summary>
            /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
            /// </summary>
            /// <filterpriority>2</filterpriority>
            public void Dispose()
            {
                if (!m_disposed)
                {
                    m_client.m_writer = null;
                    m_disposed        = true;

                    m_encodingMode.WriteEndOfStream(m_stream);
                    m_stream.Flush();
                }
            }
Ejemplo n.º 2
0
        private bool ProcessRead()
        {
            SeekFilterBase <TKey>          key1Parser    = null;
            MatchFilterBase <TKey, TValue> key2Parser    = null;
            SortedTreeEngineReaderOptions  readerOptions = null;

            if (m_stream.ReadBoolean())
            {
                try
                {
                    key1Parser = Library.Filters.GetSeekFilter <TKey>(m_stream.ReadGuid(), m_stream);
                }
                catch
                {
                    m_stream.Write((byte)ServerResponse.UnknownOrCorruptSeekFilter);
                    m_stream.Flush();
                    return(false);
                }
            }
            if (m_stream.ReadBoolean())
            {
                try
                {
                    key2Parser = Library.Filters.GetMatchFilter <TKey, TValue>(m_stream.ReadGuid(), m_stream);
                }
                catch
                {
                    m_stream.Write((byte)ServerResponse.UnknownOrCorruptMatchFilter);
                    m_stream.Flush();
                    return(false);
                }
            }
            if (m_stream.ReadBoolean())
            {
                try
                {
                    readerOptions = new SortedTreeEngineReaderOptions(m_stream);
                }
                catch
                {
                    m_stream.Write((byte)ServerResponse.UnknownOrCorruptReaderOptions);
                    m_stream.Flush();
                    return(false);
                }
            }

            bool needToFinishStream = false;

            try
            {
                using (TreeStream <TKey, TValue> scanner = m_sortedTreeEngine.Read(readerOptions, key1Parser, key2Parser))
                {
                    m_stream.Write((byte)ServerResponse.SerializingPoints);


                    m_encodingMethod.ResetEncoder();
                    //if (m_encodingMethod.SupportsPointerSerialization)
                    //    ProcessReadWithPointers(scanner);
                    //else

                    needToFinishStream = true;
                    bool wasCanceled = !ProcessRead(scanner);
                    m_encodingMethod.WriteEndOfStream(m_stream);
                    needToFinishStream = false;

                    if (wasCanceled)
                    {
                        m_stream.Write((byte)ServerResponse.CanceledRead);
                    }
                    else
                    {
                        m_stream.Write((byte)ServerResponse.ReadComplete);
                    }
                    m_stream.Flush();
                    return(true);
                }
            }
            catch (Exception ex)
            {
                if (needToFinishStream)
                {
                    m_encodingMethod.WriteEndOfStream(m_stream);
                }
                m_stream.Write((byte)ServerResponse.ErrorWhileReading);
                m_stream.Write(ex.ToString());
                m_stream.Flush();
                return(false);
            }
        }