Exemplo n.º 1
0
        public void KickAllUsers(LogoutReason reason)
        {
            List <AutoResetEvent> evts = new List <AutoResetEvent>();

            foreach (var user in OnlineUsers.Values.ToArray())
            {
                AutoResetEvent evt = new AutoResetEvent(false);
                KickUser(user.AccountID, 30, reason, evt);
                evts.Add(evt);
            }
            WaitHandle.WaitAll(evts.ToArray());
        }
Exemplo n.º 2
0
        /// <summary>
        /// Sends a logout message to the server. There is no need to call <see cref="ClientBase.Dispose()"/>
        /// right after calling this method.
        /// </summary>
        private void Logout(LogoutReason reason)
        {
            if (Status == ClientStatus.LoggedIn)
            {
                var     args    = new LogoutContent(Name, reason);
                Package package = new Package(BaseCommand.Logout, args.Serialize());
                SendPackageAsyncBase(package);
            }

            if (Status != ClientStatus.Disconnected && Socket.Connected)
            {
                Socket.Shutdown(SocketShutdown.Both);
            }

            ResetClient();
        }
Exemplo n.º 3
0
        public byte[] GetBytes(LogoutReason reason)
        {
            BasicHeaderSegment _basicHeader = new BasicHeaderSegment();
            _basicHeader.Immediate = true;
            _basicHeader.OpCode = OpCode.LogoutRequest;
            _basicHeader.FinalPdu = true;
            _basicHeader.TotalAhsLength = 0;
            _basicHeader.DataSegmentLength = 0;
            _basicHeader.InitiatorTaskTag = _connection.Session.CurrentTaskTag;

            byte[] buffer = new byte[Utilities.RoundUp(48, 4)];
            _basicHeader.WriteTo(buffer, 0);
            buffer[1] |= (byte)((byte)reason & 0x7F);
            Utilities.WriteBytesBigEndian(_connection.Id, buffer, 20);
            Utilities.WriteBytesBigEndian(_connection.Session.CommandSequenceNumber, buffer, 24);
            Utilities.WriteBytesBigEndian(_connection.ExpectedStatusSequenceNumber, buffer, 28);
            return buffer;
        }
Exemplo n.º 4
0
        public void Close(LogoutReason reason)
        {
            LogoutRequest req = new LogoutRequest(this);

            byte[] packet = req.GetBytes(reason);
            _stream.Write(packet, 0, packet.Length);
            _stream.Flush();

            ProtocolDataUnit pdu  = ReadPdu();
            LogoutResponse   resp = ParseResponse <LogoutResponse>(pdu);

            if (resp.Response != LogoutResponseCode.ClosedSuccessfully)
            {
                throw new InvalidProtocolException("Target indicated failure during logout: " + resp.Response);
            }

            _stream.Dispose();
        }
        public byte[] GetBytes(LogoutReason reason)
        {
            BasicHeaderSegment _basicHeader = new BasicHeaderSegment();

            _basicHeader.Immediate         = true;
            _basicHeader.OpCode            = OpCode.LogoutRequest;
            _basicHeader.FinalPdu          = true;
            _basicHeader.TotalAhsLength    = 0;
            _basicHeader.DataSegmentLength = 0;
            _basicHeader.InitiatorTaskTag  = _connection.Session.CurrentTaskTag;

            byte[] buffer = new byte[Utilities.RoundUp(48, 4)];
            _basicHeader.WriteTo(buffer, 0);
            buffer[1] |= (byte)((byte)reason & 0x7F);
            Utilities.WriteBytesBigEndian(_connection.Id, buffer, 20);
            Utilities.WriteBytesBigEndian(_connection.Session.CommandSequenceNumber, buffer, 24);
            Utilities.WriteBytesBigEndian(_connection.ExpectedStatusSequenceNumber, buffer, 28);
            return(buffer);
        }
Exemplo n.º 6
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);
            }
        }
Exemplo n.º 7
0
        ///// <summary>
        ///// 报告登录冲突
        ///// </summary>
        ///// <param name="sender"></param>
        //public static void OnLoginConflict(object sender)
        //{
        //	LoginConflict?.Invoke(sender, EventArgs.Empty);
        //}

        /// <summary>
        /// 引发 <see cref="Logout" /> 事件
        /// </summary>
        public static void OnLogout(object sender, LogoutReason reason)
        {
            var session = sender as Session;

            if (session?.IsLogined != true)
            {
                return;
            }

            session.IsLogined = false;
#pragma warning disable 4014
            session.NetClient.LogoutAsync();
#pragma warning restore 4014
            session.UserProfile.QueryParams.PersistentQueryState(reason != LogoutReason.UserManually);
            session.UserProfile.QueryParams.RequestStopAll();
            foreach (var queryParam in session.UserProfile.QueryParams.Where(s => s.Resign).ToArray())
            {
                queryParam.IsPersistent = false;
                queryParam.IsLoaded     = false;
            }

            var handler = Logout;
            handler?.Invoke(sender, EventArgs.Empty);
        }
Exemplo n.º 8
0
 public LogoutManager(double timeToLogout, LogoutReason reason, bool requested)
 {
     logoutTimer = timeToLogout;
     Reason      = reason;
     Requested   = requested;
 }
Exemplo n.º 9
0
 /// <summary>
 /// Initializes a new instance of the <see cref="LogoutContent"/> class
 /// with the specified arguments.
 /// </summary>
 /// <param name="clientName">The name of the client that has logged out.</param>
 /// <param name="reason">The reason in which the client has logged out.</param>
 /// <param name="message">The outro message for the logout.</param>
 public LogoutContent(string clientName, LogoutReason reason, string message = "")
 {
     ClientName = clientName;
     Reason     = reason;
     Message    = message;
 }
Exemplo n.º 10
0
 void OnLogout(object sender, LogoutEventArgs e)
 {
     this.logoutReason = e.Reason;
     this.logoutEvent.Set();
 }
Exemplo n.º 11
0
        void LogoutInner(LogoutReason reason, ConnectionErrorException connectionError)
        {

            if (!IsLoggedIn)
                return;

            connection.Error -= connection_Error;

            commandsDisposable.Dispose();

            connection.Close();

            reader = null;
            writer = null;
            connection = null;
            responseTracker = null;

            var statusChangeEvents = new List<UserStatusEventArgs>();

            foreach (User user in UserLists.ForwardList.Users.Where(u => u.Status != UserStatus.Offline))
            {
                UserStatus prevStatus = user.Status;
                user.Status = UserStatus.Offline;
                statusChangeEvents.Add(new UserStatusEventArgs(user, UserStatus.Offline, prevStatus, false));
            }

            IsLoggedIn = false;

            OnLoggedOut(new LoggedOutEventArgs(reason, connectionError));

            foreach (UserStatusEventArgs e in statusChangeEvents)
                OnUserStatusChanged(e);

        }
Exemplo n.º 12
0
 public void GetLogoutInfo(out string text, out LogoutReason reason, out int code)
 {
     Native.Converter.GetLogoutInfoFromHandle(this.Data, out text, out reason, out code);
 }
Exemplo n.º 13
0
 internal LoggedOutEventArgs(LogoutReason reason, ConnectionErrorException connectionError)
 {
     Reason = reason;
     ConnectionError = connectionError;
 }
Exemplo n.º 14
0
 protected LoginFailedException(SerializationInfo info, StreamingContext ctxt)
     : base(info, ctxt)
 {
     _errorMessage = info.GetString("ErrorMessage");
     _logoutReason = (LogoutReason)info.GetValue("LogoutReason", typeof(LogoutReason));
 }
Exemplo n.º 15
0
 public LoginFailedException(string errorMessage, LogoutReason logoutReason)
 {
     _errorMessage = errorMessage;
     _logoutReason = logoutReason;
 }
Exemplo n.º 16
0
 /// <summary>
 /// Starts logout.
 /// </summary>
 /// <param name="completed">Callback method.</param>
 /// <param name="logoutReason">The logout reason.</param>
 public static void BeginLogout(Action<Exception> completed, LogoutReason logoutReason = LogoutReason.None)
 {
     MQ1Identity.Logout((o, e) => completed(null), logoutReason);
 }
Exemplo n.º 17
0
 void OnLogout(Object sender, LogoutEventArgs e)
 {
     this.logoutReason = e.Reason;
     this.logoutEvent.Set();
 }
Exemplo n.º 18
0
 public void GetLogoutInfo(out string text, out LogoutReason reason, out int code)
 {
     Native.Converter.GetLogoutInfoFromHandle(this.Data, out text, out reason, out code);
 }