public static bool RealRemove(List <string> packageList) { //start recorder var recorder = new Record(); recorder.Init(); foreach (var item in packageList) { Console.WriteLine(I18N.Core("Remove_Removing", item)); var res = ScriptInvoker.Core(Information.WorkPath.Enter("cache").Enter("installed").Enter(item).Path, ScriptInvoker.InvokeMethod.Remove, ""); if (!res.status) { ConsoleAssistance.WriteLine(I18N.Core("General_ScriptError"), ConsoleColor.Red); ConsoleAssistance.WriteLine(res.desc, ConsoleColor.Red); return(false); } Directory.Delete(Information.WorkPath.Enter("cache").Enter("installed").Enter(item).Path, true); recorder.Remove(item); Console.WriteLine(I18N.Core("Remove_Success", item)); } recorder.Save(); return(true); }
public static void Core(string packageName, string parameter) { if (!packageName.Contains("@")) { ConsoleAssistance.WriteLine(I18N.Core("General_SpecificVersion"), ConsoleColor.Red); return; } //get info var installFolder = new DirectoryInfo(Information.WorkPath.Enter("cache").Enter("installed").Path); var directoryList = installFolder.GetDirectories($"{packageName}"); if (directoryList.Count() == 0) { ConsoleAssistance.WriteLine(I18N.Core("General_NoMatchedPackage"), ConsoleColor.Red); return; } var finalFolder = directoryList[0]; var res = ScriptInvoker.Core(finalFolder.FullName, ScriptInvoker.InvokeMethod.Deploy, parameter); if (!res.status) { ConsoleAssistance.WriteLine(I18N.Core("General_ScriptError"), ConsoleColor.Red); ConsoleAssistance.WriteLine(res.desc, ConsoleColor.Red); return; } ConsoleAssistance.WriteLine(I18N.Core("General_AllOperationDown"), ConsoleColor.Yellow); }
public void InvokeProcedure <T0, T1>(string methodName, T0 arg0, T1 arg1) { if (Instance == null) { return; } try { ScriptInvoker <T0, T1> .Procedure(Instance, methodName, arg0, arg1); } catch (Exception e) { ReportError($"InvokeProcedure('{methodName}', {typeof(T0).FullName}, {typeof(T1).FullName})", e); } }
public T1 InvokeFunction <T0, T1>(string methodName, T0 arg0) { if (Instance == null) { throw new ScriptInvocationException($"Script '{Name}' is not initialized."); } try { return(ScriptInvoker <T0, T1> .Function(Instance, methodName, arg0)); } catch (Exception e) { throw new ScriptInvocationException($"Function '{Name}::{methodName}({typeof(T0).FullName})' threw an exception.", e); } }
public T0 InvokeFunction <T0>(string methodName) { if (Instance == null) { throw new ScriptInvocationException($"Script '{Name}' is not initialized."); } try { return(ScriptInvoker <T0> .Function(Instance, methodName)); } catch (Exception e) { throw new ScriptInvocationException($"Function '{Name}::{methodName}()' threw an exception.", e); } }
public void InvokeProcedure(string methodName) { if (Instance == null) { return; } try { ScriptInvoker.Procedure(Instance, methodName); } catch (Exception e) { ReportError($"InvokeProcedure('{methodName}')", e); } }
public override bool TryCreate(JObject function, out FunctionDescriptor functionDescriptor) { functionDescriptor = null; string sourceFileName = (string)function["source"]; string name = (string)function["name"]; if (string.IsNullOrEmpty(name)) { // if a method name isn't explicitly provided, derive it // from the script file name name = Path.GetFileNameWithoutExtension(sourceFileName); name = name.Substring(0, 1).ToUpper() + name.Substring(1); } string scriptFilePath = Path.Combine(_applicationRoot, "scripts", sourceFileName); ScriptInvoker invoker = new ScriptInvoker(scriptFilePath); JObject trigger = (JObject)function["trigger"]; string triggerType = (string)trigger["type"]; string parameterName = (string)trigger["name"]; if (string.IsNullOrEmpty(parameterName)) { // default the name to simply 'input' trigger["name"] = "input"; } ParameterDescriptor triggerParameter = null; switch (triggerType) { case "queue": triggerParameter = ParseQueueTrigger(trigger); break; case "blob": triggerParameter = ParseBlobTrigger(trigger); break; case "serviceBus": triggerParameter = ParseServiceBusTrigger(trigger); break; case "timer": triggerParameter = ParseTimerTrigger(trigger, typeof(TimerInfo)); break; case "webHook": triggerParameter = ParseWebHookTrigger(trigger); break; } Collection<ParameterDescriptor> parameters = new Collection<ParameterDescriptor>(); parameters.Add(triggerParameter); // Add a TraceWriter for logging ParameterDescriptor textWriter = new ParameterDescriptor { Name = "log", Type = typeof(TextWriter) }; parameters.Add(textWriter); functionDescriptor = new FunctionDescriptor { Name = name, Invoker = invoker, Parameters = parameters }; return true; }
/// <summary> /// 指定されたファイルを読み込んでスクリプトをコンパイルします. /// </summary> /// <param name="file">スクリプトを発動するのに使用するコンテナを返します.</param> /// <returns></returns> #if ENABLE_SCRIPT public ScriptInvoker loadScript( String file ) { ScriptInvoker ret = new ScriptInvoker(); ret.ScriptFile = file; ret.fileTimestamp = PortUtil.getFileLastModified( file ); // スクリプトの記述のうち、以下のリストに当てはまる部分は空文字に置換される string config_file = ScriptServer.configFileNameFromScriptFileName( file ); string script = ""; using ( StreamReader sr = new StreamReader( file ) ) { script += sr.ReadToEnd(); } var code = createPluginCode( script ); ret.ErrorMessage = ""; List<string> errors = new List<string>(); Assembly testAssembly = compileScript( code, errors ); if ( testAssembly == null ) { ret.scriptDelegate = null; if ( errors.Count == 0 ) { ret.ErrorMessage = "failed compiling"; } else { for ( int i = 0; i < errors.Count; i++ ) { ret.ErrorMessage += errors[i] + "\r\n"; } } return ret; } else { foreach ( Type implemented in testAssembly.GetTypes() ) { Object scriptDelegate = null; ScriptDelegateGetDisplayName getDisplayNameDelegate = null; MethodInfo get_displayname_delegate = implemented.GetMethod( "GetDisplayName", new Type[] { } ); if ( get_displayname_delegate != null && get_displayname_delegate.IsStatic && get_displayname_delegate.IsPublic ) { if ( get_displayname_delegate.ReturnType.Equals( typeof( String ) ) ) { getDisplayNameDelegate = (ScriptDelegateGetDisplayName)Delegate.CreateDelegate( typeof( ScriptDelegateGetDisplayName ), get_displayname_delegate ); } } MethodInfo tmi = implemented.GetMethod( "Edit", new Type[] { typeof( VsqFile ) } ); if ( tmi != null && tmi.IsStatic && tmi.IsPublic ) { if ( tmi.ReturnType.Equals( typeof( bool ) ) ) { scriptDelegate = (EditVsqScriptDelegate)Delegate.CreateDelegate( typeof( EditVsqScriptDelegate ), tmi ); } else if ( tmi.ReturnType.Equals( typeof( ScriptReturnStatus ) ) ) { scriptDelegate = (EditVsqScriptDelegateWithStatus)Delegate.CreateDelegate( typeof( EditVsqScriptDelegateWithStatus ), tmi ); } } tmi = implemented.GetMethod( "Edit", new Type[] { typeof( VsqFileEx ) } ); if ( tmi != null && tmi.IsStatic && tmi.IsPublic ) { if ( tmi.ReturnType.Equals( typeof( bool ) ) ) { scriptDelegate = (EditVsqScriptDelegateEx)Delegate.CreateDelegate( typeof( EditVsqScriptDelegateEx ), tmi ); } else if ( tmi.ReturnType.Equals( typeof( ScriptReturnStatus ) ) ) { scriptDelegate = (EditVsqScriptDelegateExWithStatus)Delegate.CreateDelegate( typeof( EditVsqScriptDelegateExWithStatus ), tmi ); } } if ( scriptDelegate != null ) { ret.ScriptType = implemented; ret.scriptDelegate = scriptDelegate; ret.Serializer = new XmlStaticMemberSerializerEx( implemented ); ret.getDisplayNameDelegate = getDisplayNameDelegate; if ( !File.Exists( config_file ) ) { continue; } // 設定ファイルからDeserialize System.IO.FileStream fs = null; bool delete_when_exit = false; try { fs = new System.IO.FileStream( config_file, System.IO.FileMode.Open, System.IO.FileAccess.Read ); ret.Serializer.deserialize( fs ); } catch ( Exception ex ) { serr.println( "Utility#loadScript; ex=" + ex ); Logger.write( typeof( Utility ) + ".loadScript; ex=" + ex + "\n" ); delete_when_exit = true; } finally { if ( fs != null ) { try { fs.Close(); if ( delete_when_exit ) { System.IO.File.Delete( config_file ); } } catch ( Exception ex2 ) { serr.println( "Utility#loadScript; ex2=" + ex2 ); Logger.write( typeof( Utility ) + ".loadScritp; ex=" + ex2 + "\n" ); } } } } else { ret.ErrorMessage = _( "'Edit' Method not implemented" ); } } } return ret; }
public static void Core(string packageName) { Console.WriteLine(I18N.Core("Install_CollectingPackageInfo")); //=================================================================pre-process //name is legal var packageDbConn = new Database(); packageDbConn.Open(); var reader = (from _i in packageDbConn.CoreDbContext.package where _i.name == (packageName.Contains("@") ? packageName.Split('@', StringSplitOptions.None)[0] : packageName) select _i).ToList(); if (!reader.Any()) { ConsoleAssistance.WriteLine(I18N.Core("General_NoMatchedPackage"), ConsoleColor.Red); return; } packageName = GetVersionNatrually(packageName, packageDbConn); //is installed ? var installFolder = new DirectoryInfo(Information.WorkPath.Enter("cache").Enter("installed").Path); if (installFolder.GetDirectories($"{packageName}").Any()) { ConsoleAssistance.WriteLine(I18N.Core("Install_InstalledPackage"), ConsoleColor.Red); return; } //====================================================================get-info //get denpendency tree Console.WriteLine(I18N.Core("Install_BuildingDependencyTree")); var cache1 = GetPackageInfo(packageName, packageDbConn); if (!cache1.res) { ConsoleAssistance.WriteLine(I18N.Core("General_NetworkError"), ConsoleColor.Red); return; } //conflict detect Console.WriteLine(I18N.Core("Install_DetectConflict")); var cache2 = DetectConflict(cache1.topologyMap, packageDbConn); if (!cache2.status) { ConsoleAssistance.WriteLine(I18N.Core("Install_SelfConflict"), ConsoleColor.Red); return; } //sort dependency Console.WriteLine(I18N.Core("Install_SortingDependencyTree")); var cache1_1 = new Dictionary <string, List <string> >(); foreach (var item in cache1.topologyMap.Keys) { var cache = new List <string>(); foreach (var depItem in cache1.topologyMap[item].dependency.ToList()) { cache.Add(GetTopVersion(depItem, packageDbConn)); } cache1_1.Add(item, cache); } var cache3 = KahnTopologySort(cache1_1); if (!cache3.status) { ConsoleAssistance.WriteLine(I18N.Core("Install_CloseLoop"), ConsoleColor.Red); return; } //remove installed package var realPackage = new List <string>(cache3.res); foreach (var item in installFolder.GetDirectories()) { if (realPackage.Contains(item.Name)) { realPackage.Remove(item.Name); } } packageDbConn.Close(); //sort removed package var sort_recorder = new Record(); sort_recorder.Init(); var realRemovedPackage = sort_recorder.SortPackage(cache2.res); sort_recorder.Save(); //=======================================================================output ConsoleAssistance.WriteLine(I18N.Core("Install_InstallList"), ConsoleColor.Yellow); foreach (var item in realPackage) { Console.WriteLine(item); } Console.WriteLine(""); ConsoleAssistance.WriteLine(I18N.Core("Install_RemoveList"), ConsoleColor.Yellow); if (realRemovedPackage.Count == 0) { ConsoleAssistance.WriteLine(I18N.Core("General_None"), ConsoleColor.Yellow); } foreach (var item in realRemovedPackage) { Console.WriteLine(item); } Console.WriteLine(""); ConsoleAssistance.Write(I18N.Core("General_Continue"), ConsoleColor.Yellow); if (Console.ReadLine().ToUpper() != "Y") { ConsoleAssistance.WriteLine(I18N.Core("General_CancelOperation"), ConsoleColor.Red); return; } //============================================================================install //remove Console.WriteLine(I18N.Core("Install_RemovingSelectedPackage")); Remove.RealRemove(realRemovedPackage); //install Console.WriteLine(I18N.Core("Install_InstallingSelectedPackage")); //ready recorder var recorder = new Record(); recorder.Init(); var zipExtractor = new FastZip(); foreach (var item in realPackage) { Console.WriteLine(I18N.Core("Install_InstallItem", item)); //download var downloadRes = Download.DownloadPackage(item); Console.WriteLine(Download.JudgeDownloadResult(downloadRes)); if (downloadRes != Download.DownloadResult.OK && downloadRes != Download.DownloadResult.ExistedLocalFile) { ConsoleAssistance.WriteLine(I18N.Core("General_NetworkError"), ConsoleColor.Red); return; } //remove decompress folder Directory.Delete(Information.WorkPath.Enter("cache").Enter("decompress").Path, true); Directory.CreateDirectory(Information.WorkPath.Enter("cache").Enter("decompress").Path); //decompress Console.WriteLine(I18N.Core("Install_ExtractItem", item)); zipExtractor.ExtractZip(Information.WorkPath.Enter("cache").Enter("download").Enter(item + ".zip").Path, Information.WorkPath.Enter("cache").Enter("decompress").Path, ""); Console.WriteLine(I18N.Core("Install_RunScriptItem", item)); var cacheRes = ScriptInvoker.Core(Information.WorkPath.Enter("cache").Enter("decompress").Path, ScriptInvoker.InvokeMethod.Install, ""); if (!cacheRes.status) { ConsoleAssistance.WriteLine(I18N.Core("General_ScriptError"), ConsoleColor.Red); ConsoleAssistance.WriteLine(cacheRes.desc, ConsoleColor.Red); //save installed package info recorder.Save(); return; } //record first and copy folders Console.WriteLine(I18N.Core("Install_RecordItem", item)); recorder.Add(item); PackageAssistance.DirectoryCopy(Information.WorkPath.Enter("cache").Enter("decompress").Path, Information.WorkPath.Enter("cache").Enter("installed").Enter(item).Path, true); Console.WriteLine(I18N.Core("Install_Success", item)); } //close recorder recorder.Save(); ConsoleAssistance.WriteLine(I18N.Core("General_AllOperationDown"), ConsoleColor.Yellow); }