/// <summary> /// 將main loop執行起來。若前有main loop則終結 /// </summary> /// <returns></returns> public string runNewMainLoop() { string ret = ""; string callId = callExe.genCallId(); clsMainLoop cmli = new clsMainLoop(callId); cmli.serviceName = "initialize"; cmli.callTypeName = "object"; cmli.callPara = null; string json = jsonUtl.encodeJson(cmli); ret = ce.MakeAcall(callId, json); if (ret.Length > 0) { return(ret); } ret = ce.spawnEXE(callId, cmli.serviceName); //change to use hangire... sample //BackgroundJob.Enqueue(() => Console.WriteLine("home action3!")); // 來,我們按照hangfire改作法 //1. 所有呼叫改為,可各自設定為同步呼叫或常駐呼叫 //2. 同步呼叫就是原本傳統寫法,常駐呼叫就是叫一隻console起來跑 //3. 所以就取消main loop的作法 //4. console要顯示畫面,然後用console.write...顯示狀態,這樣 // 就可以看得到console是否已經執行完成,或掛掉 //5. 另外提供一個清除所有呼叫紀錄的按鍵。 //6. 已經完成的呼叫,寫一筆紀錄到完成的目錄,且將呼叫紀錄刪除 return(ret); }
public string persistentCall(string systemName, string serviceName, string methodName, string paraType , string paraJson, string returnType, out string callId , out string returnJson) { // persistentCall //1. call status objct //2. run exe string ret = ""; returnJson = ""; callId = callExe.genCallId(); try { clsCallStatus ccs = new clsCallStatus(callId); ccs.systemName = systemName; ccs.callId = callId; ccs.serviceName = serviceName; ccs.methodName = methodName; ccs.callTypeName = paraType; ccs.callTime = DateTime.Now; ccs.callPara = paraJson; ccs.returnTypeName = returnType; //ccs.callFilepath = "..."; // todo !!... string json = jsonUtl.encodeJson(ccs); ret = ce.MakeAcall(callId, json); if (ret.Length > 0) { throw new Exception(ret); } dbg.o("before spawn exe"); // change to use hangire... string callIdOut = callId; BackgroundJob.Enqueue(() => ce.spawnEXE(callIdOut, serviceName) ); dbg.o("after spawn exe"); } catch (Exception ex) { Exception inner = ex; while (inner.InnerException != null) { inner = inner.InnerException; } ret = ex.Message + "\n" + ex.StackTrace; } return(ret); }