Implement Server Connection State Change Logic and Force Logout

This commit is contained in:
Alan Moon 2025-12-09 16:50:46 -08:00
parent 85e2c3eb70
commit 61723a2d06

View File

@ -408,12 +408,55 @@ namespace qtcnet_client
private void _gatewayService_OnUserForceLogout(object? sender, EventArgs e) private void _gatewayService_OnUserForceLogout(object? sender, EventArgs e)
{ {
throw new NotImplementedException(); KryptonMessageBox.Show("The Server Has Logged You Out. Please Try Signing In Again.", "Uh Oh.",
KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon.Error);
_credentialService.DeleteAccessToken();
SuspendLayout();
// remove controls
Controls.Remove(MainTabControl);
Controls.Remove(CurrentProfileControl);
// dispose of them
MainTabControl?.Dispose();
MainTabControl = null;
CurrentProfileControl?.Dispose();
CurrentProfileControl = null;
// readd login control and branding
Size = LoggedOutSize;
// add branding control
BrandingControl = new()
{
Location = new(-2, -17),
Anchor = AnchorStyles.Top | AnchorStyles.Left
};
// add login control
LoginControl = new()
{
Location = new(12, 233)
};
LoginControl.OnSuccessfulLogin += LoginControl_OnSuccessfulLogin;
LoginControl.OnRegisterPressed += LoginControl_OnRegisterPressed;
Controls.Add(BrandingControl);
Controls.Add(LoginControl);
ResumeLayout(true);
} }
private void _gatewayService_OnServerConfigReceived(object? sender, EventArgs e) private void _gatewayService_OnServerConfigReceived(object? sender, EventArgs e)
{ {
throw new NotImplementedException(); if(e is ServerConfigEventArgs _args)
{
if (InvokeRequired)
Invoke(() => Text = $"{Text} - Connected To {_args.ServerConfig.Name}");
else Text = $"{Text} - Connected To {_args.ServerConfig.Name}";
}
} }
private async void _gatewayService_OnRefreshContactsListReceived(object? sender, EventArgs e) private async void _gatewayService_OnRefreshContactsListReceived(object? sender, EventArgs e)
@ -449,19 +492,39 @@ namespace qtcnet_client
await SetupDirectoryUI(_currentUserDirectory.Data); await SetupDirectoryUI(_currentUserDirectory.Data);
} }
private void _gatewayService_OnServerDisconnect(object? sender, EventArgs e) private async void _gatewayService_OnServerDisconnect(object? sender, EventArgs e)
{ {
throw new NotImplementedException(); if(e is ServerConnectionClosedEventArgs _args)
{
Reconnect: // probably not the best idea to use labels but whatever
var _dialogRes = KryptonMessageBox.Show($"Connection To The Server Lost. Would You Like To Try Again?\n\nError - {_args.Error?.Message}", "Uh Oh.",
KryptonMessageBoxButtons.YesNo, KryptonMessageBoxIcon.Error);
if(_dialogRes == DialogResult.Yes)
{
// completely restart connection
await _gatewayService.StopAsync();
await _gatewayService.StartAsync();
if (_gatewayService.HubConnection?.State == Microsoft.AspNetCore.SignalR.Client.HubConnectionState.Connected)
_gatewayService_OnServerReconnected(sender, e);
else
goto Reconnect;
}
}
} }
private void _gatewayService_OnServerReconnected(object? sender, EventArgs e) private void _gatewayService_OnServerReconnected(object? sender, EventArgs e)
{ {
throw new NotImplementedException(); // reenable interactive controls
CurrentProfileControl?.Enabled = true;
MainTabControl?.Enabled = true;
} }
private void _gatewayService_OnServerReconnecting(object? sender, EventArgs e) private void _gatewayService_OnServerReconnecting(object? sender, EventArgs e)
{ {
throw new NotImplementedException(); // disable interactive controls
CurrentProfileControl?.Enabled = false;
MainTabControl?.Enabled = false;
} }
private void _gatewayService_OnDirectMessageReceived(object? sender, EventArgs e) private void _gatewayService_OnDirectMessageReceived(object? sender, EventArgs e)
@ -529,17 +592,17 @@ namespace qtcnet_client
// subscribe to gateway events // subscribe to gateway events
//_gatewayService.OnServerReconnecting += _gatewayService_OnServerReconnecting; _gatewayService.OnServerReconnecting += _gatewayService_OnServerReconnecting;
//_gatewayService.OnServerReconnected += _gatewayService_OnServerReconnected; _gatewayService.OnServerReconnected += _gatewayService_OnServerReconnected;
//_gatewayService.OnServerDisconnect += _gatewayService_OnServerDisconnect; _gatewayService.OnServerDisconnect += _gatewayService_OnServerDisconnect;
//_gatewayService.OnDirectMessageReceived += _gatewayService_OnDirectMessageReceived; //_gatewayService.OnDirectMessageReceived += _gatewayService_OnDirectMessageReceived;
_gatewayService.OnRoomMessageReceived += _gatewayService_OnRoomMessageReceived; _gatewayService.OnRoomMessageReceived += _gatewayService_OnRoomMessageReceived;
_gatewayService.OnRoomUserListReceived += _gatewayService_OnRoomUserListReceived; _gatewayService.OnRoomUserListReceived += _gatewayService_OnRoomUserListReceived;
_gatewayService.OnRefreshUserListsReceived += _gatewayService_OnRefreshUserListReceived; _gatewayService.OnRefreshUserListsReceived += _gatewayService_OnRefreshUserListReceived;
//_gatewayService.OnRefreshRoomListReceived += _gatewayService_OnRefreshRoomListReceived; _gatewayService.OnRefreshRoomListReceived += _gatewayService_OnRefreshRoomListReceived;
_gatewayService.OnRefreshContactsListReceived += _gatewayService_OnRefreshContactsListReceived; _gatewayService.OnRefreshContactsListReceived += _gatewayService_OnRefreshContactsListReceived;
//_gatewayService.OnServerConfigReceived += _gatewayService_OnServerConfigReceived; _gatewayService.OnServerConfigReceived += _gatewayService_OnServerConfigReceived;
//_gatewayService.OnUserForceLogout += _gatewayService_OnUserForceLogout; _gatewayService.OnUserForceLogout += _gatewayService_OnUserForceLogout;
// start connection // start connection
await _gatewayService.StartAsync(); await _gatewayService.StartAsync();