private WxSyncCheckResult executeSyncCheckHttpTask(string host, WxAccount wxAccount, WxSyncKey wxSyncKey) { try { HttpTask ht = syncCreateHttpTask(WxHtpUtil.GetSyncCheckParams(host, wxAccount, wxSyncKey)); if (ht != null) { WxSyncCheckResult result = WxRespUtil.ParseWxSyncKeyResult(ht.ExecuteString()); return(result); } } catch { } return(null); }
/// <summary> 执行消息同步循环 </summary> /// <param name="wxAccount"></param> /// <param name="wxSyncKey"></param> private int executeSyncMsgLoop(string host, WxAccount wxAccount, WxSyncKey wxSyncKey) { //默认账号离线状态 int code = WxResultCode.ACCOUNT_OFFLINE; while (true) { WxSyncCheckResult syncCheckResult = executeSyncCheckHttpTask(host, wxAccount, wxSyncKey); #if Debug Console.WriteLine("host = " + host + ", synckey reuslt = " + (syncCheckResult == null ? "null" : syncCheckResult.Retcode.ToString())); #endif if (!syncCheckLoginInState()) { //检测登录状态 break; } else if (syncCheckResult == null) { //心跳请求异常 } else if (syncCheckResult.IsStateSuccess)//0 { //心跳请求成功 if (syncCheckResult.Selector != 0) { //有消息需要同步 WxSyncMsgResult syncMsgResult = executeSyncMsgHttpTask(host, wxAccount, wxSyncKey); #if Debug Console.WriteLine("websync reuslt = " + (syncMsgResult == null ? "null" : syncMsgResult.BaseResponse.Ret.ToString())); #endif if (!syncCheckLoginInState()) { //检测登录状态 break; } else if (syncMsgResult == null) { //同步消息请求异常 } else if (syncMsgResult.IsStateSuccess) { //同步消息请求成功 wxSyncKey = syncMsgResult.SyncCheckKey; OnWxTaskReceiveMsgHandler?.Invoke(wxAccount, syncMsgResult); } else { //同步消息请求失败 code = syncCheckResult.Retcode; break; } } } else { //心跳请求失败 code = syncCheckResult.Retcode; break; } ThreadUtil.Sleep(1000); if (!syncCheckLoginInState()) { break; } } return(code); }