Пример #1
0
        private ScriptStatus GetScriptStateStatus()
        {
            if (state != null)
            {
                switch (state.Status)
                {
                case TaskStatus.RanToCompletion:
                    status = ScriptStatus.Completed;
                    break;

                case TaskStatus.Running:
                    status = ScriptStatus.Running;
                    break;

                case TaskStatus.Faulted:
                    status = ScriptStatus.ThrowedException;
                    break;

                case TaskStatus.Canceled:
                    status = ScriptStatus.Cancelled;
                    break;
                }
            }
            else
            {
                status = ScriptStatus.Unknown;
            }

            return(status);
        }
Пример #2
0
        private void Save(object sender, EventArgs e)
        {
            if (ValidateBeforeSaving())
            {
                ScriptType   scriptType   = EnumUtils.Parse <ScriptType>(cbxScriptType.SelectedValue);
                ScriptStatus scriptStatus = _script?.ScriptStatus ?? ScriptStatus.Stopped;
                _script              = ScriptAbs.GetInstance(_script, scriptType);
                _script.ScriptName   = tbxScriptName.Text;
                _script.ScriptPath   = tbxScriptPath.Text;
                _script.ScriptStatus = scriptStatus;

                switch (scriptType)
                {
                case ScriptType.OneOff:
                    break;

                case ScriptType.Scheduled:
                    DateTime dt = DateTime.Parse(tbxScriptScheduled.Text);
                    TimeSpan st = new TimeSpan(dt.Hour, dt.Minute, dt.Second);
                    ((ScriptScheduled)_script).ScheduledHour = st;
                    break;

                case ScriptType.ListenKey:
                    ((ScriptListenKey)_script).TriggerKey = (KeyPressed)tbxKeyPressed.Tag;
                    break;

                default:
                    break;
                }

                DialogResult = DialogResult.OK;
                Close();
            }
        }
Пример #3
0
        private void ApplyScript(ChangeScript script, string scriptContent, ScriptStatus scriptStatusSucess)
        {
            RecordScriptStatus(script, ScriptStatus.Started);

            // Begin transaction
            //queryExecuter.BeginTransaction();

            infoTextWriter.WriteLine(script);
            infoTextWriter.WriteLine("----------------------------------------------------------");

            // Apply changes and update ChangeLog table
            var output = new StringBuilder();

            try
            {
                ApplyChangeScript(script, scriptContent, output);
                RecordScriptStatus(script, scriptStatusSucess, output.ToString());
            }
            catch (Exception ex)
            {
                if (ex.InnerException != null)
                {
                    infoTextWriter.WriteLine(ex.ToString());
                    output.AppendLine(ex.Message);
                }
                RecordScriptStatus(script, ScriptStatus.Failure, output.ToString());
                throw;
            }
        }
        public async Task <bool> ChangeScriptStatus(ScriptAbs script)
        {
            ScriptStatus oldStatus = script.ScriptStatus;

            script.ScriptStatus = GetNewScriptStatus(oldStatus);

            Log.Debug("Change {@ScriptName} ({@ScriptType}) Script Status from {@OldStatus} to {@NewStatus}", script.ScriptName, script.ScriptType, oldStatus, script.ScriptStatus);
            if (script.ScriptStatus == ScriptStatus.Running)
            {
                if (script is ScriptListenKey)
                {
                    _listenKeysService.Run();
                }
                else
                {
                    await _runScriptService.RunScript(script);
                }
            }
            else
            {
                if (script is ScriptListenKey && !IsListenKeyServiceNecessary())
                {
                    _listenKeysService.Stop();
                }
                else
                {
                    await _runScriptService.StopScript(script);
                }
            }

            _settingsService.SaveScripts(_scripts);

            return(script.ScriptStatus != oldStatus);
        }
Пример #5
0
        public void retornar_que_script_foi_executado_com_sucesso(ScriptStatus scriptStatus)
        {
            var changeEntry = new ChangeEntry("Folder", 1)
            {
                Status = scriptStatus
            };

            changeEntry.ExecutedSuccessfully.Should().BeTrue();
        }
Пример #6
0
        public void Update(string file, ScriptStatus status, string storePath)
        {
            var first = this.FirstOrDefault(x => x.File == file);

            if (first != null)
            {
                first.Status    = status;
                first.StoreFile = storePath;
            }
        }
Пример #7
0
        public ScriptExecutionResult ExecuteAsync(string script, ScriptOptions opt, INotifier notifier, CancellationToken cancellationToken = default(CancellationToken))
        {
            var result = new ScriptExecutionResult {
                Variables = new List <VariableInfo>(), Errors = new List <ErrorInfo>()
            };

            status = ScriptStatus.PrepareToRun;

            //new Thread(() =>
            ThreadPool.QueueUserWorkItem(_ =>
            {
                try
                {
                    state         = CSharpScript.RunAsync <int>(script, opt, null, null, cancellationToken);
                    status        = GetScriptStateStatus();
                    result.Status = status;
                    if (state.Exception != null && state.Exception.InnerExceptions.Count > 0)
                    {
                        result.Exception = state.Exception.InnerExceptions[0];
                    }

                    state.ContinueWith(t =>
                    {
                        result.Status = GetScriptStateStatus();
                        notifier.SendScriptExecutionResults(result);
                        return(t);
                    }, cancellationToken);
                }
                catch (CompilationErrorException e)
                {
                    status        = ScriptStatus.CompiledWithErrors;
                    result.Status = status;
                    foreach (var err in e.Diagnostics)
                    {
                        result.Errors.Add(new ErrorInfo {
                            Info = err.ToString()
                        });
                    }

                    notifier.SendScriptExecutionResults(result);
                }
                catch (Exception e)
                {
                    status           = ScriptStatus.ThrowedException;
                    result.Exception = e;
                    notifier.SendScriptExecutionResults(result);
                }
            });//.Start();

            result.Status = status;
            notifier.SendScriptExecutionResults(result);

            return(result);
        }
Пример #8
0
        /// <summary>
        /// 执行脚本内容
        /// </summary>
        /// <param name="script_str">脚本的字符串内容</param>
        public void Execute_Script_Text(string script_str)
        {
            var ss = new ScriptStatus();
            ss.version = 1;
            ss.env_arg = new Dictionary<string, string>();

            foreach (string item in script_str.Split('\n'))
            {
                Parse_Single_Command(item.Replace("\r", "").Trim(), ref ss);
            }
        }
Пример #9
0
        /// <summary>
        /// 执行脚本内容
        /// </summary>
        /// <param name="script_str">脚本的字符串内容</param>
        public void Execute_Script_Text(string script_str)
        {
            var ss = new ScriptStatus();

            ss.version = 1;
            ss.env_arg = new Dictionary <string, string>();

            foreach (string item in script_str.Split('\n'))
            {
                Parse_Single_Command(item.Replace("\r", "").Trim(), ref ss);
            }
        }
Пример #10
0
        public override void SetStatus(ScriptStatus desiredStatus)
        {
            var currentName = currentScript.Value;

            for (var i = 0; i < executionStates.Length; i++)
            {
                var state = executionStates[i];

                if (state.Description == currentName)
                {
                    SetStatus((ushort)i, desiredStatus);
                }

                executionStates[i] = state;
            }
        }
Пример #11
0
        /// <summary>
        /// Records the script status.
        /// </summary>
        /// <param name="script">The script.</param>
        /// <param name="status">The status.</param>
        /// <param name="output">The output of the script.</param>
        /// <exception cref="SchemaVersionTrackingException">Could not update change log because:  + e.Message</exception>
        public virtual void RecordScriptStatus(ChangeScript script, ScriptStatus status, string output = null)
        {
            try
            {
                // Insert or update based on if there is a change ID.
                // Update complete date for all but started.
                var completeDateValue = status != ScriptStatus.Started ? this.syntax.CurrentTimestamp : "NULL";
                if (script.ChangeId == 0)
                {
                    var sql = string.Format(
                        CultureInfo.InvariantCulture,
                        @"INSERT INTO {0} (Folder, ScriptNumber, ScriptName, StartDate, CompleteDate, AppliedBy, ScriptStatus, ScriptOutput) VALUES (@1, @2, @3, {1}, {2}, {3}, @4, @5) 
SELECT ChangeId FROM {0} WHERE Folder = @1 and ScriptNumber = @2",
                        this.changeLogTableName,
                        this.syntax.CurrentTimestamp,
                        completeDateValue,
                        this.syntax.CurrentUser);

                    // Execute insert and set change id so it can be updated.
                    using (var reader = this.queryExecuter.ExecuteQuery(sql, script.Folder, script.ScriptNumber, script.ScriptName, (int)status, output ?? string.Empty))
                    {
                        reader.Read();
                        script.ChangeId = reader.GetInt32(0);
                    }
                }
                else
                {
                    // Update existing entry.
                    var sql = string.Format(
                        CultureInfo.InvariantCulture,
                        "UPDATE {0} SET Folder = @1, ScriptNumber = @2, ScriptName = @3, {1}CompleteDate = {2}, AppliedBy = {3}, ScriptStatus = @4, ScriptOutput = @5 WHERE ChangeId = @6",
                        this.changeLogTableName,
                        status == ScriptStatus.Started ? string.Format(CultureInfo.InvariantCulture, "StartDate = {0}, ", this.syntax.CurrentTimestamp) : string.Empty,
                        completeDateValue,
                        this.syntax.CurrentUser);

                    this.queryExecuter.Execute(sql, script.Folder, script.ScriptNumber, script.ScriptName, (int)status, output ?? string.Empty, script.ChangeId);
                }
            }
            catch (DbException e)
            {
                throw new SchemaVersionTrackingException("Could not update change log because: " + e.Message, e);
            }
        }
Пример #12
0
        public void Run(int[] arguments, bool resetScriptCursor)
        {
            #if !COMPARE
            this.logFile.WriteLine("---------- Running Script {0} -----------", this.ResourceId);
            #endif

            if (scriptManager.ActiveScripts.Contains(this) == false)
            {
                scriptManager.ActiveScripts.Add(this);
            }

            this.Status = ScriptStatus.Running;

            // Init local variables
            this.LocalVariables = new int[25];

            if (arguments.Length > 0)
            {
                for (int i = 0; i < arguments.Length; i++)
                {
                    this.LocalVariables[i] = arguments[i];
                }
            }

            // Run the script
            if (resetScriptCursor)
            {
                this.DataReader.BaseStream.Position = 0;
            }

            while (this.DataReader.BaseStream.Position < this.DataReader.BaseStream.Length && this.Status == ScriptStatus.Running)
            {
                this.ExecuteInstruction();
            }

            if (this.Status == ScriptStatus.Running)
            {
                this.Status = ScriptStatus.Stopped;
            }

            #if !COMPARE
            this.logFile.WriteLine("---------- Script {0} stopped -----------", this.ResourceId);
            #endif
        }
        private ScriptStatus GetNewScriptStatus(ScriptStatus oldStatus)
        {
            ScriptStatus newStatus = ScriptStatus.Undefined;

            switch (oldStatus)
            {
            case ScriptStatus.Running:
                newStatus = ScriptStatus.Stopped;
                break;

            case ScriptStatus.Undefined:
            case ScriptStatus.Stopped:
                newStatus = ScriptStatus.Running;
                break;

            default:
                break;
            }
            return(newStatus);
        }
Пример #14
0
        public void SetGlobalStatusMessage(ScriptStatus gs)
        {
            switch (gs)
            {
            case ScriptStatus.Editing:
                globalStatusMessage.Message = "Editing";
                break;

            case ScriptStatus.Running:
                globalStatusMessage.Message = "Running";
                break;

            case ScriptStatus.Paused:
                globalStatusMessage.Message = "Paused";
                break;

            case ScriptStatus.ExecutionError:
                globalStatusMessage.Message = "Execution Error";
                break;
            }
        }
 public new void RecordScriptStatus(ChangeScript changeScript, ScriptStatus status, string output)
 {
     base.RecordScriptStatus(changeScript, status, output);
 }
Пример #16
0
        private void UpdateScriptList(int index, string content, ScriptStatus status)
        {
            // change index to 1-base
            index++;

            if (index > scriptDisplay.Items.Count)
            {
                string displayStatus;

                if (status == ScriptStatus.Untracked)
                {
                    displayStatus = TextCollection.RecorderScriptStatusNoAudio;
                }
                else
                {
                    displayStatus = status.ToString();
                }

                ListViewItem item = scriptDisplay.Items.Add(displayStatus);
                item.SubItems.Add(content);
            }
            else
            {
                if (status != ScriptStatus.Default)
                {
                    string displayStatus;

                    if (status == ScriptStatus.Untracked)
                    {
                        displayStatus = TextCollection.RecorderScriptStatusNoAudio;
                    }
                    else
                    {
                        displayStatus = status.ToString();
                    }

                    scriptDisplay.Items[index - 1].SubItems[0].Text = displayStatus;
                }

                if (content != null)
                {
                    scriptDisplay.Items[index - 1].SubItems[1].Text = content;
                }
            }
        }
Пример #17
0
        /// <summary>
        /// Records the script status.
        /// </summary>
        /// <param name="script">The script.</param>
        /// <param name="status">The status.</param>
        /// <param name="output">The output of the script.</param>
        /// <exception cref="SchemaVersionTrackingException">Could not update change log because:  + e.Message</exception>
        public virtual void RecordScriptStatus(ChangeScript script, ScriptStatus status, string output = null)
        {
            try
            {
                output = string.IsNullOrEmpty(output) ? " " : RemoveInvalidCharacters(output);
                var completeDateValue = status != ScriptStatus.Started ? syntax.CurrentTimestamp : "NULL";

                queryExecuter.BeginTransaction();

                if (string.IsNullOrWhiteSpace(script.ChangeId))
                {
                    var sqlInsert = string.Format(
                        CultureInfo.InvariantCulture,
                        @"INSERT INTO {0} (ChangeId, Folder, ScriptNumber, ScriptName, StartDate, CompleteDate, AppliedBy, ScriptStatus, ScriptOutput) VALUES ('{1}', '{2}', {3}, '{4}', {5}, {6}, {7}, {8}, '{9}')",
                        changeLogTableName,
                        Guid.NewGuid(),
                        script.Folder,
                        script.ScriptNumber,
                        script.ScriptName,
                        syntax.CurrentTimestamp,
                        completeDateValue,
                        syntax.CurrentUser,
                        (int)status,
                        output);

                    queryExecuter.Execute(sqlInsert);

                    var sqlSelect = string.Format("SELECT ChangeId FROM {0} WHERE Folder = '{1}' and ScriptNumber = {2}", changeLogTableName, script.Folder, script.ScriptNumber);

                    using (var reader = queryExecuter.ExecuteQuery(sqlSelect))
                    {
                        reader.Read();
                        script.ChangeId = (reader.GetString(0));
                    }
                }
                else
                {
                    var sql = string.Format(
                        CultureInfo.InvariantCulture,
                        "UPDATE {0} SET Folder = '{1}', ScriptNumber = {2}, ScriptName = '{3}', {4}CompleteDate = {5}, AppliedBy = {6}, ScriptStatus = {7}, ScriptOutput = '{8}' WHERE ChangeId = '{9}'",
                        changeLogTableName,
                        script.Folder,
                        script.ScriptNumber,
                        script.ScriptName,
                        status == ScriptStatus.Started ? string.Format(CultureInfo.InvariantCulture, "StartDate = {0}, ", syntax.CurrentTimestamp) : string.Empty,
                        completeDateValue,
                        syntax.CurrentUser,
                        (int)status,
                        output,
                        script.ChangeId);

                    queryExecuter.Execute(sql);
                }
            }
            catch (DbException e)
            {
                throw new SchemaVersionTrackingException("Could not update change log because: " + e.Message, e);
            }
            finally
            {
                queryExecuter.CommitTransaction();
            }
        }
Пример #18
0
 private void EnableDropDownItemsPerStatus(ToolStripItemCollection dropDownItems, ScriptStatus scriptStatus)
 {
     dropDownItems[0].Enabled = scriptStatus == ScriptStatus.Running;
     dropDownItems[1].Enabled = scriptStatus != ScriptStatus.Running;
 }
Пример #19
0
 public abstract void SetStatus(ScriptStatus desiredStatus);
Пример #20
0
 /// <summary>
 /// Records details about a change script in the database.
 /// </summary>
 /// <param name="changeScript">The change script.</param>
 /// <param name="status">Status of the script execution.</param>
 /// <param name="output">The output from running the script.</param>
 protected void RecordScriptStatus(ChangeScript changeScript, ScriptStatus status, string output = null)
 {
     this.schemaVersionManager.RecordScriptStatus(changeScript, status, output);
 }
Пример #21
0
 public abstract void SetStatus(ushort methodId, ScriptStatus desiredStatus);
Пример #22
0
 public void Stop()
 {
     this.Status = ScriptStatus.Stopped;
     scriptManager.ActiveScripts.Remove(this);
 }
 public new void RecordScriptStatus(ChangeScript changeScript, ScriptStatus status, string output)
 {
     base.RecordScriptStatus(changeScript, status, output);
 }
        private void ApplyScript(ChangeScript script, string scriptContent, ScriptStatus scriptStatusSucess)
        {
            RecordScriptStatus(script, ScriptStatus.Started);

            // Begin transaction
            //queryExecuter.BeginTransaction();

            infoTextWriter.WriteLine(script);
            infoTextWriter.WriteLine("----------------------------------------------------------");

            // Apply changes and update ChangeLog table
            var output = new StringBuilder();
            try
            {
                ApplyChangeScript(script, scriptContent, output);
                RecordScriptStatus(script, scriptStatusSucess, output.ToString());
            }
            catch (Exception ex)
            {
                if (ex.InnerException != null)
                {
                    infoTextWriter.WriteLine(ex.ToString());
                    output.AppendLine(ex.Message);
                }
                RecordScriptStatus(script, ScriptStatus.Failure, output.ToString());
                throw;
            }
        }
 /// <summary>
 /// Records details about a change changeScript in the database.
 /// </summary>
 /// <param name="changeScript">The change changeScript.</param>
 /// <param name="status">Status of the changeScript execution.</param>
 /// <param name="output">The output from running the changeScript.</param>
 protected void RecordScriptStatus(ChangeScript changeScript, ScriptStatus status, string output = null)
 {
     schemaVersionManager.RecordScriptStatus(changeScript, status, output);
 }
Пример #26
0
        /// <summary>
        /// 解析并执行单个指令
        /// </summary>
        /// <param name="cmd">指令的字符串</param>
        /// <param name="stat">脚本参数</param>
        private void Parse_Single_Command(string cmd, ref ScriptStatus stat)
        {
            string[] cmd_arg = Split_command(cmd);
            if (cmd_arg.Length == 0) return;

            //忽略调用函数的大小写
            switch (cmd_arg[0].ToLower())
            {
                //指令: version
                #region version command
                case "version":
                    //参数不为两个,报错
                    if (cmd_arg.Length != 2)
                        throw new ArgumentNullException("参数错误");
                    int test_version;
                    //版本号不为数字,同样报错
                    if (!int.TryParse(cmd_arg[1], out test_version))
                        throw new ArgumentException("版本号为非数字");
                    //最后一个作死的,还是报错
                    if (test_version <= 0 || test_version > 1)
                        throw new ArgumentOutOfRangeException("版本号超出范围(只为1)");
                    stat.version = test_version;
                    break;
                #endregion

                //指令: sync
                #region sync command
                case "sync":
                    //会不会switch - case语句有点多....
                    if (cmd_arg.Length < 3)
                        throw new ArgumentNullException("参数错误");
                    //指令的附加参数
                    var inc_ext = new List<string>();
                    var esc_ext = new List<string>();
                    bool hd_included = false;
                    int stachk_flag = FLAG_STACHK_DIRECT_SYNC_DEFAULT;

                    for (int i = 3; i < cmd_arg.Length; i++)
                    {
                        switch (cmd_arg[i])
                        {
                            case "--ext":
                                i++;
                                if (i >= cmd_arg.Length) throw new ArgumentNullException("缺少指令参数: " + cmd_arg[i - 1]);
                                foreach (string item in cmd_arg[i].Split(';'))
                                    esc_ext.Add(item.Trim());
                                break;
                            case "-+ext":
                                i++;
                                if (i >= cmd_arg.Length) throw new ArgumentNullException("缺少指令参数: " + cmd_arg[i - 1]);
                                foreach (string item in cmd_arg[i].Split(';'))
                                {
                                    if (item == "*") //全包括
                                    {
                                        inc_ext.Clear();
                                        break;
                                    }
                                    inc_ext.Add(item.Trim());
                                }
                                break;
                            case "-H": case "-hidden":
                                hd_included = true;
                                break;
                            case "-stachk":
                                i++;
                                if (i >= cmd_arg.Length) throw new ArgumentNullException("缺少指令参数: " + cmd_arg[i - 1]);
                                stachk_flag = 0;
                                foreach (string item in cmd_arg[i].Split(';'))
                                    switch (item)
	                                {
                                        case "stachk_md5":
                                            stachk_flag |= FLAG_STACHK_MD5;
                                            break;
                                        case "stachk_length":
                                            stachk_flag |= FLAG_STACHK_LENGTH;
                                            break;
                                        case "stachk_last_modified":
                                            stachk_flag |= FLAG_STACHK_LAST_MODIFIED_TIME;
                                            break;
                                        case "stachk_created":
                                            stachk_flag |= FLAG_STACHK_CREATED_TIME;
                                            break;
                                        case  "stachk_last_accessed":
                                            stachk_flag |= FLAG_STACHK_LAST_ACCESSED_TIME;
                                            break;
                                        default:
                                            throw new ArgumentException("未知指令参数: " + item);
	                                }

                                break;
                            default:
                                throw new ArgumentException("未知指令参数: " + cmd_arg[i]);
                        }
                        
                    }

                    Direct_Sync_File(cmd_arg[1], cmd_arg[2], stachk_flag, hd_included, inc_ext, esc_ext);
                    break;
                #endregion

                //指令:script
                #region script command
                case "script":
                    if (cmd_arg.Length != 2) throw new ArgumentException("参数错误");
                    if (string.IsNullOrEmpty(cmd_arg[1])) throw new ArgumentNullException("脚本文件为空");
                    Execute_Script(cmd_arg[1]);
                    break;
                #endregion

                default:
                    throw new ArgumentException("未知指令: " + cmd_arg[0]);
            }

        }
Пример #27
0
        /// <summary>
        /// 解析并执行单个指令
        /// </summary>
        /// <param name="cmd">指令的字符串</param>
        /// <param name="stat">脚本参数</param>
        private void Parse_Single_Command(string cmd, ref ScriptStatus stat)
        {
            string[] cmd_arg = Split_command(cmd);
            if (cmd_arg.Length == 0)
            {
                return;
            }

            //忽略调用函数的大小写
            switch (cmd_arg[0].ToLower())
            {
                //指令: version
                #region version command
            case "version":
                //参数不为两个,报错
                if (cmd_arg.Length != 2)
                {
                    throw new ArgumentNullException("参数错误");
                }
                int test_version;
                //版本号不为数字,同样报错
                if (!int.TryParse(cmd_arg[1], out test_version))
                {
                    throw new ArgumentException("版本号为非数字");
                }
                //最后一个作死的,还是报错
                if (test_version <= 0 || test_version > 1)
                {
                    throw new ArgumentOutOfRangeException("版本号超出范围(只为1)");
                }
                stat.version = test_version;
                break;
                #endregion

                //指令: sync
                #region sync command
            case "sync":
                //会不会switch - case语句有点多....
                if (cmd_arg.Length < 3)
                {
                    throw new ArgumentNullException("参数错误");
                }
                //指令的附加参数
                var  inc_ext     = new List <string>();
                var  esc_ext     = new List <string>();
                bool hd_included = false;
                int  stachk_flag = FLAG_STACHK_DIRECT_SYNC_DEFAULT;

                for (int i = 3; i < cmd_arg.Length; i++)
                {
                    switch (cmd_arg[i])
                    {
                    case "--ext":
                        i++;
                        if (i >= cmd_arg.Length)
                        {
                            throw new ArgumentNullException("缺少指令参数: " + cmd_arg[i - 1]);
                        }
                        foreach (string item in cmd_arg[i].Split(';'))
                        {
                            esc_ext.Add(item.Trim());
                        }
                        break;

                    case "-+ext":
                        i++;
                        if (i >= cmd_arg.Length)
                        {
                            throw new ArgumentNullException("缺少指令参数: " + cmd_arg[i - 1]);
                        }
                        foreach (string item in cmd_arg[i].Split(';'))
                        {
                            if (item == "*")         //全包括
                            {
                                inc_ext.Clear();
                                break;
                            }
                            inc_ext.Add(item.Trim());
                        }
                        break;

                    case "-H":
                    case "-hidden":
                        hd_included = true;
                        break;

                    case "-stachk":
                        i++;
                        if (i >= cmd_arg.Length)
                        {
                            throw new ArgumentNullException("缺少指令参数: " + cmd_arg[i - 1]);
                        }
                        stachk_flag = 0;
                        foreach (string item in cmd_arg[i].Split(';'))
                        {
                            switch (item)
                            {
                            case "stachk_md5":
                                stachk_flag |= FLAG_STACHK_MD5;
                                break;

                            case "stachk_length":
                                stachk_flag |= FLAG_STACHK_LENGTH;
                                break;

                            case "stachk_last_modified":
                                stachk_flag |= FLAG_STACHK_LAST_MODIFIED_TIME;
                                break;

                            case "stachk_created":
                                stachk_flag |= FLAG_STACHK_CREATED_TIME;
                                break;

                            case  "stachk_last_accessed":
                                stachk_flag |= FLAG_STACHK_LAST_ACCESSED_TIME;
                                break;

                            default:
                                throw new ArgumentException("未知指令参数: " + item);
                            }
                        }

                        break;

                    default:
                        throw new ArgumentException("未知指令参数: " + cmd_arg[i]);
                    }
                }

                Direct_Sync_File(cmd_arg[1], cmd_arg[2], stachk_flag, hd_included, inc_ext, esc_ext);
                break;
                #endregion

                //指令:script
                #region script command
            case "script":
                if (cmd_arg.Length != 2)
                {
                    throw new ArgumentException("参数错误");
                }
                if (string.IsNullOrEmpty(cmd_arg[1]))
                {
                    throw new ArgumentNullException("脚本文件为空");
                }
                Execute_Script(cmd_arg[1]);
                break;
                #endregion

            default:
                throw new ArgumentException("未知指令: " + cmd_arg[0]);
            }
        }
Пример #28
0
 public override void SetStatus(ushort methodId, ScriptStatus desiredStatus)
 {
     ref var state = ref executionStates[methodId];
Пример #29
0
        public void retornar_que_script_foi_executado_com_sucesso(ScriptStatus scriptStatus)
        {
            var changeEntry = new ChangeEntry("Folder", 1) { Status = scriptStatus };

            changeEntry.ExecutedSuccessfully.Should().BeTrue();
        }