/// <summary> /// Load addon config. /// </summary> /// <param name="addon">Addon.</param> public void LoadAddonConfig(IAddonHandler <IConfig> addon) { if (!Directory.Exists(addon.DefaultAddon.AddonPath)) { Directory.CreateDirectory(addon.DefaultAddon.AddonPath); } if (!File.Exists(Path.Combine(addon.DefaultAddon.AddonPath, "config.yml"))) { File.WriteAllText(Path.Combine(addon.DefaultAddon.AddonPath, "config.yml"), Serializer.Serialize(addon.Config)); } var cfg = (IConfig)Deserializer.Deserialize(File.ReadAllText(Path.Combine(addon.DefaultAddon.AddonPath, "config.yml")), addon.Config.GetType()); File.WriteAllText(Path.Combine(addon.DefaultAddon.AddonPath, "config.yml"), Serializer.Serialize(cfg)); addon.Config.CopyProperties(cfg); }
/// <summary> /// Initializes a new instance of the <see cref="Host"/> class. /// </summary> public Host() { Logger = new ConsoleLogger(); Singleton = this; NetDebug.Logger = new NetworkLogger(); if (!File.Exists("config.yml")) { File.WriteAllText("config.yml", Serializer.Serialize(new DedicatedConfig())); } config = Deserializer.Deserialize <DedicatedConfig>(File.ReadAllText("config.yml")); if (!Directory.Exists("addons")) { Directory.CreateDirectory("addons"); } if (!Directory.Exists("servers")) { Directory.CreateDirectory("servers"); } string[] addonsFiles = Directory.GetFiles("addons", "*.dll"); Logger.Info($"Loading {addonsFiles.Length} addons."); foreach (var file in addonsFiles) { Assembly a = Assembly.LoadFrom(file); try { string addonID = string.Empty; foreach (Type t in a.GetTypes().Where(type => !type.IsAbstract && !type.IsInterface)) { if (!t.BaseType.IsGenericType || t.BaseType.GetGenericTypeDefinition() != typeof(NPAddonDedicated <,>)) { continue; } IAddonDedicated <IConfig, IConfig> addon = null; var constructor = t.GetConstructor(Type.EmptyTypes); if (constructor != null) { addon = constructor.Invoke(null) as IAddonDedicated <IConfig, IConfig>; } else { var value = Array.Find(t.GetProperties(BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public), property => property.PropertyType == t)?.GetValue(null); if (value != null) { addon = value as IAddonDedicated <IConfig, IConfig>; } } if (addon == null) { continue; } var addonType = addon.GetType(); var property = addonType.GetProperty("DefaultPath", BindingFlags.Public | BindingFlags.Instance); var field = property.GetBackingField(); field.SetValue(addon, Path.Combine("addons")); property = addonType.GetProperty("AddonPath", BindingFlags.Public | BindingFlags.Instance); field = property.GetBackingField(); field.SetValue(addon, Path.Combine(addon.DefaultPath, addon.AddonName)); property = addonType.GetProperty("Manager", BindingFlags.Public | BindingFlags.Instance); field = property.GetBackingField(); field.SetValue(addon, this); property = addonType.GetProperty("Logger", BindingFlags.Public | BindingFlags.Instance); field = property.GetBackingField(); field.SetValue(addon, Logger); LoadAddonConfig(addon); if (!addon.Config.IsEnabled) { return; } foreach (var type in a.GetTypes().Where(type => !type.IsAbstract && !type.IsInterface)) { if (!type.BaseType.IsGenericType || type.BaseType.GetGenericTypeDefinition() != typeof(NPAddonHandler <>)) { continue; } IAddonHandler <IConfig> addonHandler = null; var constructor2 = type.GetConstructor(Type.EmptyTypes); if (constructor != null) { addonHandler = constructor2.Invoke(null) as IAddonHandler <IConfig>; } else { var value = Array.Find(type.GetProperties(BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public), property => property.PropertyType == type)?.GetValue(null); if (value != null) { addonHandler = value as IAddonHandler <IConfig>; } } if (addonHandler == null) { continue; } var addonType2 = addonHandler.GetType(); var property2 = addonType2.GetProperty("Manager", BindingFlags.Public | BindingFlags.Instance); var field2 = property2.GetBackingField(); field2.SetValue(addonHandler, this); property2 = addonType2.GetProperty("Logger", BindingFlags.Public | BindingFlags.Instance); field2 = property2.GetBackingField(); field2.SetValue(addonHandler, Logger); property2 = addonType2.GetProperty("DefaultAddon", BindingFlags.Public | BindingFlags.Instance); field2 = property2.GetBackingField(); field2.SetValue(addonHandler, addon); LoadAddonConfig(addonHandler); try { addonHandler.OnEnable(); } catch (Exception ex) { Logger.Error($"Failed executing OnEnable in addon handler {addon.AddonName}. {ex.ToString()}"); } if (DedicatedAddonHandlers.ContainsKey(addon.AddonId)) { Logger.Error($"Addon with id \"{addon.AddonId}\" ({addon.AddonName}) is already registered!"); break; } foreach (var Cmdtype in a.GetTypes()) { if (typeof(ICommand).IsAssignableFrom(Cmdtype)) { ICommand cmd = (ICommand)Activator.CreateInstance(Cmdtype); RegisterCommand(addon, cmd); } } AddonAssemblies.Add(a, addon.AddonId); DedicatedAddonHandlers.Add(addon.AddonId, addonHandler); break; } } } catch (Exception ex) { Logger.Error($"Failed loading addon {Path.GetFileNameWithoutExtension(file)}. {ex.ToString()}"); } } Logger.Info($"Starting HOST network..."); StartNetworkHost(); }
public int CompareTo(IAddonHandler <IConfig> other) => 0;
public StartUp(Store::IVideoStoreHandler videoStoreHandler, Store::IPlaylistStoreHandler playlistStoreHandler, Store::IVideoFileStorehandler fileStorehandler, IBackuphandler backuphandler, IAutoLogin autoLogin, ISnackbarHandler snackbarHandler, ILogger logger, ILocalSettingHandler settingHandler, Resume::IStreamResumer streamResumer, NicoIO::INicoDirectoryIO nicoDirectoryIO, IAddonHandler addonHandler) { this._videoStoreHandler = videoStoreHandler; this._playlistStoreHandler = playlistStoreHandler; this._fileStorehandler = fileStorehandler; this._backuphandler = backuphandler; this._autoLogin = autoLogin; this._snackbarHandler = snackbarHandler; this._logger = logger; this._settingHandler = settingHandler; this._streamResumer = streamResumer; this._nicoDirectoryIO = nicoDirectoryIO; this._addonHandler = addonHandler; this.DeleteInvalidbackup(); }
public AddonInstallManager(IAddonInstaller installer, IPermissionsHandler permissionsHandler, IAddonUninstaller uninstaller, IAddonHandler handler, IAddonStoreHandler addonStoreHandler) { this.installer = installer; this.permissionsHandler = permissionsHandler; this.uninstaller = uninstaller; this.handler = handler; this.addonStoreHandler = addonStoreHandler; }