Beispiel #1
0
        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);
        }
Beispiel #2
0
        /// <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);
        }