Skip to content

Commit 6c71114

Browse files
Improve session connection 09/02/2025 (#39)
1 parent 78d70c5 commit 6c71114

File tree

16 files changed

+98
-54
lines changed

16 files changed

+98
-54
lines changed

src/ByteSync.Client/Assets/Resources/Resources.Designer.cs

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/ByteSync.Client/Assets/Resources/Resources.fr.resx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1541,4 +1541,10 @@ Voulez-vous enregistrer ce nouveau Profil de Session avec ce nom ?</value>
15411541
<data name="JoinCloudSession_TimeoutError" xml:space="preserve">
15421542
<value>Le délai d'attente a expiré.</value>
15431543
</data>
1544+
<data name="JoinCloudSession_CanceledByUser" xml:space="preserve">
1545+
<value>Opération annulée par l'utilisateur.</value>
1546+
</data>
1547+
<data name="CreateCloudSession_CanceledByUser" xml:space="preserve">
1548+
<value>Opération annulée par l'utilisateur.</value>
1549+
</data>
15441550
</root>

src/ByteSync.Client/Assets/Resources/Resources.resx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1679,4 +1679,10 @@ Do you want to save this new Session Profile with this name?</value>
16791679
<data name="JoinCloudSession_TimeoutError" xml:space="preserve">
16801680
<value>The waiting period has expired.</value>
16811681
</data>
1682+
<data name="JoinCloudSession_CanceledByUser" xml:space="preserve">
1683+
<value>Operation canceled by the user.</value>
1684+
</data>
1685+
<data name="CreateCloudSession_CanceledByUser" xml:space="preserve">
1686+
<value>Operation canceled by the user.</value>
1687+
</data>
16821688
</root>

src/ByteSync.Client/Business/Sessions/Connecting/CreateSessionStatus.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ public enum CreateSessionStatus
44
{
55
Success = 1,
66
Error = 2,
7+
CanceledByUser = 3,
78
}

src/ByteSync.Client/Interfaces/Services/Sessions/Connecting/ICloudSessionConnectionService.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@ public interface ICloudSessionConnectionService
1515
Task OnJoinSessionError(JoinSessionError joinSessionError);
1616

1717
Task OnCreateSessionError(CreateSessionError createSessionError);
18+
19+
Task HandleJoinSessionError(Exception exception);
1820
}

src/ByteSync.Client/Services/Sessions/Connecting/CloudSessionConnectionService.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,4 +94,29 @@ public async Task OnCreateSessionError(CreateSessionError createSessionError)
9494

9595
await InitializeConnection(SessionConnectionStatus.NoSession);
9696
}
97+
98+
public async Task HandleJoinSessionError(Exception exception)
99+
{
100+
_logger.LogError(exception, "An error occurred while joining the Cloud Session");
101+
102+
var status = JoinSessionStatus.UnexpectedError;
103+
104+
if ((exception is TaskCanceledException || exception.InnerException is TaskCanceledException)
105+
&& _cloudSessionConnectionRepository.CancellationToken.IsCancellationRequested)
106+
{
107+
status = JoinSessionStatus.CanceledByUser;
108+
}
109+
else if (exception is TimeoutException)
110+
{
111+
status = JoinSessionStatus.TimeoutError;
112+
}
113+
114+
var joinSessionError = new JoinSessionError
115+
{
116+
Exception = exception,
117+
Status = status
118+
};
119+
120+
await OnJoinSessionError(joinSessionError);
121+
}
97122
}

src/ByteSync.Client/Services/Sessions/Connecting/CreateSessionService.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,15 +76,21 @@ public CreateSessionService(ICloudSessionConnectionRepository cloudSessionConnec
7676
}
7777
catch (Exception ex)
7878
{
79+
var status = CreateSessionStatus.Error;
80+
if (ex is TaskCanceledException || ex.InnerException is TaskCanceledException)
81+
{
82+
status = CreateSessionStatus.CanceledByUser;
83+
}
84+
7985
var createSessionError = new CreateSessionError
8086
{
8187
Exception = ex,
82-
Status = CreateSessionStatus.Error
88+
Status = status
8389
};
8490

8591
await _cloudSessionConnectionService.OnCreateSessionError(createSessionError);
86-
87-
throw;
92+
93+
return null;
8894
}
8995
}
9096

src/ByteSync.Client/Services/Sessions/Connecting/Joining/CloudSessionPasswordExchangeKeyGivenService.cs

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -90,21 +90,7 @@ await _cloudSessionConnectionRepository.WaitOrThrowAsync(request.SessionId,
9090
}
9191
catch (Exception ex)
9292
{
93-
_logger.LogError(ex, "OnCloudSessionPasswordExchangeKeyGiven");
94-
95-
var status = JoinSessionStatus.UnexpectedError;
96-
if (ex is TimeoutException)
97-
{
98-
status = JoinSessionStatus.TimeoutError;
99-
}
100-
101-
var joinSessionError = new JoinSessionError
102-
{
103-
Exception = ex,
104-
Status = status
105-
};
106-
107-
await _cloudSessionConnectionService.OnJoinSessionError(joinSessionError);
93+
await _cloudSessionConnectionService.HandleJoinSessionError(ex);
10894
}
10995
}
11096
}

src/ByteSync.Client/Services/Sessions/Connecting/Joining/JoinSessionService.cs

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -47,22 +47,7 @@ public async Task JoinSession(string sessionId, string sessionPassword, RunCloud
4747
}
4848
catch (Exception ex)
4949
{
50-
var status = JoinSessionStatus.UnexpectedError;
51-
if (ex is TimeoutException)
52-
{
53-
status = JoinSessionStatus.TimeoutError;
54-
}
55-
56-
57-
var joinSessionError = new JoinSessionError
58-
{
59-
Exception = ex,
60-
Status = status
61-
};
62-
63-
await _cloudSessionConnectionService.OnJoinSessionError(joinSessionError);
64-
65-
throw;
50+
await _cloudSessionConnectionService.HandleJoinSessionError(ex);
6651
}
6752
}
6853

@@ -122,7 +107,8 @@ private async Task DoStartJoinSession(string sessionId, string sessionPassword,
122107
else
123108
{
124109
await _cloudSessionConnectionRepository.WaitOrThrowAsync(sessionId,
125-
data => data.WaitForPasswordExchangeKeyEvent, data => data.WaitTimeSpan, "Keys exchange failed: no key received");
110+
data => data.WaitForPasswordExchangeKeyEvent, data => data.WaitTimeSpan, "Keys exchange failed: no key received",
111+
_cloudSessionConnectionRepository.CancellationToken);
126112
}
127113
}
128114
}

src/ByteSync.Client/Services/Sessions/Connecting/Joining/YouJoinedSessionService.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,8 @@ public async Task Process(CloudSessionResult cloudSessionResult, ValidateJoinClo
107107
var encryptedSessionMemberPrivateData = _dataEncrypter.EncryptSessionMemberPrivateData(sessionMemberPrivateData);
108108
var finalizeParameters = new FinalizeJoinCloudSessionParameters(parameters, encryptedSessionMemberPrivateData);
109109

110-
var finalizeJoinSessionResult = await _cloudSessionApiClient.FinalizeJoinCloudSession(finalizeParameters);
110+
var finalizeJoinSessionResult = await _cloudSessionApiClient.FinalizeJoinCloudSession(finalizeParameters,
111+
_cloudSessionConnectionRepository.CancellationToken);
111112

112113
if (finalizeJoinSessionResult.Status == FinalizeJoinSessionStatuses.AuthIsNotChecked)
113114
{

0 commit comments

Comments
 (0)