From 2a48a9a2c4fdaae1f96527fc5ddc892356098f1b Mon Sep 17 00:00:00 2001 From: Mikael Mengistu Date: Wed, 25 Jul 2018 22:09:03 -0700 Subject: [PATCH] Adding Java Client Overloads up to T8. (#2660) --- .../java/signalr/src/main/java/Action6.java | 6 + .../java/signalr/src/main/java/Action7.java | 6 + .../java/signalr/src/main/java/Action8.java | 6 + .../signalr/src/main/java/HubConnection.java | 39 ++++- .../src/test/java/HubConnectionTest.java | 135 ++++++++++++++++++ 5 files changed, 189 insertions(+), 3 deletions(-) create mode 100644 clients/java/signalr/src/main/java/Action6.java create mode 100644 clients/java/signalr/src/main/java/Action7.java create mode 100644 clients/java/signalr/src/main/java/Action8.java diff --git a/clients/java/signalr/src/main/java/Action6.java b/clients/java/signalr/src/main/java/Action6.java new file mode 100644 index 0000000000..2aca2c1d64 --- /dev/null +++ b/clients/java/signalr/src/main/java/Action6.java @@ -0,0 +1,6 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +public interface Action6 { + void invoke(T1 param1, T2 param2, T3 param3, T4 param4, T5 param5, T6 param6); +} diff --git a/clients/java/signalr/src/main/java/Action7.java b/clients/java/signalr/src/main/java/Action7.java new file mode 100644 index 0000000000..a835b2c686 --- /dev/null +++ b/clients/java/signalr/src/main/java/Action7.java @@ -0,0 +1,6 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +public interface Action7 { + void invoke(T1 param1, T2 param2, T3 param3, T4 param4, T5 param5, T6 param6, T7 param7); +} diff --git a/clients/java/signalr/src/main/java/Action8.java b/clients/java/signalr/src/main/java/Action8.java new file mode 100644 index 0000000000..769d66b343 --- /dev/null +++ b/clients/java/signalr/src/main/java/Action8.java @@ -0,0 +1,6 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +public interface Action8 { + void invoke(T1 param1, T2 param2, T3 param3, T4 param4, T5 param5, T6 param6, T7 param7, T8 param8); +} diff --git a/clients/java/signalr/src/main/java/HubConnection.java b/clients/java/signalr/src/main/java/HubConnection.java index a310f23b1d..ead33c69b6 100644 --- a/clients/java/signalr/src/main/java/HubConnection.java +++ b/clients/java/signalr/src/main/java/HubConnection.java @@ -128,7 +128,8 @@ public class HubConnection { return new Subscription(handlers, action, target); } - public Subscription on(String target, Action3 callback, Class param1, Class param2, Class param3) { + public Subscription on(String target, Action3 callback, + Class param1, Class param2, Class param3) { ActionBase action = params -> { callback.invoke(param1.cast(params[0]), param2.cast(params[1]), param3.cast(params[2])); }; @@ -136,7 +137,8 @@ public class HubConnection { return new Subscription(handlers, action, target); } - public Subscription on(String target, Action4 callback, Class param1, Class param2, Class param3, Class param4) { + public Subscription on(String target, Action4 callback, + Class param1, Class param2, Class param3, Class param4) { ActionBase action = params -> { callback.invoke(param1.cast(params[0]), param2.cast(params[1]), param3.cast(params[2]), param4.cast(params[3])); }; @@ -144,7 +146,8 @@ public class HubConnection { return new Subscription(handlers, action, target); } - public Subscription on(String target, Action5 callback, Class param1, Class param2, Class param3, Class param4, Class param5) { + public Subscription on(String target, Action5 callback, + Class param1, Class param2, Class param3, Class param4, Class param5) { ActionBase action = params -> { callback.invoke(param1.cast(params[0]), param2.cast(params[1]), param3.cast(params[2]), param4.cast(params[3]), param5.cast(params[4])); @@ -153,6 +156,36 @@ public class HubConnection { return new Subscription(handlers, action, target); } + public Subscription on(String target, Action6 callback, + Class param1, Class param2, Class param3, Class param4, Class param5, Class param6) { + ActionBase action = params -> { + callback.invoke(param1.cast(params[0]), param2.cast(params[1]), param3.cast(params[2]), param4.cast(params[3]), + param5.cast(params[4]) ,param6.cast(params[5])); + }; + handlers.put(target, action); + return new Subscription(handlers, action, target); + } + + public Subscription on(String target, Action7 callback, + Class param1, Class param2, Class param3, Class param4, Class param5, Class param6, Class param7) { + ActionBase action = params -> { + callback.invoke(param1.cast(params[0]), param2.cast(params[1]), param3.cast(params[2]), param4.cast(params[3]), + param5.cast(params[4]) ,param6.cast(params[5]), param7.cast(params[6])); + }; + handlers.put(target, action); + return new Subscription(handlers, action, target); + } + + public Subscription on(String target, Action8 callback, + Class param1, Class param2, Class param3, Class param4, Class param5, Class param6, Class param7, Class param8) { + ActionBase action = params -> { + callback.invoke(param1.cast(params[0]), param2.cast(params[1]), param3.cast(params[2]), param4.cast(params[3]), + param5.cast(params[4]) ,param6.cast(params[5]), param7.cast(params[6]), param8.cast(params[7])); + }; + handlers.put(target, action); + return new Subscription(handlers, action, target); + } + public void remove(String name) { handlers.remove(name); } diff --git a/clients/java/signalr/src/test/java/HubConnectionTest.java b/clients/java/signalr/src/test/java/HubConnectionTest.java index 91cbfef9a3..55f30cae70 100644 --- a/clients/java/signalr/src/test/java/HubConnectionTest.java +++ b/clients/java/signalr/src/test/java/HubConnectionTest.java @@ -426,6 +426,140 @@ public class HubConnectionTest { assertEquals(12, value5.get(), 0); } + @Test + public void SendWithSixParamsTriggersOnHandler() throws Exception { + AtomicReference value1 = new AtomicReference<>(); + AtomicReference value2 = new AtomicReference<>(); + AtomicReference value3 = new AtomicReference<>(); + AtomicReference value4 = new AtomicReference<>(); + AtomicReference value5 = new AtomicReference<>(); + AtomicReference value6 = new AtomicReference<>(); + + MockTransport mockTransport = new MockTransport(); + HubConnection hubConnection = new HubConnection("http://example.com", mockTransport); + + hubConnection.on("inc", (param1, param2, param3, param4, param5, param6) -> { + assertNull(value1.get()); + assertNull(value2.get()); + assertNull(value3.get()); + assertNull(value4.get()); + assertNull(value5.get()); + assertNull(value6.get()); + + value1.set(param1); + value2.set(param2); + value3.set(param3); + value4.set(param4); + value5.set(param5); + value6.set(param6); + }, String.class, String.class, String.class, Boolean.class, Double.class, String.class); + + hubConnection.start(); + mockTransport.receiveMessage("{}" + RECORD_SEPARATOR); + mockTransport.receiveMessage("{\"type\":1,\"target\":\"inc\",\"arguments\":[\"A\", \"B\", \"C\",true,12,\"D\"]}" + RECORD_SEPARATOR); + + // Confirming that our handler was called and the correct message was passed in. + assertEquals("A", value1.get()); + assertEquals("B", value2.get()); + assertEquals("C", value3.get()); + assertTrue(value4.get()); + assertEquals(12, value5.get(), 0); + assertEquals("D", value6.get()); + } + + @Test + public void SendWithSevenParamsTriggersOnHandler() throws Exception { + AtomicReference value1 = new AtomicReference<>(); + AtomicReference value2 = new AtomicReference<>(); + AtomicReference value3 = new AtomicReference<>(); + AtomicReference value4 = new AtomicReference<>(); + AtomicReference value5 = new AtomicReference<>(); + AtomicReference value6 = new AtomicReference<>(); + AtomicReference value7 = new AtomicReference<>(); + + MockTransport mockTransport = new MockTransport(); + HubConnection hubConnection = new HubConnection("http://example.com", mockTransport); + + hubConnection.on("inc", (param1, param2, param3, param4, param5, param6, param7) -> { + assertNull(value1.get()); + assertNull(value2.get()); + assertNull(value3.get()); + assertNull(value4.get()); + assertNull(value5.get()); + assertNull(value6.get()); + assertNull(value7.get()); + + value1.set(param1); + value2.set(param2); + value3.set(param3); + value4.set(param4); + value5.set(param5); + value6.set(param6); + value7.set(param7); + }, String.class, String.class, String.class, Boolean.class, Double.class, String.class, String.class); + + hubConnection.start(); + mockTransport.receiveMessage("{}" + RECORD_SEPARATOR); + mockTransport.receiveMessage("{\"type\":1,\"target\":\"inc\",\"arguments\":[\"A\", \"B\", \"C\",true,12,\"D\",\"E\"]}" + RECORD_SEPARATOR); + + // Confirming that our handler was called and the correct message was passed in. + assertEquals("A", value1.get()); + assertEquals("B", value2.get()); + assertEquals("C", value3.get()); + assertTrue(value4.get()); + assertEquals(12, value5.get(), 0); + assertEquals("D", value6.get()); + assertEquals("E", value7.get()); + } + + @Test + public void SendWithEightParamsTriggersOnHandler() throws Exception { + AtomicReference value1 = new AtomicReference<>(); + AtomicReference value2 = new AtomicReference<>(); + AtomicReference value3 = new AtomicReference<>(); + AtomicReference value4 = new AtomicReference<>(); + AtomicReference value5 = new AtomicReference<>(); + AtomicReference value6 = new AtomicReference<>(); + AtomicReference value7 = new AtomicReference<>(); + AtomicReference value8 = new AtomicReference<>(); + + MockTransport mockTransport = new MockTransport(); + HubConnection hubConnection = new HubConnection("http://example.com", mockTransport); + + hubConnection.on("inc", (param1, param2, param3, param4, param5, param6, param7, param8) -> { + assertNull(value1.get()); + assertNull(value2.get()); + assertNull(value3.get()); + assertNull(value4.get()); + assertNull(value5.get()); + assertNull(value6.get()); + assertNull(value7.get()); + assertNull(value8.get()); + + value1.set(param1); + value2.set(param2); + value3.set(param3); + value4.set(param4); + value5.set(param5); + value6.set(param6); + value7.set(param7); + value8.set(param8); + }, String.class, String.class, String.class, Boolean.class, Double.class, String.class, String.class, String.class); + + hubConnection.start(); + mockTransport.receiveMessage("{}" + RECORD_SEPARATOR); + mockTransport.receiveMessage("{\"type\":1,\"target\":\"inc\",\"arguments\":[\"A\", \"B\", \"C\",true,12,\"D\",\"E\",\"F\"]}" + RECORD_SEPARATOR); + // Confirming that our handler was called and the correct message was passed in. + assertEquals("A", value1.get()); + assertEquals("B", value2.get()); + assertEquals("C", value3.get()); + assertTrue(value4.get()); + assertEquals(12, value5.get(), 0); + assertEquals("D", value6.get()); + assertEquals("E", value7.get()); + assertEquals("F", value8.get()); + } + @Test public void ReceiveHandshakeResponseAndMessage() throws Exception { AtomicReference value = new AtomicReference(0.0); @@ -448,6 +582,7 @@ public class HubConnectionTest { assertEquals(1, value.get(), 0); } + private class MockTransport implements Transport { private OnReceiveCallBack onReceiveCallBack; private ArrayList sentMessages = new ArrayList<>();