/// <summary> /// Handles Invoke method responses received from the other hub server. /// </summary> protected void OnResponse_VM(object sender, ResponseVMEventArgs e) { var eventArgs = e as InvokeResponseEventArgs; if (eventArgs != null) { var args = new List <object>(eventArgs.MethodArgs); if (eventArgs.Metadata?.ContainsKey(CONNECTION_ID_TOKEN) == true) { var connectionData = eventArgs.Metadata[CONNECTION_ID_TOKEN]; object connectionId = connectionData.StartsWith("[") ? (object)JsonSerializer.Deserialize <List <string> >(connectionData) : connectionData; if (eventArgs.MethodName == nameof(IDotNetifyHubResponse.SendToGroupExceptAsync)) { args.Insert(1, connectionId); } else { args.Insert(0, connectionId); } } ; _hubResponse.GetType().GetMethod(eventArgs.MethodName).Invoke(_hubResponse, args.ToArray()); e.Handled = true; } }
/// <summary> /// Handles incoming Response_VM message. /// </summary> private Task OnResponse_VM(object[] payload) { if (payload == null || payload.Length != 2) { return(Task.CompletedTask); } // SignalR .NET Core is sending an array of arguments. var vmId = $"{payload[0]}"; var rawData = payload[1].ToString(); var data = JsonConvert.DeserializeObject <Dictionary <string, object> >(rawData); var eventArgs = new ResponseVMEventArgs { VMId = vmId, Data = data }; var args = new object[] { this, eventArgs }; foreach (Delegate d in Response_VM?.GetInvocationList()) { d.DynamicInvoke(args); if (eventArgs.Handled) { break; } } // If we get to this point, that means the server holds a view model instance // whose view no longer existed. So, tell the server to dispose the view model. if (!eventArgs.Handled) { var task = Dispose_VM(vmId); } return(Task.CompletedTask); }
/// <summary> /// Handles response received from the server. /// </summary> private void OnResponseReceived(object sender, ResponseVMEventArgs e) { if (e.VMId == _vmId) { e.Handled = true; _viewState.Set(Preprocess(e.Data)); } }
public async Task DotNetifyClient_ResponseCRUD() { var mockHubProxy = Substitute.For <IDotNetifyHubProxy>(); var sut = new DotNetifyClient(mockHubProxy, new DefaultUIThreadDispatcher()); var helloWorldVM = new HelloWorldVM(); await sut.ConnectAsync(nameof(HelloWorldVM), helloWorldVM); var eventArgs = new ResponseVMEventArgs() { VMId = nameof(HelloWorldVM), Data = new Dictionary <string, object> { { "List_itemKey", "Id" } } }; mockHubProxy.Response_VM += Raise.EventWith(new object(), eventArgs); eventArgs.Handled = false; eventArgs.Data = new Dictionary <string, object> { { "List_add", "{ Id: 1, Name: 'Item_A'}" } }; mockHubProxy.Response_VM += Raise.EventWith(new object(), eventArgs); Assert.AreEqual(1, helloWorldVM.List.Count); Assert.AreEqual(1, helloWorldVM.List[0].Id); Assert.AreEqual("Item_A", helloWorldVM.List[0].Name); eventArgs.Handled = false; eventArgs.Data = new Dictionary <string, object> { { "List_update", "{ Id: 1, Name: 'Item_ABC'}" } }; mockHubProxy.Response_VM += Raise.EventWith(new object(), eventArgs); Assert.AreEqual(1, helloWorldVM.List.Count); Assert.AreEqual(1, helloWorldVM.List[0].Id); Assert.AreEqual("Item_ABC", helloWorldVM.List[0].Name); eventArgs.Handled = false; eventArgs.Data = new Dictionary <string, object> { { "List_remove", "1" } }; mockHubProxy.Response_VM += Raise.EventWith(new object(), eventArgs); Assert.AreEqual(0, helloWorldVM.List.Count); }
public async Task DotNetifyClient_Response() { var mockHubProxy = Substitute.For <IDotNetifyHubProxy>(); var sut = new DotNetifyClient(mockHubProxy, new DefaultUIThreadDispatcher()); var helloWorldVM = new HelloWorldVM(); await sut.ConnectAsync(nameof(HelloWorldVM), helloWorldVM); var eventArgs = new ResponseVMEventArgs() { VMId = nameof(HelloWorldVM), Data = new Dictionary <string, object> { { "FirstName", "Hello" }, { "LastName", "World" } } }; mockHubProxy.Response_VM += Raise.EventWith(new object(), eventArgs); Assert.AreEqual(helloWorldVM.FirstName, "Hello"); Assert.AreEqual(helloWorldVM.LastName, "World"); Assert.IsTrue(eventArgs.Handled); }