/// <summary> /// 启动 Hmi Pro /// </summary> /// <param name="data"></param> /// <returns></returns> ExecRest startHmiPro(object data) { var start = (CmdActions.StartHmiPro)data; var rest = new ExecRest(); try { rest.DebugMessage = YUtil.CheckProcessIsExist(hmiProName) ? "HmiPro 进程存在" : "HmiPro 进程不存在"; //强制启动 if (start.IsForced) { YUtil.KillProcess(hmiProName); YUtil.Exec(hmiProPath, start.StartArgs); rest.Message = "强制启动 HmiPro 成功"; //只有当进程不存在的时候才启动 } else if (!YUtil.CheckProcessIsExist(hmiProName)) { YUtil.Exec(hmiProPath, start.StartArgs); rest.Message = "启动 HmiPro 成功"; } rest.Code = ExecCode.Ok; } catch (Exception e) { rest.Message = "启动 HmiPro 失败"; rest.Code = ExecCode.StartHmiProFailed; rest.DebugMessage = e.Message; } return(rest); }
/// <summary> /// http相关处理 /// </summary> /// <param name="ar"></param> private void processHttpContext(IAsyncResult ar) { Logger.Info("[HttpParse] 接受到数据"); var context = HttpListener.EndGetContext(ar); HttpListener.BeginGetContext(processHttpContext, null); var response = context.Response; var request = context.Request; response.AddHeader("Asylum", "IntelliManu Pro Asylum"); response.ContentType = "text/plain;charset=UTF-8"; if (request.ContentType != null) { Logger.Debug("[HttpParse] Request 类型: " + request.ContentType); } ExecRest rest = new ExecRest(); var postData = new StreamReader(request.InputStream, request.ContentEncoding).ReadToEnd(); try { var cmd = JsonConvert.DeserializeObject <Cmd>(postData); cmd.Where = CmdWhere.FromHttp; rest = cmdPrase.Exec(cmd); } catch (Exception e) { rest.Code = ExecCode.FormatError; rest.DebugMessage = e.Message; rest.Message = "提交格式错误,不满足 Cmd 的格式"; Logger.Error("解析命令出错:" + postData, e); } using (var stream = response.OutputStream) { var data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(rest)); stream.Write(data, 0, data.Length); } }
/// <summary> /// 关闭 HmiPro /// 目前仅支持强制关闭 /// </summary> /// <param name="data"></param> /// <returns></returns> ExecRest closeHmiPro(object data) { var close = (CmdActions.CloseHmiPro)data; var rest = new ExecRest(); try { YUtil.KillProcess(hmiProName); rest.Message = "关闭 HmiPro 成功"; rest.Code = ExecCode.Ok; } catch (Exception e) { rest.DebugMessage = e.Message; rest.Code = ExecCode.CloseHmiProFailed; } return(rest); }
/// <summary> /// 对外接口,解析 Cmd /// </summary> /// <param name="cmd"></param> /// <returns></returns> public ExecRest Exec(Cmd cmd) { Logger.Debug("[CmdParseService] 执行命令:" + cmd.Action); var rest = new ExecRest(); var types = YUtil.GetTypes(cmd.Action, Assembly.GetExecutingAssembly()); if (types.Count == 1) { var type = types[0]; if (executors.TryGetValue(type, out var exec)) { var data = cmd.Args != null ? JsonConvert.DeserializeObject(JsonConvert.SerializeObject(cmd.Args), type) : null; try { rest = exec(data); } catch (Exception e) { rest.DebugMessage = e.Message; rest.Code = ExecCode.ExecFailed; rest.Message = "执行解析逻辑异常"; } } else { rest.Code = ExecCode.NotFoundAction; rest.Message = "Action 对应的 Type 未注册"; } } else if (types.Count > 1) { rest.Code = ExecCode.MapManyTypes; rest.Message = "Action 对应了多个 Types"; } else { rest.Code = ExecCode.NotFoundType; rest.Message = "Action 未对应 Type"; } return(rest); }