예제 #1
0
        public ServerLoginUserInfo GetLoginUserInfo(string ipport)
        {
            long accId = -1;

            if (OnlineSessions.TryGetValue(ipport, out accId))
            {
                ServerLoginUserInfo suser = null;
                OnlineUsers.TryGetValue(accId, out suser);
                return(suser);
            }
            return(null);
        }
예제 #2
0
        public bool KickUser(long accountId, int timeOut, LogoutReason reason, AutoResetEvent evt)
        {
            ServerLoginUserInfo user = GetLoginUserInfo(accountId);

            if (user == null)
            {
                return(false);
            }
            try
            {
                PushNotification(new UserNotification_ChangeUserStatus(user.LoginInfo.Info.TaskGroupID, user.AccountID, LoginStatus.离线));
                if (ProjectDoc.Instance.SelectedViewportInfo != null)
                {
                    ProjectDoc.Instance.SelectedViewportInfo.RemoveAllCreatorElements(user.AccountID);
                }
                if (user.LoginInfo.AdjudicatorMode)
                {
                    RemoveMonitorUserFromAllReferrencers(user.AccountID);
                }
                OnlineUsers.Remove(user.AccountID);
                OnlineSessions.Remove(user.LinkIPPortCaption);
                OnlineSessions.Remove(user.ServiceIPPortCaption);
                if (user.Channel.State != CommunicationState.Closed)
                {
                    CommonMethods.CloseChannel(user.Channel, timeOut, evt);
                }
                user.Channel.Closed -= new EventHandler(Channel_Closed);
                user.Context         = null;
                if (UserLogouted != null)
                {
                    UserLogouted(accountId, reason);
                }
                return(true);
            }
            catch (System.Exception ex)
            {
                return(false);
            }
        }