private dynamic PresentationMessage(InspectionMessage message) { var transportMessage = GetTransportMessage(message.Stream); return(new { message.SourceQueueUri, Message = Encoding.UTF8.GetString(transportMessage.Message), transportMessage.AssemblyQualifiedName, transportMessage.CompressionAlgorithm, transportMessage.CorrelationId, transportMessage.EncryptionAlgorithm, ExpiryDate = transportMessage.ExpiryDate.ToUniversalTime(), transportMessage.FailureMessages, transportMessage.Headers, IgnoreTillDate = transportMessage.IgnoreTillDate.ToUniversalTime(), transportMessage.MessageId, transportMessage.MessageReceivedId, transportMessage.MessageType, transportMessage.PrincipalIdentityName, transportMessage.RecipientInboxWorkQueueUri, SendDate = transportMessage.SendDate.ToUniversalTime(), transportMessage.SenderInboxWorkQueueUri }); }
private async Task <TResponse> InvokeCommandCore <TResponse>(ICommand <TResponse> command, CancellationToken cancellation) { if (WebSocket.State == WebSocketState.Open) { var id = Interlocked.Increment(ref CommandId); var frame = new InspectionMessage { Id = id, Method = command.Name, Params = JObject.Parse(JsonConvert.SerializeObject(command, JsonSerializerSettings)) }; var frameText = JsonConvert.SerializeObject(frame, JsonSerializerSettings); var bytes = Encoding.UTF8.GetBytes(frameText); try { var response = RegisterCommandResponseHandler <TResponse>(id, command, cancellation); await WebSocket.SendAsync(new ArraySegment <byte>(bytes), WebSocketMessageType.Text, endOfMessage : true, cancellation) .ConfigureAwait(false); return(await response.ConfigureAwait(false)); } catch (WebSocketException) { } } await Disconnect().ConfigureAwait(false); throw new CommandFailedException(command, -1, "The inspector is disconnected."); }
private Task DispatchSubscribedEvents(InspectionMessage message) { EventDispatcher dispatcher = null; if (message.Method != null && EventDispatchers?.TryGetValue(message.Method, out dispatcher) == true) { Debug.Assert(dispatcher != null); dispatcher.Dispatch(message.Params); } return(Task.FromResult(true)); }