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