/// <summary> /// Activated plugin and register. /// If you add plug-in type is not registered in ULIB - you need to add plug-in processor (RegisterPluginHandler) before adding the plug-in. /// Registered in ULIB type of plugin is: /// - "UPlugin" /// - "USerialize" /// - "ULanguage"; /// /// </summary> /// <param name="plugin"></param> /// <exception cref="PluginManagerException"></exception> public static void AddPlugin(IUlibPlugin plugin) { plugin.Activate(); switch (plugin.PluginType) { case UPluginType.Plugin: { break; } case UPluginType.Serialize: { Serializer.PluginHandler(plugin); break; } case UPluginType.Language: { LanguageManager.PluginHandler(plugin); break; } case UPluginType.Gateway: { Gateway.PluginHandler(plugin); break; } case UPluginType.File: { FileManager.PluginHandler(plugin); break; } case UPluginType.Quality: { QualityManager.PluginHandler(plugin); break; } default: { if (Handlers.ContainsKey(plugin.PluginType)) { Handlers[plugin.PluginType](plugin); } else { throw new PluginManagerException(string.Format("Not find PluginHandler for type '{0}'. \nPlease use PluginManager.RegisterPluginHandler before. ", plugin.PluginType)); } break; } } if (!Plugins.Contains(plugin)) { Plugins.Add(plugin); } plugin.Added(); }
/*/// <summary> * /// * /// </summary> * /// <param name="targetName"></param> * /// <param name="newTarget"></param> * public static void AddTarget(string targetName, object newTarget) * { * if (!Targets.ContainsKey(targetName)) * Targets.Add(targetName, newTarget); * else * { * RemoveMembers(targetName); * Targets[targetName] = newTarget; * } * FillMembers(targetName, newTarget); * } * * /// <summary> * /// * /// </summary> * /// <param name="targetName"></param> * public static void RemoveTarget(string targetName) * { * if (Targets.ContainsKey(targetName)) * { * RemoveMembers(targetName); * Targets.Remove(targetName); * } * * }*/ /*private static void FillMembers(string targetName, object target) * { * var tp = target.GetType(); * var members = tp.GetMembers(BindingFlags.DeclaredOnly|BindingFlags.GetField|BindingFlags.GetProperty); * /*foreach (var member in members.Where( * member =>member is FieldInfo || (member is PropertyInfo && ((PropertyInfo) member).CanWrite && ((PropertyInfo) member).CanRead))) * Members.Add(targetName + "." + member.Name, member);*/ /*foreach (var member in members) * if(member is FieldInfo || (member is PropertyInfo && ((PropertyInfo)member).CanWrite && ((PropertyInfo)member).CanRead)) * Members.Add(targetName+"."+member.Name,member); * } * * private static void RemoveMembers(string targetName) * { * var removedMembers = (from member in Members * where member.Key == targetName + "." + member.Value.Name * select targetName + "." + member.Value.Name).ToList(); * lock (Members) * foreach (var removedMember in removedMembers) * Members.Remove(removedMember); * }*/ #endregion #region Plugins /// <summary> /// /// </summary> /// <param name="iPlugin"></param> /// <returns></returns> internal static bool PluginHandler(IUlibPlugin iPlugin) { //ULog.Log("PluginHandler"); if (iPlugin != null) { var ioface = (IQualityPlugin)iPlugin; /*var gatewayKey = ioface.Key; * var gatewayObject = ioface.Gateway; * if (gatewayObject != null) * { * gatewayObject.Host = Host; * gatewayObject.Path = Path; * gatewayObject.File = File; * //ULog.Log("PluginHandler " + gatewayKey); * if (!_gateways.ContainsKey(gatewayKey)) * _gateways.Add(gatewayKey, gatewayObject); * else * throw new GatewayException(string.Format("A duplicate key : {0}.", gatewayKey)); * } * else * throw new GatewayException(string.Format("Gateway is null in plugin."));*/ } return(true); }
/// <summary> /// /// </summary> /// <param name="iPlugin"></param> /// <returns></returns> internal static bool PluginHandler(IUlibPlugin iPlugin) { //ULog.Log("PluginHandler"); if (iPlugin != null) { var ioface = (IGatewayPlugin)iPlugin; var gatewayKey = ioface.Key; var gatewayObject = ioface.Gateway; if (gatewayObject != null) { gatewayObject.Host = Host + Path; gatewayObject.File = File; //ULog.Log("PluginHandler " + gatewayKey); if (!Gateways.ContainsKey(gatewayKey)) { Gateways.Add(gatewayKey, gatewayObject); } else { throw new GatewayException(string.Format("A duplicate key : {0}.", gatewayKey)); } } else { throw new GatewayException(string.Format("Gateway is null in plugin.")); } } return(true); }
/// <summary> /// /// </summary> /// <param name="plugin"></param> /// <returns></returns> public static bool PluginExists(IUlibPlugin plugin) { if (Plugins.Contains(plugin)) { return(true); } foreach (var ulibPlugin in Plugins) { ULog.Log(ulibPlugin.PluginType); } return(false); }
/// <summary> /// /// </summary> /// <param name="plugin"></param> /// <returns></returns> internal static bool PluginRemove(IUlibPlugin plugin) { var tp = plugin.GetType(); var ioface = tp.GetInterface("IQualityPlugin"); if (ioface != null) { /*var gatewayKey = tp.GetProperty("Key"); * if (_gateways.ContainsKey(gatewayKey.ToString())) * _gateways.Remove(gatewayKey.ToString());*/ } return(true); }
/// <summary> /// /// </summary> /// <param name="plugin"></param> /// <returns></returns> internal static bool PluginHandler(IUlibPlugin plugin) { var iPlugin = (ISerializePlugin)plugin; var tp = iPlugin.GetType(); var ioface = tp.GetInterface("IObjectSerializer"); if (ioface != null) { var externalPlugin = (IObjectSerializer)iPlugin; var encodeInfo = tp.GetMethod("ObjectEncode"); var encodeDelegate = (ObjectEncoder) Delegate.CreateDelegate(typeof(ObjectEncoder), iPlugin, encodeInfo); TypeEncoders.Add(externalPlugin.ObjectType, encodeDelegate); var decodeInfo = tp.GetMethod("ObjectDecode"); var decodeDelegate = (ObjectDecoder) Delegate.CreateDelegate(typeof(ObjectDecoder), iPlugin, decodeInfo); TypeDecoders.Add(externalPlugin.ObjectCode, decodeDelegate); } var icface = tp.GetInterface("IComponentSerializer"); if (icface != null) { var externalPlugin = (IComponentSerializer)iPlugin; var encodeInfo = tp.GetMethod("ComponentEncode"); var encodeDelegate = (ComponentEncoder) Delegate.CreateDelegate(typeof(ComponentEncoder), iPlugin, encodeInfo); ComponentEncoders.Add(externalPlugin.ClassName, encodeDelegate); var decodeInfo = tp.GetMethod("ComponentDecode"); var decodeDelegate = (ComponentDecoder) Delegate.CreateDelegate(typeof(ComponentDecoder), iPlugin, decodeInfo); ComponentDecoders.Add(externalPlugin.ClassName, decodeDelegate); } return(true); }
/// <summary> /// /// </summary> /// <param name="plugin"></param> /// <exception cref="PluginManagerException"></exception> public static void RemovePlugin(IUlibPlugin plugin) { if (Plugins.Contains(plugin)) { plugin.Remove(); switch (plugin.PluginType) { case UPluginType.Plugin: { break; } case UPluginType.Serialize: { Serializer.PluginRemove(plugin); break; } case UPluginType.Language: { LanguageManager.PluginRemove(plugin); break; } case UPluginType.Gateway: { Gateway.PluginRemove(plugin); break; } default: { if (Removers.ContainsKey(plugin.PluginType)) { Removers[plugin.PluginType](plugin); } else { throw new PluginManagerException(string.Format("Not find Removers for type .{0}. \nPlease use PluginManager.RegisterPluginHandler before. ", plugin.PluginType)); } break; } } } }
/// <summary> /// /// </summary> /// <param name="plugin"></param> /// <returns></returns> internal static bool PluginRemove(IUlibPlugin plugin) { var tp = plugin.GetType(); var ioface = tp.GetInterface("IObjectSerializer"); if (ioface != null) { var externalPlugin = (IObjectSerializer)plugin; if (TypeEncoders.ContainsKey(externalPlugin.ObjectType)) { lock (TypeEncoders) TypeEncoders.Remove(externalPlugin.ObjectType); } if (TypeDecoders.ContainsKey(externalPlugin.ObjectCode)) { lock (TypeDecoders) TypeDecoders.Remove(externalPlugin.ObjectCode); } } var icface = tp.GetInterface("IComponentSerializer"); if (icface != null) { var externalPlugin = (IComponentSerializer)plugin; if (ComponentEncoders.ContainsKey(externalPlugin.ClassName)) { lock (ComponentEncoders) ComponentEncoders.Remove(externalPlugin.ClassName); } if (ComponentDecoders.ContainsKey(externalPlugin.ClassName)) { lock (ComponentDecoders) ComponentDecoders.Remove(externalPlugin.ClassName); } } return(true); }
internal static bool PluginRemove(IUlibPlugin iPlugin) { return(true); }
/// <summary> /// /// </summary> /// <param name="iPlugin"></param> /// <returns></returns> internal static bool PluginHandler(IUlibPlugin iPlugin) { return(true); }