private void handleSignal( MessageHeader header, Decoder decoder, CancellationToken cancellationToken ) { var dictionaryEntry = header.Path + "\0" + header.InterfaceName + "\0" + header.Member; if (signalHandlers.TryGetValue(dictionaryEntry, out var handlers) && handlers != null) { Task.Run(() => { var message = new ReceivedMessage(header, decoder); using (message) foreach (SignalHandler handler in handlers.GetInvocationList()) { try { handler(message); decoder.Reset(); } catch (Exception e) { onUnobservedException(e); } } }, cancellationToken); } else { decoder.Dispose(); } }
private void handleMethodReturn(MessageHeader header, Decoder decoder) { try { if (!expectedMessages.TryRemove(header.ReplySerial, out var tcs)) { decoder.Dispose(); throw new InvalidOperationException("Couldn't find the method call for the method return"); } var receivedMessage = new ReceivedMessage(header, decoder); tcs.TrySetResult(receivedMessage); } catch (Exception e) { onUnobservedException(e); } }