Esempio n. 1
0
            public static ParallelLoginStatusInfo Clone(AuthStatusInfo info)
            {
                ParallelLoginStatusInfo rev = new ParallelLoginStatusInfo();

                rev.remainedTimeout         = info.remainedTimeout;
                rev.lastActionMsecTimeStamp = info.lastActionMsecTimeStamp;
                return(rev);
            }
Esempio n. 2
0
        private void AuthFinish(bool authStatus, int errorCode)
        {
            AuthStatusInfo currInfo;
            TCPClient      client       = null;
            long           connectionId = 0;
            long           currUid;

            lock (interLocker)
            {
                if (status != ClientStatus.Connecting)
                {
                    return;
                }

                if (authStatus)
                {
                    status = ClientStatus.Connected;
                    authStatsInfo.rtmClients.Remove(rtmGate);
                }
                else
                {
                    status              = ClientStatus.Closed;
                    connectionId        = rtmGateConnectionId;
                    rtmGateConnectionId = 0;
                    client              = rtmGate;
                    rtmGate             = null;
                }

                currInfo      = authStatsInfo;
                authStatsInfo = null;
                currUid       = uid;

                syncConnectingEvent.Set();
            }

            if (currInfo != null)
            {
                currInfo.authCallback(pid, currUid, authStatus, errorCode);
            }

            if (connectionId != 0)
            {
                RTMControlCenter.UnregisterSession(connectionId);
            }

            if (client != null)
            {
                client.Close();
            }
        }
        private bool Login(AuthDelegate callback, string token, Dictionary <string, string> attr, string lang = "", int timeout = 0)
        {
            lock (interLocker)
            {
                if (status == ClientStatus.Connected)
                {
                    ClientEngine.RunTask(() =>
                    {
                        callback(projectId, uid, true, fpnn.ErrorCode.FPNN_EC_OK);
                    });

                    return(true);
                }

                if (status == ClientStatus.Connecting)
                {
                    authStatsInfo.authDelegates.Add(callback);
                    return(true);
                }

                status = ClientStatus.Connecting;
                syncConnectingEvent.Reset();

                requireClose = false;

                if (autoReloginInfo != null)
                {
                    autoReloginInfo.Login();
                }
            }

            authStatsInfo = new AuthStatusInfo
            {
                authDelegates = new HashSet <AuthDelegate>()
                {
                    callback
                },
                remainedTimeout = timeout,
            };

            authStatsInfo.token = token;
            authStatsInfo.attr  = attr;
            authStatsInfo.lang  = lang;
            authStatsInfo.lastActionMsecTimeStamp = ClientEngine.GetCurrentMilliseconds();

            //if (rtmGate.IsConnected())
            //{
            //    if (authStatsInfo.remainedTimeout == 0)
            //        authStatsInfo.remainedTimeout = RTMConfig.globalQuestTimeoutSeconds;

            //    RTMControlCenter.RegisterSession(rtmGateConnectionId, this);
            //    Auth(false);
            //}
            //else
            {
                if (authStatsInfo.remainedTimeout == 0)
                {
                    authStatsInfo.remainedTimeout = ((ConnectTimeout == 0) ? RTMConfig.globalConnectTimeoutSeconds : ConnectTimeout)
                                                    + ((QuestTimeout == 0) ? RTMConfig.globalQuestTimeoutSeconds : QuestTimeout);
                }

                rtmGate.AsyncConnect();
            }

            return(true);
        }
        //-------------[ Auth(Login) processing functions ]--------------------------//
        private void AuthFinish(bool authStatus, int errorCode)
        {
            AuthStatusInfo currInfo;
            long           currUid;
            bool           isRelogin = false;
            Int64          reservedRtmGateConnectionId = 0;

            lock (interLocker)
            {
                if (status != ClientStatus.Connecting)
                {
                    return;
                }

                if (authStatus)
                {
                    status = ClientStatus.Connected;
                }
                else
                {
                    status = ClientStatus.Closed;
                    reservedRtmGateConnectionId = rtmGateConnectionId;
                    rtmGateConnectionId         = 0;
                    //-- Reserving rtmGate without closing for quick relogin.
                }

                if (autoReloginInfo != null)
                {
                    isRelogin = autoReloginInfo.canRelogin;

                    if (authStatsInfo != null)
                    {
                        autoReloginInfo.token = authStatsInfo.token;
                        autoReloginInfo.attr  = authStatsInfo.attr;
                        autoReloginInfo.lang  = authStatsInfo.lang;
                    }

                    if (authStatus && !autoReloginInfo.canRelogin)
                    {
                        autoReloginInfo.LoginSuccessful();
                    }
                }

                currInfo      = authStatsInfo;
                authStatsInfo = null;
                currUid       = uid;

                syncConnectingEvent.Set();
            }

            if (reservedRtmGateConnectionId != 0)
            {
                RTMControlCenter.UnregisterSession(reservedRtmGateConnectionId);
            }

            if (currInfo != null)
            {
                foreach (AuthDelegate callback in currInfo.authDelegates)
                {
                    callback(projectId, currUid, authStatus, errorCode);
                }
            }

            if (authStatus)
            {
                processor.BeginCheckPingInterval();
            }
        }