/// <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>
        /// 请求回调
        /// </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;
                }
            }
        }
 /// <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));
         }
     }
 }
Exemplo n.º 4
0
        public void Dispose()
        {
            Post();

            output?.Dispose();
        }