Exemplo n.º 1
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);
        }
Exemplo n.º 2
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);
        }
        /// <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);
        }
        /// <summary>
        /// 获取whilebox的迭代值
        /// </summary>
        /// <param name="whilebox"></param>
        /// <param name="startidx"></param>
        /// <returns></returns>
        protected int GetWhileBoxIdx(ItemBox whilebox, int startidx)
        {
            int          returnindex = 0;
            ScriptOutput soutidx     = manager.GetValue(whilebox.Id);

            if (soutidx == null)
            {
                ScriptOutput whileboxidx = new ScriptOutput();
                whileboxidx.SetValue("Idx", startidx);
                manager.SetValue(whilebox.Id, whileboxidx);
                returnindex = startidx;
            }
            else
            {
                int index = (int)soutidx.GetValue("Idx");
                manager.GetValue(whilebox.Id).SetValue("Idx", index++);
                returnindex = index++;
                soutidx.SetValue("Idx", returnindex);
            }
            whilebox.OutDatas[0].Value = returnindex;
            SetValue(whilebox.OutDatas[0] as ParatItem);
            return(returnindex);
        }
 /// <summary>
 /// 获取左值
 /// </summary>
 /// <param name="pi"></param>
 /// <param name="sm"></param>
 /// <returns></returns>
 protected static object getValue(ParatItem pi, ScriptObjectManager sm)
 {
     if (pi.LinkIParatItem == null)
     {
         return(pi.Value);
     }
     else
     {
         if (pi.LinkIParatItem.ParentItemBox.BoxType == ItemBoxEnum.GETFUNCTION)
         {
             object       reo = null;
             ScriptOutput so  = (pi.LinkIParatItem.ParentItemBox as ItemBox).DoScriptFunction(null);
             reo = so.GetValue(pi.LinkIParatItem.Name);
             so.Dispose();
             so = null;
             return(reo);
         }
         else
         {
             return(sm.GetValue(pi.LinkIParatItem.ParentItemBox.Id).GetValue(pi.LinkIParatItem.Name));
         }
     }
 }