Ejemplo n.º 1
0
        private static bool checkReadyEx()
        {
            if (isValid())
            {
                if ((mLastConnectedTimestamp != 0.0) && (SessionPack.getNow() > (mLastConnectedTimestamp + 30000.0)))
                {
                    EventCenter.postEvent(EventConst.ON_NET_LONGCONN_KEEPALIVE, null, null);
                    mLastConnectedTimestamp = 0.0;
                }
                return(true);
            }
            if (mReconnectLeft <= 0)
            {
                if (mReconnectLeft == 0)
                {
                    Log.e("Network", "no chance to try connect.");
                    mReconnectLeft = -1;
                }
                return(false);
            }
            double num  = SessionPack.getNow();
            double num2 = mLastConnTimestamp + getSleepTime(mReconnectLeft);

            if ((mReconnectLeft == 3) || (num >= num2))
            {
                mLastConnTimestamp = num;
                mReconnectLeft--;
                Connector.setConnectorStatus(ConntectorStatus.Connecting);
                mSocketClient = new SocketClient();
                HostService.HostInfo info  = HostService.mLongConnHosts.getAvailableHost();
                SocketError          error = mSocketClient.Connect(info.mHost, info.mPort);
                if (error == ((SocketError)((int)SocketError.Success)))
                {
                    Log.i("Network", "connect success.");
                    mLastConnectedTimestamp = num;
                    //NetworkDeviceWatcher.onConnected();
                    mReconnectLeft = 2;
                    mFirstKeepAlivePointAfterConnected = restartKeepAlivePoint(0xbb8);
                    mConnFailedCount = 0;
                    Connector.setConnectorStatus(ConntectorStatus.Connected);
                    return(true);
                }
                if (error == ((SocketError)((int)SocketError.HostNotFound)))
                {
                    HostService.setDNSFailed();
                }
                Log.e("Network", "connect error:" + error.ToString());
                close();
                mConnFailedCount++;
                if (mConnFailedCount >= 3)
                {
                    Log.i("Network", "longconnect is not available as connect failed(3/3).");
                    setAvailable(false);
                    mConnFailedCount = 0;
                }
                HostService.mLongConnHosts.onCurrentHostFailed();
                Connector.setConnectorStatus(ConntectorStatus.Disconnect);
            }
            return(false);
        }
Ejemplo n.º 2
0
        public static object onParserBindOpMobileForReg(SessionPack sessionPack)
        {
            BindOpMobileResponse response = BindOpMobileResponse.ParseFrom(sessionPack.mResponseBuffer);

            if (response == null)
            {
                Log.e("Network", "BindOpMobileResponse parse failed. ");
                return(null);
            }
            if (response.BaseResponse.Ret == -301)
            {
                Log.i("Network", "Need to redirect IDC for BindOpMobileForReg...");
                HostService.updateAuthIDCHost(response.NewHostList);
                HostService.updateAuthBuiltinIP(response.BuiltinIPList);
                Connector.close();
            }
            return(response);
        }
Ejemplo n.º 3
0
        public static void run()
        {
            int millisecondsTimeout = 100;

            HostService.init();
            //NetworkDeviceWatcher.initWatcher();
            while (mRunStatus != 0)
            {
                idleEvent.WaitOne(millisecondsTimeout);
                if (mRunStatus == 1)
                {
                    //Sender.getInstance().checkSender();
                    SessionPackMgr.checkPackTimeout();
                    SessionPackMgr.clearCompletedOrCancel();
                    SessionPackMgr.checkSendTimeout();
                    Connector.checkReady();
                    Sender.getInstance().handler();
                    Receiver.getInstance().handler();
                    millisecondsTimeout = getIdleTime();
                }
            }
            mThread      = null;
            mThreadStart = null;
        }
Ejemplo n.º 4
0
        public static object onParserNewAuthPack(SessionPack sessionPack)
        {
            NewAuthResponse response = NewAuthResponse.ParseFrom(sessionPack.mResponseBuffer);

            if (response == null)
            {
                Log.e("Network", "auth parse failed. ");
                return(null);
            }
            int      uin = (int)response.Uin;
            RetConst ret = (RetConst)response.BaseResponse.Ret;

            Log.d("Network", "auth parsed success. ");
            if ((uin != 0) && (((ret == RetConst.MM_OK) || (ret == RetConst.MM_ERR_CRITICALUPDATE)) || (ret == RetConst.MM_ERR_RECOMMENDEDUPDATE)))
            {
                Log.i("Network", "auth PASS, uin= " + uin);

                HostService.updateAuthBuiltinIP(response.BuiltinIPList);
                SessionPackMgr.setSessionKey(response.SessionKey.ToByteArray());
                SessionPackMgr.getAccount().AutoAuthKey = response.AutoAuthTicket;
                SessionPackMgr.getAccount().setUin(uin);
                SessionPackMgr.getAccount().Nickname = response.NickName.String;
                //SessionPackMgr.getAccount().Headimg=response.WTLoginRspBuff
                SessionPackMgr.setAuthStatus(2);
                return(response);
            }
            Log.e("Network", "auth Failed,ret = " + ret);
            switch (ret)
            {
            case RetConst.MM_ERR_NEEDREG:
                Log.i("Network", "auth result: need register");
                SessionPackMgr.mAuthTicket1 = response.Ticket;
                Connector.close();
                return(response);

            case RetConst.MM_ERR_IDC_REDIRECT:
                Log.i("Network", "Need to redirect IDC for auth ...");
                HostService.updateAuthIDCHost(response.NewHostList);
                HostService.updateAuthBuiltinIP(response.BuiltinIPList);
                Connector.close();
                return(response);

            case RetConst.MM_ERR_QQ_OK_NEED_MOBILE:
                SessionPackMgr.setSessionKey(null);
                return(response);

            default:
                SessionPackMgr.setSessionKey(null);
                SessionPackMgr.getAccount().reset();
                switch (ret)
                {
                case RetConst.MM_ERR_RECOMMENDEDUPDATE:
                    Log.e("Network", "Auth Failed: MM_ERR_RECOMMENDEDUPDATE ");
                    goto Label_022B;

                case RetConst.MM_ERR_CRITICALUPDATE:
                    Log.e("Network", "Auth Failed: MM_ERR_CRITICALUPDATE ");
                    goto Label_022B;

                case RetConst.MM_ERR_AUTH_ANOTHERPLACE:
                    Log.e("Network", "Auth Failed: MM_ERR_AUTH_ANOTHERPLACE ");
                    mKickMessage = response.KickResponse;
                    Sender.getInstance().closeSender();
                    goto Label_022B;

                case RetConst.MM_ERR_NEED_VERIFY:
                    Log.e("Network", "Auth Failed: MM_ERR_NEED_VERIFY ");
                    goto Label_022B;

                case RetConst.MM_ERR_NOUSER:
                    Log.e("Network", "Auth Failed: MM_ERR_NOUSER ");
                    goto Label_022B;

                case RetConst.MM_ERR_PASSWORD:
                    Log.e("Network", "Auth Failed: MM_ERR_PASSWORD ");
                    goto Label_022B;
                }
                break;
            }
Label_022B:
            Connector.close();
            return(response);
        }