@@ -161,56 +161,58 @@ public async Task HandleOutgoingMessages()
161
161
Logger . LogDebug ( "HandleOutgoingMessages()" ) ;
162
162
try
163
163
{
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 _ =>
168
165
{
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 )
178
169
{
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
183
172
{
184
- sendable . Status = SignalMessageStatus . Failed_Network ;
173
+ sendable = Handle . OutgoingQueue . Take ( Token ) ;
174
+ Logger . LogTrace ( $ "Sending { sendable . GetType ( ) } ") ;
175
+ await sendable . Send ( messageSender , Token ) ;
185
176
}
186
- if ( identityExceptions . Count > 0 )
177
+ catch ( OperationCanceledException ) { return ; }
178
+ catch ( EncapsulatedExceptions exceptions )
187
179
{
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
+ }
189
195
}
190
- foreach ( UntrustedIdentityException e in identityExceptions )
196
+ catch ( RateLimitException )
191
197
{
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 ;
192
205
await Handle . HandleOutgoingKeyChangeLocked ( e . E164number , Base64 . EncodeBytes ( e . IdentityKey . serialize ( ) ) ) ;
193
206
}
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 ) ;
194
214
}
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 ) ;
214
216
}
215
217
catch ( OperationCanceledException ) { }
216
218
catch ( Exception e )
0 commit comments