Пример #1
0
        public RavenEtlDocumentTransformer(DocumentDatabase database, DocumentsOperationContext context, ScriptInput script)
            : base(database, context, script.Transformation)
        {
            _script = script;

            LoadToDestinations = _script.Transformation == null ? new string[0] : _script.LoadToCollections;
        }
Пример #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="JobScriptInputModel"/> class from a <see cref="ScriptInput"/> instance.
 /// </summary>
 /// <param name="relativityScriptInput">the relativity ScriptInput object</param>
 public JobScriptInputModel(ScriptInput relativityScriptInput)
 {
     this.InputId    = relativityScriptInput.InputId;
     this.InputName  = relativityScriptInput.Name;
     this.InputType  = relativityScriptInput.InputType;
     this.IsRequired = relativityScriptInput.IsRequired;
 }
        /// <summary>
        /// 执行if框
        /// </summary>
        /// <param name="box"></param>
        /// <returns></returns>
        protected void DoIfFunction(ItemBox box, WriteStreamCallBack wrs, IScriptLayout ml)
        {
            ScriptInput si = new ScriptInput();

            foreach (var item in box.InputDatas)
            {
                if (item.PIEnum != ParaItemEnum.INPUT)
                {
                    si.SetValue(item.Name, GetValue(item as ParatItem));
                }
            }

            //检测是否需要断点停止
            checkScriptRunForStopPoint(box, si, null);

            if (Convert.ToBoolean(si.GetFirst()))
            {
                RunningFunction((box as ItemBox).Children[0], wrs, ml);
            }
            else
            {
                RunningFunction((box as ItemBox).Children[1], wrs, ml);
            }
            si.Dispose();
            si = null;
        }
Пример #4
0
 /// <summary>
 /// 释放
 /// </summary>
 public void Dispose()
 {
     ValuePairs.Dispose();
     ValuePairs = null;
     Stream     = null;
     ApiName    = null;
 }
Пример #5
0
        public static ScriptOutput GetNowTime(ScriptInput si)
        {
            ScriptOutput so = new ScriptOutput();

            so.SetValue("NowTime", DateTime.Now);
            return(so);
        }
Пример #6
0
        public static ScriptOutput SetBoolValue(ScriptInput idx)
        {
            ScriptOutput so = new ScriptOutput();

            so.SetValue("result", Convert.ToBoolean(idx.GetValue("value")));
            return(so);
        }
Пример #7
0
        public static ScriptOutput AddInt(ScriptInput idx)
        {
            ScriptOutput so = new ScriptOutput();

            so.SetValue("result", (Convert.ToInt32(idx.GetValue("d1")) + Convert.ToInt32(idx.GetValue("d2"))));
            idx.Write("AddInt结果:" + so.GetValue("result").ToString());
            return(so);
        }
Пример #8
0
        public static ScriptOutput AddFloat(ScriptInput idx)
        {
            ScriptOutput so = new ScriptOutput();

            so.SetValue("result", Convert.ToDouble(idx.GetValue("f1")) + Convert.ToDouble(idx.GetValue("f2")));
            idx.Write("AddFloat结果:" + so.GetValue("result").ToString());
            return(so);
        }
Пример #9
0
        public ScriptOutput Run(ScriptInput input)
        {
            var co = new ScriptOutput();

            co.Code   = input.Code;
            co.Output = CompileHelper.CompileAndRun(string.Format(input.Language == Language.CSharp?CodeSamples.ScriptWrapperCSharp:CodeSamples.ScriptWrapperVBNet, input.Code), input.Language);
            return(co);
        }
        public RavenEtlDocumentTransformer(Transformation transformation, DocumentDatabase database, DocumentsOperationContext context, ScriptInput script)
            : base(database, context, script.Transformation, script.BehaviorFunctions)
        {
            _transformation = transformation;
            _script         = script;

            LoadToDestinations = _script.HasTransformation ? _script.LoadToCollections : new string[0];
        }
 /// <summary>
 /// 脚本检测是否断点
 /// </summary>
 /// <param name="item"></param>
 /// <param name="si"></param>
 /// <param name="so"></param>
 protected void checkScriptRunForStopPoint(IItemBox item, ScriptInput si, ScriptOutput so)
 {
     if (item.IsHasBreakPoint || isDebugMode)
     {
         ScriptBreakPoint?.Invoke(item, si, null);
         runStop();
     }
 }
Пример #12
0
        public ScriptResult ExecuteScript([FromBody] ScriptInput args)
        {
            var pathToScirpt = _pythonScript.Script.PathToScript;

            return(new ScriptResult
            {
                Result = run_cmd(pathToScirpt, args.Input)
            });
        }
Пример #13
0
        public static ScriptOutput Add(ScriptInput scriptInput)
        {
            int          add1         = Convert.ToInt32(scriptInput.GetValue("add1"));
            int          add2         = Convert.ToInt32(scriptInput.GetValue("add2"));
            ScriptOutput scriptOutput = new ScriptOutput();

            scriptOutput.SetValue("result", add1 + add2);
            return(scriptOutput);
        }
 /// <summary>
 /// 脚本请求回调
 /// </summary>
 /// <param name="arg1"></param>
 /// <param name="arg2"></param>
 private void ScriptRequest(ScriptInput arg1, string arg2)
 {
     if (PluginManager == null)
     {
         return;
     }
     foreach (var item in PluginManager.PluginItems)
     {
         item.ScriptPlugin.SendToRequestFunction(arg1, arg2);
     }
 }
Пример #15
0
        public static ScriptOutput PrintObject(ScriptInput si)
        {
            ScriptOutput scriptOutput = new ScriptOutput();
            object       obj          = si.GetValue("obj") as object;
            string       message      = si.GetValue("message").ToString();
            string       content      = "";

            content += obj == null ? "" : obj.ToString();
            content += message;
            scriptOutput.Write(content);
            return(scriptOutput);
        }
        /// <summary>
        /// 运行带url的函数
        /// </summary>
        /// <param name="itemBox"></param>
        /// <param name="scriptInput"></param>
        /// <returns></returns>

        private ScriptOutput RunScript(IItemBox itemBox, ScriptInput scriptInput)
        {
            ScriptRequest?.Invoke(scriptInput, itemBox.Name);
            string       json         = ScriptClient.PostStringAsync(itemBox.ScriptUrl, (JObject)JsonConvert.DeserializeObject(JsonConvert.SerializeObject(scriptInput)));
            ScriptOutput scriptOutput = JsonConvert.DeserializeObject <ScriptOutput>(json);

            ScriptReponse?.Invoke(scriptOutput, itemBox.Name);
            if (scriptOutput != null && scriptOutput.IsExecption)
            {
                throw new Exception("服务器给出停止信号!");
            }
            return(scriptOutput);
        }
        /// <summary>
        /// 获取函数的输入参数数据
        /// </summary>
        /// <param name="box"></param>
        /// <returns></returns>
        protected ScriptInput GetFunctionInput(ItemBox box)
        {
            ScriptInput si = new ScriptInput();

            foreach (var item in box.InputDatas)
            {
                if (item.PIEnum != ParaItemEnum.INPUT)
                {
                    si.SetValue(item.Name, GetValue(item as ParatItem));
                }
            }
            return(si);
        }
        /// <summary>
        /// 设置值
        /// </summary>
        /// <param name="ib"></param>
        /// <param name="sm"></param>
        /// <returns></returns>
        protected static IItemBox DoFunction(ItemBox itembox, ScriptObjectManager sm, WriteStreamCallBack wrs)
        {
            LineItemBox ib = itembox as LineItemBox;

            if (ib.BoxType == ItemBoxEnum.IF)
            {
                ScriptInput si = new ScriptInput();
                //si.WriteStream += wrs;
                foreach (var item in ib.InputDatas)
                {
                    if (item.PIEnum != ParaItemEnum.OUTPUT && item.PIEnum != ParaItemEnum.INPUT && item.PIEnum != ParaItemEnum.NULL)
                    {
                        si.SetValue(item.Name, getValue(item as ParatItem, sm));
                    }
                }
                if (Convert.ToBoolean(si.GetFirst()))
                {
                    return(ib.Next(0));
                }
                else
                {
                    return(ib.Next(1));
                }
            }
            else if (ib.BoxType == ItemBoxEnum.SET)
            {
                ScriptOutput so = new ScriptOutput();
                so.SetValue(ib.InputDatas[1].Name, getValue(ib.InputDatas[1] as ParatItem, sm));
                //so.SetValue(ib.InputDatas[1].Name, ib.InputDatas[1].Value);
                sm.SetValue(ib.Id, so);
                return(ib.Next(0));
            }
            else
            {
                ScriptInput si = new ScriptInput();
                si.WriteStream += wrs;
                foreach (var item in ib.InputDatas)
                {
                    if (item.PIEnum != ParaItemEnum.OUTPUT && item.PIEnum != ParaItemEnum.INPUT && item.PIEnum != ParaItemEnum.NULL)
                    {
                        si.SetValue(item.Name, getValue(item as ParatItem, sm));
                    }
                }
                ScriptOutput so = (ib as ItemBox).DoScriptFunction(si);
                if (so != null)
                {
                    sm.SetValue(ib.Id, so);
                }
                return(ib.Next(0));
            }
        }
Пример #19
0
        public static ScriptOutput TimeDesc(ScriptInput si)
        {
            DateTime time1 = Convert.ToDateTime(si.GetValue("time1"));
            DateTime time2 = Convert.ToDateTime(si.GetValue("time2"));

            ScriptOutput so = new ScriptOutput();
            TimeSpan     ts = time1 - time2;

            so.SetValue("TotalHours", ts.TotalHours);
            so.SetValue("TotalMilliseconds", ts.TotalMilliseconds);
            so.SetValue("TotalMinutes", ts.TotalMinutes);
            so.SetValue("TotalSeconds", ts.TotalSeconds);
            so.SetValue("TotalDays", ts.TotalDays);
            return(so);
        }
        /// <summary>
        /// 执行准确的函数
        /// </summary>
        /// <param name="box"></param>
        protected void Dofunction(ItemBox box, WriteStreamCallBack wrs, IScriptLayout ml)
        {
            if (isStop)
            {
                throw new Exception("主动停止了脚本!");
            }
            ml.SetFunctionBoxRun(box);
            ScriptInput si = new ScriptInput();

            foreach (var item in box.InputDatas)
            {
                if (item.PIEnum != ParaItemEnum.INPUT)
                {
                    si.SetValue(item.Name, GetValue(item as ParatItem));
                }
            }

            ScriptOutput so = RunScript(box, si);

            //ScriptOutput so = null;             ////////////////////////////////////待修改
            if (so != null)
            {
                if (so.LogMessage != null && so.LogMessage.Equals("") == false)
                {
                    wrs?.Invoke(so.LogMessage);
                }
                foreach (var item in box.OutDatas)
                {
                    if (item.PIEnum != ParaItemEnum.OUTPUT)
                    {
                        item.Value = so.GetValue(item.Name);
                        SetValue(item as ParatItem);
                    }
                }
            }
            //检测是否需要断点停止
            checkScriptRunForStopPoint(box, si, null);
            if (so != null)
            {
                so.Dispose();
                so = null;
            }
            si.Dispose();
            si = null;
            ml.SetFunctionBoxStop(box);
        }
Пример #21
0
        /// <summary>
        /// /获取请求的数据
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public static RequestMsg GetRequestMessage(HttpListenerRequest request)
        {
            if (request.HttpMethod.Equals("POST"))
            {
                MemoryStream memoryStream = new MemoryStream();
                request.InputStream.CopyTo(memoryStream);
                //string message = System.Text.Encoding.UTF8.GetString(datas);
                //datas = null;
                string      values     = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray());
                ScriptInput valuePairs = Newtonsoft.Json.JsonConvert.DeserializeObject <ScriptInput>(values);

                return(new RequestMsg()
                {
                    Stream = memoryStream.ToArray(), HttpMode = HttpMode.POST,
                    ApiName = request.RawUrl.Substring(1, request.RawUrl.Length - 1), ValuePairs = valuePairs,
                });
            }
            else if (request.HttpMethod.Equals("GET"))
            {
                Match para = new Regex("/(.*?)\\?(.*)").Match(request.RawUrl);
                Dictionary <string, object> valuePairs = new Dictionary <string, object>();
                string[] values = para.Groups[2].Value.Split('&');
                foreach (var item in values)
                {
                    string[] items = item.Split('=');
                    if (items.Length >= 2)
                    {
                        valuePairs.Add(items[0], items[1]);
                    }
                    items = null;
                }
                string apiName = para.Groups[1].Value;
                if (apiName.Equals("") && request.RawUrl.Contains("?") == false)
                {
                    apiName = request.RawUrl.Substring(1);
                }
                return(new RequestMsg()
                {
                    ApiName = apiName, ValuePairs = new ScriptInput()
                    {
                        datas = valuePairs,
                    }, HttpMode = HttpMode.GET
                });
            }
            return(null);
        }
        /// <summary>
        /// 请求回调
        /// </summary>
        /// <param name="arg1">请求流</param>
        /// <param name="response">回写流</param>
        protected void RequestCallBack(HttpListenerRequest request, HttpListenerResponse response)
        {
            RequestMsg requestMsg = null;

            try
            {
                requestMsg = ScriptServer.GetRequestMessage(request);
                Log.Write("收到接口请求 : ", requestMsg.ApiName);
                if (requestMsg.ApiName.Equals(GetAllAPIUrlAPIName))
                {
                    updateAPIsRequest?.Invoke();
                    writeResponse(getAllApi(), response, 200);
                }
                else if (scriptAPIs.ContainsKey(requestMsg.ApiName))
                {
                    ScriptInput  scriptInput  = requestMsg.ValuePairs;
                    ScriptOutput scriptOutput = scriptAPIs[requestMsg.ApiName].ScriptFunction(scriptInput);
                    writeResponse(scriptOutput, response, 200);
                    scriptOutput.Dispose();
                    scriptInput.Dispose();
                    scriptOutput = null;
                    scriptInput  = null;
                }
                else
                {
                    ///回复客户端异常
                    writeResponse(response, 201);
                }
            }
            catch (Exception ex)
            {
                writeResponse(response, 201);
                Log.Write("客户端调用出错", ex);
            }
            finally
            {
                if (requestMsg != null)
                {
                    requestMsg.Dispose();
                    requestMsg = null;
                }
            }
        }
Пример #23
0
        public static ScriptOutput EqualDouble(ScriptInput si)
        {
            double int1   = Convert.ToDouble(si.GetValue("float1"));
            double int2   = Convert.ToDouble(si.GetValue("float2"));
            string option = Convert.ToString(si.GetValue("option"));
            bool   result = false;

            switch (option)
            {
            case ">":
                result = int1 > int2;
                break;

            case "<":
                result = int1 < int2;
                break;

            case "=":
                result = int1 == int2;
                break;

            case ">=":
                result = int1 >= int2;
                break;

            case "<=":
                result = int1 <= int2;
                break;

            default:
                break;
            }
            ScriptOutput so = new ScriptOutput();

            so.SetValue("result", result);
            return(so);
        }
        /// <summary>
        /// 做循环
        /// </summary>
        /// <param name="box"></param>
        /// <returns></returns>
        protected void DoWhileFunction(ItemBox box, WriteStreamCallBack wrs, IScriptLayout ml)
        {
            ItemBox sbox = box as ItemBox;

            if (box.InputDatas.Count == 1)
            {
                if (box.InputDatas[0].PIEnum == ParaItemEnum.BOOL)
                {
                    ScriptInput si = GetFunctionInput(box);
                    //检测是否需要断点停止
                    checkScriptRunForStopPoint(box, si, null);
                    while (true)
                    {
                        if (Convert.ToBoolean(si.GetFirst()))
                        {
                            RunningFunction(box, wrs, ml);
                        }
                        else
                        {
                            return;
                        }
                        si.Dispose();
                        si = null;
                        si = GetFunctionInput(box);
                    }
                }
                else if (box.InputDatas[0].PIEnum == ParaItemEnum.DATETIME)
                {
                    ScriptInput si = GetFunctionInput(box);
                    //检测是否需要断点停止
                    checkScriptRunForStopPoint(box, si, null);
                    while (true)
                    {
                        if (Convert.ToDateTime(si.GetFirst()) > DateTime.Now)
                        {
                            RunningFunction(box, wrs, ml);
                        }
                        else
                        {
                            return;
                        }
                        si.Dispose();
                        si = null;
                        si = GetFunctionInput(box);
                    }
                }
            }
            else
            {
                ScriptInput si = GetFunctionInput(box);
                while (true)
                {
                    int idxs   = Convert.ToInt32(si.GetFirst());
                    int idxe   = Convert.ToInt32(si.GetSecond());
                    int boxidx = GetWhileBoxIdx(sbox, idxs);
                    //if (box.IsHasBreakPoint)
                    //{
                    //    ScriptOutput so = new ScriptOutput();
                    //    so.SetValue("Idx", boxidx);
                    //    ScriptBreakPoint?.Invoke(box, si, so);
                    //}
                    //检测是否需要断点停止
                    checkScriptRunForStopPoint(box, si, null);

                    if (boxidx > idxe)
                    {
                        return;
                    }
                    else
                    {
                        RunningFunction(box, wrs, ml);
                    }
                    si.Dispose();
                    si = null;
                    si = GetFunctionInput(box);
                }
            }
        }
Пример #25
0
        public void ScriptInputCRUD()
        {
            Service         service         = Connect();
            InputCollection inputCollection = service.GetInputs();
            ServiceInfo     info            = service.GetInfo();

            // CRUD Script input
            string filename;

            if (info.OsName.Equals("Windows"))
            {
                filename = "echo.bat";
            }
            else
            {
                filename = "echo.sh";
            }

            Args args = new Args();

            args.Clear();
            args.Add("interval", "60");
            if (inputCollection.Get(filename) != null)
            {
                inputCollection.Remove(filename);
            }

            inputCollection.Create(filename, InputKind.Script, args);
            Assert.IsTrue(inputCollection.ContainsKey(filename), assertRoot + "#11");
            ScriptInput scriptInput = (ScriptInput)inputCollection.Get(filename);

            scriptInput.Host     = "three.four.com";
            scriptInput.Index    = "main";
            scriptInput.Interval = "120";
            if (service.VersionCompare("4.2.4") >= 0)
            {
                scriptInput.PassAuth = "admin";
            }

            scriptInput.RenameSource = "renamedSource";
            scriptInput.Source       = "source";
            scriptInput.SourceType   = "script";
            scriptInput.Update();

            Assert.AreEqual("three.four.com", scriptInput.Host, assertRoot + "#12");
            Assert.AreEqual("main", scriptInput.Index, assertRoot + "#13");
            Assert.AreEqual("120", scriptInput.Interval, assertRoot + "#14");
            if (service.VersionCompare("4.2.4") >= 0)
            {
                Assert.AreEqual("admin", scriptInput.PassAuth, assertRoot + "#15");
            }

            if (service.VersionCompare("5.0") >= 0)
            {
                Assert.AreEqual("source", scriptInput.Source, assertRoot + "#16");
            }
            else
            {
                Assert.AreEqual("renamedSource", scriptInput.Source, assertRoot + "#16");
            }

            Assert.AreEqual("script", scriptInput.SourceType, assertRoot + "#17");

            scriptInput.Remove();
            inputCollection.Refresh();
            Assert.IsFalse(inputCollection.ContainsKey(filename), assertRoot + "#18");
        }
Пример #26
0
 public bool Compile(ScriptInput input)
 {
     throw new NotImplementedException();
 }
Пример #27
0
        private static void ExecuteScript()
        {
            ScriptSession scriptSession = new ScriptSession();

            scriptSession.SessionFileName = (string)_NonOptions[0];
            scriptSession.OptionVerbose   = _OptionVerbose;

            ScriptInput scriptInput = new ScriptInput();

            scriptInput.FileName  = (string)_NonOptions[1];
            scriptInput.Arguments = _MainArgs;

            if ((scriptSession.SessionFileName == "") || (scriptSession.SessionFileName == ""))
            {
                Console.WriteLine("Warning : Provide proper arguments.\n");
                return;
            }

            string scriptFullFileName = "";

            if (Path.GetDirectoryName(scriptInput.FileName) != "")
            {
                scriptFullFileName = scriptInput.FileName;
            }
            else
            {
                scriptFullFileName = Path.Combine(scriptSession.DicomScriptRootDirectory, scriptInput.FileName);
            }

            FileInfo fileInfoFirstArg = new FileInfo(scriptSession.SessionFileName);

            if (!fileInfoFirstArg.Exists)
            {
                Console.WriteLine("Error : Session File does not exists.\n");
                return;
            }
            else
            {
                string   fileExtension     = Path.GetExtension(scriptInput.FileName);
                FileInfo fileInfoSecondArg = new FileInfo(scriptFullFileName);
                if (((fileExtension == ".ds") || (fileExtension == ".dss") || (fileExtension == ".vbs") || (fileExtension == ".vb")) && (fileInfoSecondArg.Exists))
                {
                    Console.WriteLine("> Executing  Script {0}...", scriptFullFileName);
                    scriptSession.Execute(scriptInput);
                    if (scriptSession.Result)
                    {
                        Console.WriteLine("> Execution succeeded.\n");
                        DisplayResultCounters(scriptSession);
                    }
                    else
                    {
                        Console.WriteLine("> Execution failed.\n");
                        DisplayResultCounters(scriptSession);
                    }
                }
                else if (((fileExtension == ".ds") || (fileExtension == ".dss") || (fileExtension == ".vbs") || (fileExtension == ".vb")) && (!fileInfoSecondArg.Exists))
                {
                    Console.WriteLine("Error : Script File does not exists.\n");
                }
                else
                {
                    Console.WriteLine("Error : Script File does not exists.\n");
                    ShowCommandLineArguments();
                }
            }
        }
 /// <summary>
 /// 脚本断点回调函数
 /// </summary>
 /// <param name="item"></param>
 /// <param name="si"></param>
 /// <param name="so"></param>
 private void ScriptBreakPoint(IItemBox item, ScriptInput si, ScriptOutput so)
 {
     ScriptDebugWindow.UpdateWatchObjectSource(si, "ScriptInput");
 }
Пример #29
0
        private static void LoadScriptBlock(Level level, ScriptDef targetSD, XmlNode node, ScriptBlock root, string firstChildName = "")
        {
            if (node == null || root == null) {
                return;
            }

            var child = node.FirstChild;
            if (child == null) {
                return;
            }

            do {
                if (!firstChildName.Equals("")) {
                    if (!child.Name.Equals(firstChildName, StringComparison.InvariantCultureIgnoreCase)) {
                        Log.WriteInfo("Attention ! Impossible d'ajouter le scriptBlock : " + child.Name + " alors que le scriptBlock obligatoire est : " + firstChildName);
                        continue;
                    }
                }

                ScriptBlock scriptBlock = null;

                switch (child.Name.ToLower()) {
                    case "action": {
                            var a = child.Attributes?["a"];
                            if (a == null)
                                throw new Exception(" le scriptBlock <action> ne contient pas d'action \"a\" !");
                            var p = child.Attributes?["p"];
                            if (p == null)
                                throw new Exception(" le scriptBlock <action> ne contient pas de paramètres ! \"p\" ");

                            var parameters = new List<string>();

                            var i = 1;

                            do {
                                parameters.Add(p.Value);
                                ++i;
                            } while ((p = child.Attributes?["p" + i]) != null);

                            scriptBlock = new ScriptAction(level, a.Value, parameters);
                        }
                        break;

                    case "update": {
                            var delayA = child.Attributes?["delay"];
                            if (delayA == null)
                                throw new Exception(" le scriptBlock <update> ne contient pas de delay");

                            double delay = 0.0;
                            if (delayA.Value.Equals("$FRAME_RATE")) {
                                delay = 1.0 / 60.0;
                            }
                            else {
                                if (!double.TryParse(delayA.Value, out delay))
                                    throw new Exception(" le scriptBlock <update> ne contient pas de delay valide !");
                                if (delay <= 0)
                                    throw new Exception(" le scriptBlock <update> ne contient pas un delay valide ! Il est plus petit ou égal à 0 !");
                            }
                            scriptBlock = new ScriptUpdate(delay);
                            LoadScriptBlock(level, targetSD, child, scriptBlock);
                        }
                        break;
                    case "condition": {
                            var varRefA = child.Attributes?["ref"];
                            var valueConditionA = child.Attributes?["value"];

                            if (varRefA == null || valueConditionA == null)
                                throw new Exception(" le scriptBlock <condition> ne contient pas la référence vers la variable ou sa condition \"ref\" ou \"value\" !");

                            if (!targetSD.Variables.ContainsKey(varRefA.Value))
                                throw new Exception(" le scriptBlock <condition> utilise la variable : " + varRefA.Value + " alors qu'elle n'est pas définie dans <variables> !");

                            var variable = targetSD.Variables[varRefA.Value];

                            if (variable is int) {
                                if (!int.TryParse(valueConditionA.Value, out var condition)) {
                                    throw new Exception(" dans le scriptBlock <condition>, la condition utilisée ne peut pas être convertie en nombre (int) !");
                                }
                                scriptBlock = new ScriptCondition<int>(varRefA.Value, condition);
                            }
                            else if (variable is bool) {
                                if (!bool.TryParse(valueConditionA.Value, out var condition)) {
                                    throw new Exception(" dans le scriptBlock <condition>, la condition utilisée ne peut pas être convertie en booléen (bool) !");
                                }
                                scriptBlock = new ScriptCondition<bool>(varRefA.Value, condition);
                            }
                            else
                                throw new Exception(" le scriptBlock <condition> utilise une variable dont le type est inconnu !");

                            LoadScriptBlock(level, targetSD, child, scriptBlock);
                        }
                        break;
                    case "collision": {
                            var dirSide = child.Attributes?["side"];
                            var typeRef = child.Attributes?["typeRef"];
                            if (dirSide == null || typeRef == null)
                                throw new Exception(" le scriptBlock <collision> ne contient pas la direction \"side\" ou la référence \"typeRef\" !");

                            var sides = new List<PhysicsBody.CollisionSide>();

                            var rawSides = dirSide.Value.Split('|');

                            foreach (var rawSide in rawSides) {
                                if (!Enum.TryParse<PhysicsBody.CollisionSide>(rawSide, out var side))
                                    throw new Exception(" le scriptBlock <collision> contient une erreur ! Impossible de convertir : " + dirSide.Value + " en direction !");
                                sides.Add(side);
                            }

                            scriptBlock = new ScriptCollisionEvent(sides, typeRef.Value);
                            LoadScriptBlock(level, targetSD, child, scriptBlock);
                        }
                        break;
                    case "key": {
                            var codeA = child.Attributes?["code"];
                            var justPressedA = child.Attributes?["justPressed"];
                            var upA = child.Attributes?["up"];

                            if (codeA == null)
                                throw new Exception(" le scriptBlock <key> ne contient pas la touche \"code\"");

                            if (!Enum.TryParse<Keyboard.Key>(codeA.Value, true, out var key)) {
                                throw new Exception(" le scriptBlock <key> contient une touche qui n'existe pas ! : " + codeA.Value);
                            }

                            bool justPressed = false, up = false;

                            if (justPressedA != null) {
                                if (!bool.TryParse(justPressedA.Value, out justPressed))
                                    throw new Exception(" le scriptBlock <key> contient des erreurs ! Impossible de convertir : " + justPressedA.Value + " en valeur booléenne !");
                            }

                            if (upA != null) {
                                if (!bool.TryParse(upA.Value, out up))
                                    throw new Exception(" le scriptBlock <key> contient des erreurs ! Impossible de convertir : " + upA.Value + " en valeur booléenne !");
                            }

                            scriptBlock = new ScriptInput(key, justPressed, up);
                            LoadScriptBlock(level, targetSD, child, scriptBlock);
                        }
                        break;
                }

                if (scriptBlock == null)
                    throw new Exception(" le script contient un scriptBlock inconnu !");

                root.AddChild(scriptBlock);

            } while ((child = child.NextSibling) != null);
        }
Пример #30
0
        /// <summary>
        /// Touch all the properties of all any input
        /// </summary>
        /// <param name="input">The Input</param>
        private void TouchSpecificInput(Input input)
        {
            InputKind      inputKind      = input.GetKind();
            TcpConnections tcpConnections = null;
            UdpConnections udpConnections = null;

            string[] dummyStrings;
            string   dummyString;
            bool     dummyBoolean;
            DateTime dummyDate;
            int      dummyInt;

            if (inputKind.Equals(InputKind.Monitor))
            {
                MonitorInput monitorInput = (MonitorInput)input;
                dummyString  = monitorInput.Blacklist;
                dummyString  = monitorInput.CrcSalt;
                dummyInt     = monitorInput.FileCount;
                dummyBoolean = monitorInput.FollowTail;
                dummyString  = monitorInput.Host;
                dummyString  = monitorInput.HostRegex;
                dummyString  = monitorInput.IgnoreOlderThan;
                dummyString  = monitorInput.Index;
                dummyString  = monitorInput.Queue;
                dummyBoolean = monitorInput.IsRecursive;
                dummyString  = monitorInput.Source;
                dummyString  = monitorInput.SourceType;
                dummyInt     = monitorInput.TimeBeforeClose;
                dummyString  = monitorInput.Whitelist;
            }
            else if (inputKind.Equals(InputKind.Script))
            {
                ScriptInput scriptInput = (ScriptInput)input;
                dummyDate   = scriptInput.EndTime;
                dummyString = scriptInput.Group;
                dummyString = scriptInput.Host;
                dummyString = scriptInput.Index;
                dummyString = scriptInput.Interval;
                dummyDate   = scriptInput.StartTime;
            }
            else if (inputKind.Equals(InputKind.Tcp))
            {
                TcpInput tcpInput = (TcpInput)input;
                dummyString    = tcpInput.ConnectionHost;
                dummyString    = tcpInput.Group;
                dummyString    = tcpInput.Host;
                dummyString    = tcpInput.Index;
                dummyString    = tcpInput.Queue;
                dummyString    = tcpInput.RestrictToHost;
                dummyString    = tcpInput.Source;
                dummyString    = tcpInput.SourceType;
                dummyBoolean   = tcpInput.SSL;
                tcpConnections = tcpInput.Connections();
                dummyString    = tcpConnections.Connection;
                dummyString    = tcpConnections.Servername;
            }
            else if (inputKind.Equals(InputKind.TcpSplunk))
            {
                TcpSplunkInput tcpSplunkInput = (TcpSplunkInput)input;
                dummyString    = tcpSplunkInput.ConnectionHost;
                dummyString    = tcpSplunkInput.Group;
                dummyString    = tcpSplunkInput.Host;
                dummyString    = tcpSplunkInput.Index;
                dummyString    = tcpSplunkInput.Queue;
                dummyString    = tcpSplunkInput.Source;
                dummyString    = tcpSplunkInput.SourceType;
                dummyBoolean   = tcpSplunkInput.SSL;
                tcpConnections = tcpSplunkInput.Connections();
                dummyString    = tcpConnections.Connection;
                dummyString    = tcpConnections.Servername;
            }
            else if (inputKind.Equals(InputKind.Udp))
            {
                UdpInput udpInput = (UdpInput)input;
                dummyString    = udpInput.ConnectionHost;
                dummyString    = udpInput.Group;
                dummyString    = udpInput.Host;
                dummyString    = udpInput.Index;
                dummyString    = udpInput.Queue;
                dummyString    = udpInput.Source;
                dummyString    = udpInput.SourceType;
                dummyBoolean   = udpInput.NoAppendingTimeStamp;
                dummyBoolean   = udpInput.NoPriorityStripping;
                udpConnections = udpInput.Connections();
                dummyString    = udpConnections.Group;
            }
            else if (inputKind.Equals(InputKind.WindowsActiveDirectory))
            {
                WindowsActiveDirectoryInput windowsActiveDirectoryInput = (WindowsActiveDirectoryInput)input;
                dummyString  = windowsActiveDirectoryInput.Index;
                dummyBoolean = windowsActiveDirectoryInput.MonitorSubtree;
                dummyString  = windowsActiveDirectoryInput.StartingNode;
                dummyString  = windowsActiveDirectoryInput.TargetDc;
            }
            else if (inputKind.Equals(InputKind.WindowsEventLog))
            {
                WindowsEventLogInput windowsEventLogInput = (WindowsEventLogInput)input;
                dummyString  = windowsEventLogInput.Hosts;
                dummyString  = windowsEventLogInput.Index;
                dummyString  = windowsEventLogInput.LocalName;
                dummyStrings = windowsEventLogInput.Logs;
                dummyString  = windowsEventLogInput.LookupHost;
            }
            else if (inputKind.Equals(InputKind.WindowsPerfmon))
            {
                WindowsPerfmonInput windowsPerfmonInput = (WindowsPerfmonInput)input;
                dummyStrings = windowsPerfmonInput.Counters;
                dummyString  = windowsPerfmonInput.Index;
                dummyStrings = windowsPerfmonInput.Instances;
                dummyInt     = windowsPerfmonInput.Interval;
                dummyString  = windowsPerfmonInput.Object;
            }
            else if (inputKind.Equals(InputKind.WindowsRegistry))
            {
                WindowsRegistryInput windowsRegistryInput = (WindowsRegistryInput)input;
                dummyBoolean = windowsRegistryInput.Baseline;
                dummyString  = windowsRegistryInput.Hive;
                dummyString  = windowsRegistryInput.Index;
                dummyBoolean = windowsRegistryInput.MonitorSubnodes;
                dummyString  = windowsRegistryInput.Proc;
                dummyStrings = windowsRegistryInput.Type;
            }
            else if (inputKind.Equals(InputKind.WindowsWmi))
            {
                WindowsWmiInput windowsWmiInput = (WindowsWmiInput)input;
                dummyString  = windowsWmiInput.Classes;
                dummyStrings = windowsWmiInput.Fields;
                dummyString  = windowsWmiInput.Index;
                dummyStrings = windowsWmiInput.Instances;
                dummyInt     = windowsWmiInput.Interval;
                dummyString  = windowsWmiInput.LocalName;
                dummyString  = windowsWmiInput.LookupHost;
                dummyString  = windowsWmiInput.Servers;
                dummyString  = windowsWmiInput.Wql;
            }
            else
            {
                Assert.Fail();
            }
        }
Пример #31
0
 public static ScriptOutput DelyTime(ScriptInput idx)
 {
     Thread.Sleep(Convert.ToInt32(idx.GetFirst()));
     return(null);
 }