private void HandleMessageThread() { while (true) { ReceivedMessage receivedMessage = new ReceivedMessage(); while (_receivedQueue.TryDequeue(out receivedMessage)) { var handler = _handlerList.Find(q => q.MessageType.Name == Utility.GetMessageType(receivedMessage.message)); if (handler != null & handler.Handlers.Count > 0) { object message = JsonExtension.FromJSON(handler.MessageType, receivedMessage.message); foreach (Action <int, object> handle in handler.Handlers) { //Task.Run(() => handle(arg1, message)); if (handle != null) { handle(receivedMessage.connectID, message); } } OnReceivedObject?.Invoke(GetClientIpById(receivedMessage.connectID), GetClientPortIpById(receivedMessage.connectID), receivedMessage.connectID, message); } else { // if no handler, directly convert to object, but what this object will be?? object message = JsonExtension.FromJSON(receivedMessage.message); OnReceivedObject?.Invoke(GetClientIpById(receivedMessage.connectID), GetClientPortIpById(receivedMessage.connectID), receivedMessage.connectID, message); } } Thread.Sleep(1000); } }
private void HandleMessageThread() { while (true) { string strMessage = string.Empty; while (_receivedQueue.TryDequeue(out strMessage)) { var handler = _handlerList.Find(q => q.MessageType.Name == Utility.GetMessageType(strMessage)); if (handler != null && handler.Handlers.Count > 0) { object message = JsonExtension.FromJSON(handler.MessageType, strMessage); //try waitting queue CheckWattingQueue(message); foreach (Action <object> action in handler.Handlers) { if (action != null) { action(message); } } OnReceivedObject?.Invoke(message); } else { // if no handler, directly convert to object, but what this object will be?? object message = JsonExtension.FromJSON(strMessage); OnReceivedObject?.Invoke(message); } } Thread.Sleep(1000); } }
//其实我不想加注释的, 这段写的实在是估计以后我自己也看不懂,所以还是加上吧 //通过传入的参数 function 反射获取类 K3CloudApiClient的方法,然后直接调用 //其中new string[] { JsonExtension.ToJSON(t) } 是调用方法的参数 参见 方法 public object Invoke(object obj, object[] parameters); // JsonExtension.ToJSON(t) 是把传入的对象转化为Json字符串 //然后 调用后 进行强制类型转化为string //最后调用Json字符串转对象来实现调用 public static InvokeResult InvokeFunction(string inputObjectString, K3CloudApiClient client, string formID, string function, string functionName) { InvokeResult invokeResult = new InvokeResult(); try { Assembly asmb = Assembly.LoadFrom("C:\\Program Files (x86)\\Kingdee\\K3Cloud\\WebSite\\Bin\\Kingdee.BOS.WebApi.Client.dll"); Type type = asmb.GetType("Kingdee.BOS.WebApi.Client.K3CloudApiClient"); MethodInfo method = type.GetMethod(function, new Type[] { typeof(string), typeof(string) }); object[] parameters = new object[] { formID, inputObjectString }; return(JsonExtension.FromJSON <InvokeResult>((string)method.Invoke(client, parameters))); } catch (Exception e) { SystemLog.WriteSystemLog("☆☆☆☆☆☆☆☆☆ -- 系统级别错误! --☆☆☆☆☆☆☆☆☆"); SystemLog.WriteSystemLog("☆☆☆☆☆☆☆☆☆ -- 调用API核心出错! -- ☆☆☆☆☆☆☆☆☆"); SystemLog.WriteSystemLog("错误模块=" + functionName + "错误操作=" + function + "错误原因=" + e); SystemLog.WriteSystemLog("☆☆☆☆☆☆☆☆☆ --打印核心错误结束 -- ☆☆☆☆☆☆☆☆☆"); client.Logout(); return(null); } }
public static LoginResult Login(string functionName) { K3CloudApiClient client = new K3CloudApiClient(InvokeLoginInfo.URL); string ret = client.ValidateLogin(InvokeLoginInfo.DBID, InvokeLoginInfo.USERNAME, InvokeLoginInfo.PASSWORD, InvokeLoginInfo.LANGUAGE); var result = JObject.Parse(ret)["LoginResultType"].Value <int>(); LoginResult loginResult = null; if (result != 1) { loginResult = JsonExtension.FromJSON <LoginResult>(ret); BussnessLog.WriteBussnessLog(loginResult, functionName, "登录远程Cloud系统API失败!"); } else { BussnessLog.WriteBussnessLog("", functionName, "登录远程Cloud系统API成功!"); loginResult = new LoginResult(); loginResult.client = client; loginResult.LoginResultType = 1; } return(loginResult); }