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()); }
/// <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(); }
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; }
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); }
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); } }
///// <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); }
public LogoutManager(double timeToLogout, LogoutReason reason, bool requested) { logoutTimer = timeToLogout; Reason = reason; Requested = requested; }
/// <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; }
void OnLogout(object sender, LogoutEventArgs e) { this.logoutReason = e.Reason; this.logoutEvent.Set(); }
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); }
public void GetLogoutInfo(out string text, out LogoutReason reason, out int code) { Native.Converter.GetLogoutInfoFromHandle(this.Data, out text, out reason, out code); }
internal LoggedOutEventArgs(LogoutReason reason, ConnectionErrorException connectionError) { Reason = reason; ConnectionError = connectionError; }
protected LoginFailedException(SerializationInfo info, StreamingContext ctxt) : base(info, ctxt) { _errorMessage = info.GetString("ErrorMessage"); _logoutReason = (LogoutReason)info.GetValue("LogoutReason", typeof(LogoutReason)); }
public LoginFailedException(string errorMessage, LogoutReason logoutReason) { _errorMessage = errorMessage; _logoutReason = logoutReason; }
/// <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); }
void OnLogout(Object sender, LogoutEventArgs e) { this.logoutReason = e.Reason; this.logoutEvent.Set(); }