public override void Load(Stream stream) { TestForEditable(); byte version = stream.ReadNextByte(); switch (version) { case 1: int cnt = stream.ReadInt32(); m_databases.Clear(); while (cnt > 0) { cnt--; var database = new ServerDatabaseSettings(); database.Load(stream); m_databases.Add(database); } cnt = stream.ReadInt32(); m_listeners.Clear(); while (cnt > 0) { cnt--; var listener = new SnapSocketListenerSettings(); listener.Load(stream); m_listeners.Add(listener); } break; default: throw new VersionNotFoundException("Unknown Version Code: " + version); } }
/// <summary> /// /// </summary> /// <param name="settings"></param> public SnapServerDatabase(ServerDatabaseSettings settings) { if (settings == null) { throw new ArgumentNullException("settings"); } m_settings = settings.CloneReadonly(); m_settings.Validate(); m_tmpKey = new TKey(); m_tmpValue = new TValue(); m_supportedStreamingMethods = settings.StreamingEncodingMethods.ToList(); m_info = new DatabaseInfo(m_settings.DatabaseName, m_tmpKey, m_tmpValue, m_supportedStreamingMethods); using (Logger.AppendStackMessages(GetSourceDetails())) { m_archiveList = new ArchiveList <TKey, TValue>(m_settings.ArchiveList); m_rolloverLog = new RolloverLog(m_settings.RolloverLog, m_archiveList); if (m_settings.SupportsWriting) { m_archiveWriter = new WriteProcessor <TKey, TValue>(m_archiveList, m_settings.WriteProcessor, m_rolloverLog); } } }
/// <summary> /// Creates a new server database from the provided config. /// </summary> /// <param name="databaseConfig"></param> /// <param name="parent">the parent LogSource</param> /// <returns></returns> public static SnapServerDatabaseBase CreateDatabase(ServerDatabaseSettings databaseConfig) { var keyType = Library.GetSortedTreeType(databaseConfig.KeyType); var valueType = Library.GetSortedTreeType(databaseConfig.ValueType); var type = typeof(SnapServerDatabaseBase); var method = type.GetMethod("CreateDatabase", BindingFlags.NonPublic | BindingFlags.Static); var reflectionMethod = method.MakeGenericMethod(keyType, valueType); return((SnapServerDatabaseBase)reflectionMethod.Invoke(null, new object[] { databaseConfig })); }
/// <summary> /// Adds a database to the server /// </summary> /// <param name="databaseConfig"></param> public void AddDatabase(ServerDatabaseSettings databaseConfig) { if ((object)databaseConfig == null) { throw new ArgumentNullException("databaseConfig"); } //Pre check to prevent loading a database with the same name twice. lock (m_syncRoot) { if (m_databases.ContainsKey(databaseConfig.DatabaseName.ToUpper())) { Log.Publish(MessageLevel.Error, "Database Already Exists", "Adding a database that already exists in the server: " + databaseConfig.DatabaseName); return; } } SnapServerDatabaseBase database; try { using (Logger.AppendStackMessages(Log.InitialStackMessages)) { database = SnapServerDatabaseBase.CreateDatabase(databaseConfig); } } catch (Exception ex) { Log.Publish(MessageLevel.Critical, "Database failed to load.", databaseConfig.DatabaseName, null, ex); return; } string databaseName = database.Info.DatabaseName.ToUpper(); lock (m_syncRoot) { if (m_databases.ContainsKey(databaseName)) { Log.Publish(MessageLevel.Error, "Database Already Exists", "Adding a database that already exists in the server: " + databaseName); database.Dispose(); } else { Log.Publish(MessageLevel.Info, "Added Database", "Adding a database to the server: " + databaseName); m_databases.Add(database.Info.DatabaseName.ToUpper(), database); } } }
[MethodImpl(MethodImplOptions.NoOptimization)] //Prevents removing this method as it may appear unused. static SnapServerDatabaseBase CreateDatabase <TKey, TValue>(ServerDatabaseSettings databaseConfig) where TKey : SnapTypeBase <TKey>, new() where TValue : SnapTypeBase <TValue>, new() { return(new SnapServerDatabase <TKey, TValue>(databaseConfig)); }