Exemple #1
0
 private static void WriteCancelInvocationMessage(CancelInvocationMessage message, ref MessagePackWriter writer)
 {
     writer.WriteArrayHeader(3);
     writer.Write(HubProtocolConstants.CancelInvocationMessageType);
     PackHeaders(message.Headers, ref writer);
     writer.Write(message.InvocationId);
 }
Exemple #2
0
 private void WriteCancelInvocationMessage(CancelInvocationMessage cancelInvocationMessage, Packer packer)
 {
     packer.PackArrayHeader(3);
     packer.Pack(HubProtocolConstants.CancelInvocationMessageType);
     packer.PackString(cancelInvocationMessage.InvocationId);
     packer.PackDictionary(cancelInvocationMessage.Metadata);
 }
        public void Protocol_Should_Handle_CancelInvocationMessage_With_Header(params string[] kvp)
        {
            var logger       = NullLogger <ProtobufHubProtocol> .Instance;
            var binder       = new Mock <IInvocationBinder>();
            var protobufType = Array.Empty <Type>();

            var protobufHubProtocol = new ProtobufHubProtocol(protobufType, logger);
            var writer = new ArrayBufferWriter <byte>();

            var headers = Helpers.GetHeaders(kvp);
            var cancelInvocationMessage = new CancelInvocationMessage("123")
            {
                Headers = headers
            };

            protobufHubProtocol.WriteMessage(cancelInvocationMessage, writer);
            var encodedMessage = new ReadOnlySequence <byte>(writer.WrittenSpan.ToArray());
            var result         = protobufHubProtocol.TryParseMessage(ref encodedMessage, binder.Object, out var resultCancelInvocationMessage);

            Assert.True(result);
            Assert.NotNull(resultCancelInvocationMessage);
            Assert.IsType <CancelInvocationMessage>(resultCancelInvocationMessage);
            Assert.Equal("123", ((CancelInvocationMessage)resultCancelInvocationMessage).InvocationId);
            var resultHeaders = ((CancelInvocationMessage)resultCancelInvocationMessage).Headers;

            Assert.NotEmpty(resultHeaders);
            Assert.Equal(resultHeaders.Count, headers.Count);
            Assert.Equal(headers, resultHeaders);
        }
        public void Setup()
        {
            var logger = NullLogger <ProtobufHubProtocol> .Instance;
            var types  = Array.Empty <Type>();

            _hubProtocol             = new ProtobufHubProtocol(types, logger);
            _cancelInvocationMessage = new CancelInvocationMessage("123");
            _serializedMessageRef    = _hubProtocol.GetMessageBytes(_cancelInvocationMessage);
        }
        private void WriteCancelInvocationMessage(CancelInvocationMessage cancelInvocationMessage, IBufferWriter <byte> output)
        {
            var protobufCancelInvocationMessage = new CancelInvocationMessageProtobuf
            {
                InvocationId = cancelInvocationMessage.InvocationId
            };

            if (cancelInvocationMessage.Headers != null)
            {
                protobufCancelInvocationMessage.Headers.Add(cancelInvocationMessage.Headers);
            }

            var packedMessage = MessageDescriptor.PackMessage(HubProtocolConstants.CancelInvocationMessageType, protobufCancelInvocationMessage.ToByteArray());

            output.Write(packedMessage);
        }
        public void Protocol_Should_Handle_CancelInvocationMessage_Without_Header(string invocationId)
        {
            var logger       = NullLogger <ProtobufHubProtocol> .Instance;
            var binder       = new Mock <IInvocationBinder>();
            var protobufType = Array.Empty <Type>();

            var protobufHubProtocol = new ProtobufHubProtocol(protobufType, logger);
            var writer = new ArrayBufferWriter <byte>();
            var cancelInvocationMessage = new CancelInvocationMessage(invocationId);

            protobufHubProtocol.WriteMessage(cancelInvocationMessage, writer);
            var encodedMessage = new ReadOnlySequence <byte>(writer.WrittenSpan.ToArray());
            var result         = protobufHubProtocol.TryParseMessage(ref encodedMessage, binder.Object, out var resultCancelInvocationMessage);

            Assert.True(result);
            Assert.NotNull(resultCancelInvocationMessage);
            Assert.IsType <CancelInvocationMessage>(resultCancelInvocationMessage);
            Assert.Equal(invocationId, ((CancelInvocationMessage)resultCancelInvocationMessage).InvocationId);
        }
Exemple #7
0
        private async Task OnCancelInvocationAsync(CancelInvocationMessage message)
        {
            var connection = GetHubConnectionContext(message);

            if (connection == null)
            {
                await SendMessageAsync(CompletionMessage.WithError(message.InvocationId, "No connection found."));

                return;
            }

            //// Check if there is an associated active stream and cancel it if it exists.
            //// The cts will be removed when the streaming method completes executing
            //if (connection.ActiveRequestCancellationSources.TryGetValue(message.InvocationId, out var cts))
            //{
            //    //Logger.CancelStream(message.InvocationId);
            //    cts.Cancel();
            //}
            //else
            //{
            //    // Stream can be canceled on the server while client is canceling stream.
            //    //Logger.UnexpectedCancel();
            //}
        }
Exemple #8
0
 private static void WriteCancelInvocationMessage(CancelInvocationMessage message, Utf8JsonWriter writer)
 {
     WriteInvocationId(message, writer);
 }
Exemple #9
0
 private void WriteCancelInvocationMessage(CancelInvocationMessage message, JsonTextWriter writer)
 {
     writer.WriteStartObject();
     WriteHubInvocationMessageCommon(message, writer, HubProtocolConstants.CancelInvocationMessageType);
     writer.WriteEndObject();
 }
Exemple #10
0
        private HubMessage ParseMessage(string message)
        {
            ReceivedMessage receivedMessage;

            try
            {
                receivedMessage = JsonConvert.DeserializeObject <ReceivedMessage>(message, PayloadSerializerSettings);
                if (receivedMessage.Type == null ||
                    receivedMessage.Type < HubProtocolConstants.InvocationMessageType ||
                    receivedMessage.Type > HubProtocolConstants.CloseMessageType)
                {
                    throw new JsonSerializationException($"type:{receivedMessage.Type}");
                }
            }
            catch (JsonSerializationException)
            {
                Log.Debug("客户端与服务器的协议不一致");
                throw;
            }
            HubMessage hubMessage = null;

            switch (receivedMessage.Type)
            {
            case HubProtocolConstants.InvocationMessageType:
            {
                try
                {
                    InvocationMessage invocation = JsonConvert.DeserializeObject <InvocationMessage>(message, PayloadSerializerSettings);
                    hubMessage = invocation;
                }
                catch (JsonSerializationException)
                {
                    Log.Debug($"客户端与服务器的协议不一致。消息类型:{HubProtocolConstants.InvocationMessageType.ToString()}");
                    throw;
                }
            }
            break;

            case HubProtocolConstants.StreamItemMessageType:
            {
                try
                {
                    StreamItemMessage streamItem = JsonConvert.DeserializeObject <StreamItemMessage>(message, PayloadSerializerSettings);
                    hubMessage = streamItem;
                }
                catch (JsonSerializationException)
                {
                    Log.Debug($"客户端与服务器的协议不一致。消息类型:{HubProtocolConstants.StreamItemMessageType.ToString()}");
                    throw;
                }
            }
            break;

            case HubProtocolConstants.CompletionMessageType:
            {
                try
                {
                    CompletionMessage completion = JsonConvert.DeserializeObject <CompletionMessage>(message, PayloadSerializerSettings);
                    if (completion.Result != null)
                    {
                        completion.HasResult = true;
                    }
                    hubMessage = completion;
                }
                catch (JsonSerializationException)
                {
                    Log.Debug($"客户端与服务器的协议不一致。消息类型:{HubProtocolConstants.CompletionMessageType.ToString()}");
                    throw;
                }
            }
            break;

            case HubProtocolConstants.StreamInvocationMessageType:
            {
                try
                {
                    StreamInvocationMessage streamInvocation = JsonConvert.DeserializeObject <StreamInvocationMessage>(message, PayloadSerializerSettings);
                    hubMessage = streamInvocation;
                }
                catch (JsonSerializationException)
                {
                    Log.Debug($"客户端与服务器的协议不一致。消息类型:{HubProtocolConstants.StreamInvocationMessageType.ToString()}");
                    throw;
                }
            }
            break;

            case HubProtocolConstants.CancelInvocationMessageType:
            {
                try
                {
                    CancelInvocationMessage cancelInvocation = JsonConvert.DeserializeObject <CancelInvocationMessage>(message, PayloadSerializerSettings);
                    hubMessage = cancelInvocation;
                }
                catch (JsonSerializationException)
                {
                    Log.Debug($"客户端与服务器的协议不一致。消息类型:{HubProtocolConstants.CancelInvocationMessageType.ToString()}");
                    throw;
                }
            }
            break;

            case HubProtocolConstants.PingMessageType:
            {
                hubMessage = PingMessage.Instance;
            }
            break;

            case HubProtocolConstants.CloseMessageType:
            {
                try
                {
                    CloseMessage close = JsonConvert.DeserializeObject <CloseMessage>(message, PayloadSerializerSettings);
                    hubMessage = close;
                }
                catch (JsonSerializationException)
                {
                    Log.Debug($"客户端与服务器的协议不一致。消息类型:{HubProtocolConstants.CloseMessageType.ToString()}");
                    throw;
                }
            }
            break;

            default:
            {
                Log.Debug("客户端与服务器的协议不一致。未知的消息类型!");
            }
            break;
            }

            return(hubMessage);
        }