Skip to content

Commit f7282be

Browse files
committed
Replace workaround with proper ContinueWith syntax
1 parent bdd1eda commit f7282be

File tree

2 files changed

+60
-56
lines changed

2 files changed

+60
-56
lines changed

Signal-Windows.Lib/IncomingMessages.cs

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -39,25 +39,27 @@ public IncomingMessages(CancellationToken token, Task<SignalServiceMessagePipe>
3939
public async Task HandleIncomingMessages()
4040
{
4141
Logger.LogDebug("HandleIncomingMessages()");
42-
var pipe = await PipeTask;
43-
await Task.Delay(1);
44-
while (!Token.IsCancellationRequested)
42+
await PipeTask.ContinueWith(async _ =>
4543
{
46-
try
44+
var pipe = await PipeTask;
45+
while (!Token.IsCancellationRequested)
4746
{
48-
await pipe.ReadBlocking(this);
49-
}
50-
catch (OperationCanceledException)
51-
{
52-
break;
53-
}
54-
catch (Exception e)
55-
{
56-
var line = new StackTrace(e, true).GetFrames()[0].GetFileLineNumber();
57-
Logger.LogWarning("HandleIncomingMessages() failed: {0} occured ({1}):\n{2}", e.GetType(), e.Message, e.StackTrace);
47+
try
48+
{
49+
await pipe.ReadBlocking(this);
50+
}
51+
catch (OperationCanceledException)
52+
{
53+
break;
54+
}
55+
catch (Exception e)
56+
{
57+
var line = new StackTrace(e, true).GetFrames()[0].GetFileLineNumber();
58+
Logger.LogWarning("HandleIncomingMessages() failed: {0} occured ({1}):\n{2}", e.GetType(), e.Message, e.StackTrace);
59+
}
5860
}
59-
}
60-
Logger.LogInformation("HandleIncomingMessages() finished");
61+
Logger.LogInformation("HandleIncomingMessages() finished");
62+
}, TaskContinuationOptions.RunContinuationsAsynchronously);
6163
}
6264

6365
public async Task OnMessage(SignalServiceMessagePipeMessage message)

Signal-Windows.Lib/OutgoingMessages.cs

Lines changed: 42 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -161,56 +161,58 @@ public async Task HandleOutgoingMessages()
161161
Logger.LogDebug("HandleOutgoingMessages()");
162162
try
163163
{
164-
var pipe = await CreatePipeTask;
165-
await Task.Delay(1);
166-
var messageSender = new SignalServiceMessageSender(Token, LibUtils.ServiceConfiguration, Store.Username, Store.Password, (int)Store.DeviceId, new Store(), pipe, null, LibUtils.USER_AGENT);
167-
while (!Token.IsCancellationRequested)
164+
await CreatePipeTask.ContinueWith(async _ =>
168165
{
169-
ISendable sendable = null;
170-
try
171-
{
172-
sendable = Handle.OutgoingQueue.Take(Token);
173-
Logger.LogTrace($"Sending {sendable.GetType()}");
174-
await sendable.Send(messageSender, Token);
175-
}
176-
catch (OperationCanceledException) { return; }
177-
catch (EncapsulatedExceptions exceptions)
166+
var pipe = await CreatePipeTask;
167+
var messageSender = new SignalServiceMessageSender(Token, LibUtils.ServiceConfiguration, Store.Username, Store.Password, (int)Store.DeviceId, new Store(), pipe, null, LibUtils.USER_AGENT);
168+
while (!Token.IsCancellationRequested)
178169
{
179-
sendable.Status = SignalMessageStatus.Confirmed;
180-
Logger.LogError("HandleOutgoingMessages() encountered libsignal exceptions");
181-
IList<UntrustedIdentityException> identityExceptions = exceptions.UntrustedIdentityExceptions;
182-
if (exceptions.NetworkExceptions.Count > 0)
170+
ISendable sendable = null;
171+
try
183172
{
184-
sendable.Status = SignalMessageStatus.Failed_Network;
173+
sendable = Handle.OutgoingQueue.Take(Token);
174+
Logger.LogTrace($"Sending {sendable.GetType()}");
175+
await sendable.Send(messageSender, Token);
185176
}
186-
if (identityExceptions.Count > 0)
177+
catch (OperationCanceledException) { return; }
178+
catch (EncapsulatedExceptions exceptions)
187179
{
188-
sendable.Status = SignalMessageStatus.Failed_Identity;
180+
sendable.Status = SignalMessageStatus.Confirmed;
181+
Logger.LogError("HandleOutgoingMessages() encountered libsignal exceptions");
182+
IList<UntrustedIdentityException> identityExceptions = exceptions.UntrustedIdentityExceptions;
183+
if (exceptions.NetworkExceptions.Count > 0)
184+
{
185+
sendable.Status = SignalMessageStatus.Failed_Network;
186+
}
187+
if (identityExceptions.Count > 0)
188+
{
189+
sendable.Status = SignalMessageStatus.Failed_Identity;
190+
}
191+
foreach (UntrustedIdentityException e in identityExceptions)
192+
{
193+
await Handle.HandleOutgoingKeyChangeLocked(e.E164number, Base64.EncodeBytes(e.IdentityKey.serialize()));
194+
}
189195
}
190-
foreach (UntrustedIdentityException e in identityExceptions)
196+
catch (RateLimitException)
191197
{
198+
Logger.LogError("HandleOutgoingMessages() could not send due to rate limits");
199+
sendable.Status = SignalMessageStatus.Failed_Ratelimit;
200+
}
201+
catch (UntrustedIdentityException e)
202+
{
203+
Logger.LogError("HandleOutgoingMessages() could not send due to untrusted identities");
204+
sendable.Status = SignalMessageStatus.Failed_Identity;
192205
await Handle.HandleOutgoingKeyChangeLocked(e.E164number, Base64.EncodeBytes(e.IdentityKey.serialize()));
193206
}
207+
catch (Exception e)
208+
{
209+
var line = new StackTrace(e, true).GetFrames()[0].GetFileLineNumber();
210+
Logger.LogError("HandleOutgoingMessages() failed in line {0}: {1}\n{2}", line, e.Message, e.StackTrace);
211+
sendable.Status = SignalMessageStatus.Failed_Unknown;
212+
}
213+
await Handle.HandleMessageSentLocked(sendable);
194214
}
195-
catch (RateLimitException)
196-
{
197-
Logger.LogError("HandleOutgoingMessages() could not send due to rate limits");
198-
sendable.Status = SignalMessageStatus.Failed_Ratelimit;
199-
}
200-
catch (UntrustedIdentityException e)
201-
{
202-
Logger.LogError("HandleOutgoingMessages() could not send due to untrusted identities");
203-
sendable.Status = SignalMessageStatus.Failed_Identity;
204-
await Handle.HandleOutgoingKeyChangeLocked(e.E164number, Base64.EncodeBytes(e.IdentityKey.serialize()));
205-
}
206-
catch (Exception e)
207-
{
208-
var line = new StackTrace(e, true).GetFrames()[0].GetFileLineNumber();
209-
Logger.LogError("HandleOutgoingMessages() failed in line {0}: {1}\n{2}", line, e.Message, e.StackTrace);
210-
sendable.Status = SignalMessageStatus.Failed_Unknown;
211-
}
212-
await Handle.HandleMessageSentLocked(sendable);
213-
}
215+
}, TaskContinuationOptions.RunContinuationsAsynchronously);
214216
}
215217
catch (OperationCanceledException) { }
216218
catch (Exception e)

0 commit comments

Comments
 (0)