コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        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);
            }
        }
コード例 #6
0
        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;
        }
コード例 #8
0
ファイル: PluginLoader.cs プロジェクト: cadencii/cadencii
        /// <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;
        }
コード例 #9
0
        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);
        }