public static ParallelLoginStatusInfo Clone(AuthStatusInfo info) { ParallelLoginStatusInfo rev = new ParallelLoginStatusInfo(); rev.remainedTimeout = info.remainedTimeout; rev.lastActionMsecTimeStamp = info.lastActionMsecTimeStamp; return(rev); }
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(); } }