[MethodImpl(MethodImplOptions.NoOptimization)] //Prevents removing this method as it may appear unused. bool ConnectToDatabase <TKey, TValue>(SnapServerDatabase <TKey, TValue> .ClientDatabase database) where TKey : SnapTypeBase <TKey>, new() where TValue : SnapTypeBase <TValue>, new() { m_stream.Write((byte)ServerResponse.SuccessfullyConnectedToDatabase); m_stream.Flush(); var engine = new StreamingServerDatabase <TKey, TValue>(m_stream, database); return(engine.RunDatabaseLevel()); }
/// <summary> /// This function will verify the connection, create all necessary streams, set timeouts, and catch any exceptions and terminate the connection /// </summary> /// <returns>True if successful, false if needing to exit the socket.</returns> public bool RunDatabaseLevel() { while (true) { ServerCommand command = (ServerCommand)m_stream.ReadUInt8(); switch (command) { case ServerCommand.SetEncodingMethod: try { m_encodingMethod = Library.CreateStreamEncoding <TKey, TValue>(new EncodingDefinition(m_stream)); } catch { m_stream.Write((byte)ServerResponse.UnknownEncodingMethod); m_stream.Flush(); return(false); } m_stream.Write((byte)ServerResponse.EncodingMethodAccepted); m_stream.Flush(); break; case ServerCommand.Read: if (!ProcessRead()) { return(false); } break; case ServerCommand.DisconnectDatabase: m_sortedTreeEngine.Dispose(); m_sortedTreeEngine = null; m_stream.Write((byte)ServerResponse.DatabaseDisconnected); m_stream.Flush(); return(true); case ServerCommand.Write: ProcessWrite(); break; case ServerCommand.CancelRead: break; default: m_stream.Write((byte)ServerResponse.UnknownDatabaseCommand); m_stream.Write((byte)command); m_stream.Flush(); return(false); } } }
public StreamingServerDatabase(RemoteBinaryStream netStream, SnapServerDatabase <TKey, TValue> .ClientDatabase engine) { m_stream = netStream; m_sortedTreeEngine = engine; m_encodingMethod = Library.CreateStreamEncoding <TKey, TValue>(EncodingDefinition.FixedSizeCombinedEncoding); }