public HubRequest Parse(string data) { var serializer = new JsonNetSerializer(); var deserializedData = serializer.Parse<HubInvocation>(data); var request = new HubRequest(); request.Hub = deserializedData.Hub; request.Method = deserializedData.Method; request.Id = deserializedData.Id; request.State = GetState(deserializedData); request.ParameterValues = (deserializedData.Args != null) ? deserializedData.Args.Select(value => new JRawValue(value)).ToArray() : _emptyArgs; return request; }
private static IDictionary<string, object> GetState(HubInvocation deserializedData) { if (deserializedData.State == null) { return new Dictionary<string, object>(); } // Get the raw JSON string and check if it's over 4K string json = deserializedData.State.ToString(); if (json.Length > 4096) { throw new InvalidOperationException(Resources.Error_StateExceededMaximumLength); } var settings = new JsonSerializerSettings(); settings.Converters.Add(new SipHashBasedDictionaryConverter()); var serializer = new JsonNetSerializer(settings); return serializer.Parse<IDictionary<string, object>>(json); }
public void SendingCommandObjectSetsCommandOnBus() { var messageBus = new Mock<IMessageBus>(); var counters = new PerformanceCounterManager(); Message message = null; messageBus.Setup(m => m.Publish(It.IsAny<Message>())).Returns<Message>(m => { message = m; return TaskAsyncHelper.Empty; }); var serializer = new JsonNetSerializer(); var traceManager = new Mock<ITraceManager>(); var connection = new Connection(messageBus.Object, serializer, "signal", "connectonid", new[] { "a", "signal", "connectionid" }, new string[] { }, traceManager.Object, new AckHandler(completeAcksOnTimeout: false, ackThreshold: TimeSpan.Zero, ackInterval: TimeSpan.Zero), counters, new Mock<IProtectedData>().Object); connection.Send("a", new Command { CommandType = CommandType.AddToGroup, Value = "foo" }); Assert.NotNull(message); Assert.True(message.IsCommand); var command = serializer.Parse<Command>(message.Value, message.Encoding); Assert.Equal(CommandType.AddToGroup, command.CommandType); Assert.Equal("foo", command.Value); }