Ejemplo n.º 1
0
        [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());
        }
Ejemplo n.º 2
0
        /// <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);
                }
            }
        }
Ejemplo n.º 3
0
 public StreamingServerDatabase(RemoteBinaryStream netStream, SnapServerDatabase <TKey, TValue> .ClientDatabase engine)
 {
     m_stream           = netStream;
     m_sortedTreeEngine = engine;
     m_encodingMethod   = Library.CreateStreamEncoding <TKey, TValue>(EncodingDefinition.FixedSizeCombinedEncoding);
 }