diff --git a/build.gradle b/build.gradle index a22db67..befa635 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ plugins { jar.archiveName = project.name + '.jar' // Add SNAPSHOT to make this publish as a beta. -version '1.1.3' +version '1.1.4.0' sourceCompatibility = 1.8 @@ -20,20 +20,20 @@ repositories { dependencies { // Google Flogger - shadow (group: 'com.google.flogger', name: 'flogger-system-backend', version: '0.5.1') - shadow (group: 'com.google.flogger', name: 'flogger', version: '0.5.1') + implementation (group: 'com.google.flogger', name: 'flogger-system-backend', version: '0.5.1') + implementation (group: 'com.google.flogger', name: 'flogger', version: '0.5.1') // Google Gson - shadow (group: 'com.google.code.gson', name: 'gson', version: '2.8.6') + implementation (group: 'com.google.code.gson', name: 'gson', version: '2.8.0') // Google Guava - shadow (group: 'com.google.guava', name: 'guava', version: '29.0-jre') + implementation (group: 'com.google.guava', name: 'guava', version: '19.0') // JUnit testRuntimeOnly (group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.6.0') testImplementation (group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.6.0') - testImplementation (group: 'com.google.code.gson', name: 'gson', version: '2.8.6') - testImplementation (group: 'com.google.guava', name: 'guava', version: '29.0-jre') + testImplementation (group: 'com.google.code.gson', name: 'gson', version: '2.8.0') + testImplementation (group: 'com.google.guava', name: 'guava', version: '19.0') testImplementation (group: 'com.google.flogger', name: 'flogger-system-backend', version: '0.5.1') testImplementation (group: 'com.google.flogger', name: 'flogger', version: '0.5.1') @@ -70,7 +70,6 @@ processResources { } shadowJar { - configurations = [project.configurations.shadow] archiveVersion = version baseName = project.name classifier = '' @@ -78,11 +77,6 @@ shadowJar { minimize { exclude(dependency('com.google.flogger:')) } - dependencies { - exclude(dependency('org.spigotmc:')) - exclude(dependency('org.yaml:')) - exclude(dependency('io.netty:')) - } } test { diff --git a/src/main/java/com/sitrica/japson/client/JapsonClient.java b/src/main/java/com/sitrica/japson/client/JapsonClient.java index daa64ba..30a66a0 100644 --- a/src/main/java/com/sitrica/japson/client/JapsonClient.java +++ b/src/main/java/com/sitrica/japson/client/JapsonClient.java @@ -1,6 +1,7 @@ package com.sitrica.japson.client; import java.net.InetAddress; +import java.net.InetSocketAddress; import java.net.UnknownHostException; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executors; @@ -22,22 +23,17 @@ public class JapsonClient extends Japson { protected long HEARTBEAT = 1000L, DELAY = 1000L; // in milliseconds. - protected final InetAddress address; - protected final int port; + protected final InetSocketAddress address; private boolean check, valid = true; private final Gson gson; public JapsonClient(int port) throws UnknownHostException { - this(InetAddress.getLocalHost(), port); + this(new InetSocketAddress(InetAddress.getLocalHost().getHostName(), port)); } - public JapsonClient(String host, int port) throws UnknownHostException { - this(InetAddress.getByName(host), port); - } - - public JapsonClient(InetAddress address, int port) { - this(address, port, new GsonBuilder() + public JapsonClient(InetSocketAddress address) { + this(address, new GsonBuilder() .enableComplexMapKeySerialization() .serializeNulls() .setLenient() @@ -45,30 +41,25 @@ public JapsonClient(InetAddress address, int port) { } public JapsonClient(int port, Gson gson) throws UnknownHostException { - this(InetAddress.getLocalHost(), port, gson); - } - - public JapsonClient(String host, int port, Gson gson) throws UnknownHostException { - this(InetAddress.getByName(host), port, gson); + this(new InetSocketAddress(InetAddress.getLocalHost().getHostName(), port), gson); } - public JapsonClient(InetAddress address, int port, Gson gson) { + public JapsonClient(InetSocketAddress address, Gson gson) { this.address = address; - this.port = port; this.gson = gson; } public JapsonClient start() { executor.scheduleAtFixedRate(() -> { try { - Boolean success = sendPacket(new HeartbeatPacket(password, port)); + Boolean success = sendPacket(new HeartbeatPacket(password, address.getPort())); if (check && success != null && success) valid = true; } catch (TimeoutException | InterruptedException | ExecutionException e) { valid = false; } }, DELAY, HEARTBEAT, TimeUnit.MILLISECONDS); - logger.atInfo().log("Started Japson client bound to %s.", address.getHostAddress() + ":" + port); + logger.atInfo().log("Started Japson client bound to %s.", address.getHostName() + ":" + address.getPort()); return this; } @@ -124,14 +115,10 @@ public JapsonClient enableDebug() { return this; } - public InetAddress getAddress() { + public InetSocketAddress getAddress() { return address; } - public int getPort() { - return port; - } - public void shutdown() { executor.shutdown(); } @@ -143,11 +130,11 @@ public void kill() { public T sendPacket(ReturnablePacket packet) throws TimeoutException, InterruptedException, ExecutionException { if (check && !valid && !(packet instanceof HeartbeatPacket)) throw new TimeoutException("No connection to the server. Cancelling sending packet."); - return super.sendPacket(address, port, packet, gson); + return super.sendPacket(address, packet, gson); } public void sendPacket(Packet packet) throws InterruptedException, ExecutionException, TimeoutException { - super.sendPacket(address, port, packet, gson); + super.sendPacket(address, packet, gson); } } diff --git a/src/main/java/com/sitrica/japson/server/Connections.java b/src/main/java/com/sitrica/japson/server/Connections.java index 00c6889..f290243 100644 --- a/src/main/java/com/sitrica/japson/server/Connections.java +++ b/src/main/java/com/sitrica/japson/server/Connections.java @@ -1,12 +1,9 @@ package com.sitrica.japson.server; -import java.net.InetAddress; import java.net.InetSocketAddress; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; import java.util.Optional; -import java.util.Set; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -26,7 +23,6 @@ public class Connections extends Handler { private final ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); private final LoadingCache disconnected; private final List connections = new ArrayList<>(); - private final Set listeners = new HashSet<>(); private final JapsonServer japson; public Connections(JapsonServer japson) { @@ -42,68 +38,66 @@ public void onRemoval(RemovalNotification n // Connection was reacquired. if (notification.getCause() == RemovalCause.EXPLICIT) return; - listeners.forEach(listener -> listener.onForget(connection)); + japson.getListeners().forEach(listener -> listener.onForget(connection)); } }).build(new CacheLoader() { @Override public JapsonConnection load(InetSocketAddress address) throws Exception { - return getConnection(address.getAddress(), address.getPort()) + return getConnection(address) .orElseGet(() -> { - JapsonConnection created = new JapsonConnection(address.getAddress(), address.getPort()); + JapsonConnection created = new JapsonConnection(address); connections.add(created); return created; }); } }); - listeners.addAll(japson.getListeners()); executor.schedule(() -> { for (JapsonConnection connection : connections) { if (System.currentTimeMillis() - connection.getLastUpdate() < japson.getTimeout()) continue; - listeners.forEach(listener -> listener.onUnresponsive(connection)); + japson.getListeners().forEach(listener -> listener.onUnresponsive(connection)); connection.unresponsive(); if (connection.getUnresponsiveCount() > japson.getMaxReconnectAttempts()) { - listeners.forEach(listener -> listener.onDisconnect(connection)); - disconnected.put(InetSocketAddress.createUnresolved(connection.getAddress().getHostName(), connection.getPort()), connection); + japson.getListeners().forEach(listener -> listener.onDisconnect(connection)); + disconnected.put(connection.getAddress(), connection); } } connections.removeIf(connection -> connection.getUnresponsiveCount() > japson.getMaxReconnectAttempts()); }, 1, TimeUnit.SECONDS); } - public JapsonConnection addConnection(InetAddress address, int port) { - return getConnection(address, port) + public JapsonConnection addConnection(InetSocketAddress address) { + return getConnection(address) .orElseGet(() -> { - JapsonConnection connection = new JapsonConnection(address, port); - listeners.forEach(listener -> listener.onAcquiredCommunication(connection)); + JapsonConnection connection = new JapsonConnection(address); + japson.getListeners().forEach(listener -> listener.onAcquiredCommunication(connection)); connections.add(connection); return connection; }); } - public Optional getConnection(InetAddress address, int port) { + public Optional getConnection(InetSocketAddress address) { Optional optional = connections.stream() .filter(existing -> existing.getAddress().equals(address)) - .filter(existing -> existing.getPort() == port) .findFirst(); if (optional.isPresent()) return optional; - InetSocketAddress socketAddress = InetSocketAddress.createUnresolved(address.getHostName(), port); - optional = Optional.ofNullable(disconnected.getIfPresent(socketAddress)); + optional = Optional.ofNullable(disconnected.getIfPresent(address)); if (!optional.isPresent()) return Optional.empty(); JapsonConnection connection = optional.get(); - listeners.forEach(listener -> listener.onReacquiredCommunication(connection)); + japson.getListeners().forEach(listener -> listener.onReacquiredCommunication(connection)); connections.add(connection); - disconnected.invalidate(socketAddress); + disconnected.invalidate(address); return optional; } @Override - public JsonObject handle(InetAddress address, int packetPort, JsonObject json) { + public JsonObject handle(InetSocketAddress address, JsonObject json) { int port = json.get("port").getAsInt(); + InetSocketAddress server = InetSocketAddress.createUnresolved(address.getHostName(), port); if (!japson.hasPassword()) { - JapsonConnection connection = addConnection(address, port); + JapsonConnection connection = addConnection(server); connection.update(); } else { Optional optional = Optional.ofNullable(json.get("password")); @@ -111,10 +105,10 @@ public JsonObject handle(InetAddress address, int packetPort, JsonObject json) { return null; String password = optional.get().getAsString(); if (!japson.passwordMatches(password)) { - japson.getLogger().atWarning().log("A packet from %s did not match the correct password!", address.getHostName()); + japson.getLogger().atWarning().log("A packet from %s did not match the correct password!", server.getHostName()); return null; } - JapsonConnection connection = addConnection(address, port); + JapsonConnection connection = addConnection(server); connection.update(); } JsonObject returning = new JsonObject(); @@ -133,20 +127,18 @@ public void kill() { public class JapsonConnection { private long updated = System.currentTimeMillis(); - private final InetAddress address; - private final int port; + private final InetSocketAddress address; private int fails = 0; - public JapsonConnection(InetAddress address, int port) { + public JapsonConnection(InetSocketAddress address) { this.address = address; - this.port = port; } public int getUnresponsiveCount() { return fails; } - public InetAddress getAddress() { + public InetSocketAddress getAddress() { return address; } @@ -158,12 +150,9 @@ public void unresponsive() { fails++; } - public int getPort() { - return port; - } - public void update() { updated = System.currentTimeMillis(); + japson.getListeners().forEach(listener -> listener.onHeartbeat(this)); } } diff --git a/src/main/java/com/sitrica/japson/server/JapsonServer.java b/src/main/java/com/sitrica/japson/server/JapsonServer.java index c081612..893562d 100644 --- a/src/main/java/com/sitrica/japson/server/JapsonServer.java +++ b/src/main/java/com/sitrica/japson/server/JapsonServer.java @@ -2,9 +2,9 @@ import java.net.DatagramSocket; import java.net.InetAddress; +import java.net.InetSocketAddress; import java.net.SocketException; import java.net.UnknownHostException; -import java.util.Collections; import java.util.HashSet; import java.util.Set; import java.util.concurrent.ExecutorService; @@ -20,28 +20,22 @@ public class JapsonServer extends Japson { private final ExecutorService executor = Executors.newCachedThreadPool(); protected final Set listeners = new HashSet<>(); - private final Set ignored = new HashSet<>(); private final SocketHandler handler; - protected final InetAddress address; - protected final int port; + protected final InetSocketAddress address; - private long RECONNECT = 5, EXPIRY = 10; // EXPIRY in minutes, DISCONNECT is amount. + private long RECONNECT = 5, EXPIRY = 10; // EXPIRY in minutes, RECONNECT is amount of trys. private final Connections connections; private final DatagramSocket socket; private final Gson gson; public JapsonServer(int port) throws UnknownHostException, SocketException { - this(InetAddress.getLocalHost(), port); + this(new InetSocketAddress(InetAddress.getLocalHost().getHostName(), port)); } - public JapsonServer(String host, int port) throws UnknownHostException, SocketException { - this(InetAddress.getByName(host), port); - } - - public JapsonServer(InetAddress address, int port) throws SocketException { - this(address, port, new GsonBuilder() + public JapsonServer(InetSocketAddress address) throws SocketException { + this(address, new GsonBuilder() .enableComplexMapKeySerialization() .serializeNulls() .setLenient() @@ -49,24 +43,19 @@ public JapsonServer(InetAddress address, int port) throws SocketException { } public JapsonServer(int port, Gson gson) throws UnknownHostException, SocketException { - this(InetAddress.getLocalHost(), port, gson); - } - - public JapsonServer(String host, int port, Gson gson) throws UnknownHostException, SocketException { - this(InetAddress.getByName(host), port, gson); + this(new InetSocketAddress(InetAddress.getLocalHost().getHostName(), port), gson); } - public JapsonServer(InetAddress address, int port, Gson gson) throws SocketException { + public JapsonServer(InetSocketAddress address, Gson gson) throws SocketException { this.address = address; - this.port = port; this.gson = gson; - this.socket = new DatagramSocket(port, address); + this.socket = new DatagramSocket(address); socket.setSoTimeout(TIMEOUT); connections = new Connections(this); handlers.add(connections); handler = new SocketHandler(PACKET_SIZE, this, socket); executor.execute(handler); - logger.atInfo().log("Started Japson server bound to %s.", address.getHostAddress() + ":" + port); + logger.atInfo().log("Started Japson server bound to %s.", address.getHostName() + ":" + address.getPort()); } @Override @@ -86,10 +75,6 @@ public JapsonServer registerListeners(Listener... listeners) { return this; } - public void addIgnoreDebugPackets(Integer... packets) { - ignored.addAll(Sets.newHashSet(packets)); - } - /** * The amount of minutes to wait before forgetting about a connection. * @@ -123,14 +108,14 @@ public JapsonServer setTimeout(int timeout) { return this; } - public Set getIgnoredPackets() { - return Collections.unmodifiableSet(ignored); - } - public long getMaxReconnectAttempts() { return RECONNECT; } + public InetSocketAddress getAddress() { + return address; + } + public Connections getConnections() { return connections; } @@ -153,14 +138,6 @@ public FluentLogger getLogger() { return logger; } - public InetAddress getAddress() { - return address; - } - - public int getPort() { - return port; - } - public long getTimeout() { return TIMEOUT; } diff --git a/src/main/java/com/sitrica/japson/server/Listener.java b/src/main/java/com/sitrica/japson/server/Listener.java index 44be629..95b3e73 100644 --- a/src/main/java/com/sitrica/japson/server/Listener.java +++ b/src/main/java/com/sitrica/japson/server/Listener.java @@ -12,6 +12,8 @@ public interface Listener { public void onDisconnect(JapsonConnection connection); + public void onHeartbeat(JapsonConnection connection); + public void onForget(JapsonConnection connection); public void onShutdown(); diff --git a/src/main/java/com/sitrica/japson/server/SocketHandler.java b/src/main/java/com/sitrica/japson/server/SocketHandler.java index 3a8e7bb..3e0e742 100644 --- a/src/main/java/com/sitrica/japson/server/SocketHandler.java +++ b/src/main/java/com/sitrica/japson/server/SocketHandler.java @@ -3,7 +3,9 @@ import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; +import java.net.InetSocketAddress; import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; import com.google.common.io.ByteArrayDataInput; import com.google.common.io.ByteArrayDataOutput; @@ -38,22 +40,22 @@ public void run() { .create(packet) .get(); if (input == null) { - japson.getLogger().atSevere().log("Packet received was null or an incorrect readable object for Japson"); - return; + japson.getLogger().atSevere().atMostEvery(30, TimeUnit.SECONDS).log("Packet received was null or an incorrect readable object for Japson"); + continue; } int id = input.readInt(); String data = input.readUTF(); if (data == null) { japson.getLogger().atSevere().log("Received packet with id %s and the json was null.", id); - return; + continue; } if (japson.isDebug() && (japson.getIgnoredPackets().isEmpty() || !japson.getIgnoredPackets().contains(id))) japson.getLogger().atInfo().log("Received packet with id %s and data %s", id, data); // Handle - JsonObject object = JsonParser.parseString(data).getAsJsonObject(); + JsonObject object = new JsonParser().parse(data).getAsJsonObject(); japson.getHandlers().stream() .filter(handler -> handler.getID() == id) - .map(handler -> handler.handle(packet.getAddress(), packet.getPort(), object)) + .map(handler -> handler.handle((InetSocketAddress)packet.getSocketAddress(), object)) .filter(jsonObject -> jsonObject != null) .findFirst() .ifPresent(jsonObject -> { @@ -74,6 +76,9 @@ public void run() { }); } catch (InterruptedException | ExecutionException e) { japson.getListeners().forEach(listener -> listener.onShutdown()); + } catch (Exception e) { + japson.getLogger().atSevere().atMostEvery(30, TimeUnit.SECONDS).withCause(e); + continue; } } } diff --git a/src/main/java/com/sitrica/japson/shared/Executor.java b/src/main/java/com/sitrica/japson/shared/Executor.java index 6a18714..5b4a6e1 100644 --- a/src/main/java/com/sitrica/japson/shared/Executor.java +++ b/src/main/java/com/sitrica/japson/shared/Executor.java @@ -1,6 +1,6 @@ package com.sitrica.japson.shared; -import java.net.InetAddress; +import java.net.InetSocketAddress; import com.google.gson.JsonObject; @@ -13,16 +13,15 @@ public Executor(int id) { /** * A void executor used from an incoming packet matching the id. * - * @param address The InetAddress of the incoming packet. - * @param post The port of the address from the incoming packet. + * @param address The InetSocketAddress of the incoming packet. * @param json The incoming JsonObject from the packet. * @return String of Json for the packet on the client to read. Return null for no response. */ - public abstract void execute(InetAddress address, int port, JsonObject json); + public abstract void execute(InetSocketAddress address, JsonObject json); @Override - public final JsonObject handle(InetAddress address, int port, JsonObject json) { - execute(address, port, json); + public final JsonObject handle(InetSocketAddress address, JsonObject json) { + execute(address, json); return null; } diff --git a/src/main/java/com/sitrica/japson/shared/Handler.java b/src/main/java/com/sitrica/japson/shared/Handler.java index d84ff79..0d1b382 100644 --- a/src/main/java/com/sitrica/japson/shared/Handler.java +++ b/src/main/java/com/sitrica/japson/shared/Handler.java @@ -1,6 +1,6 @@ package com.sitrica.japson.shared; -import java.net.InetAddress; +import java.net.InetSocketAddress; import com.google.gson.JsonObject; @@ -19,11 +19,10 @@ public int getID() { /** * Handle data from an incoming packet matching the id. * - * @param address The InetAddress of the incoming packet. - * @param post The port of the address from the incoming packet. + * @param address The InetSocketAddress of the incoming packet. * @param json The incoming JsonObject from the packet. * @return JsonObject of Json for the packet on the client to read. Return null for no response. */ - public abstract JsonObject handle(InetAddress address, int port, JsonObject json); + public abstract JsonObject handle(InetSocketAddress address, JsonObject json); } diff --git a/src/main/java/com/sitrica/japson/shared/Japson.java b/src/main/java/com/sitrica/japson/shared/Japson.java index ea47ff2..d973623 100644 --- a/src/main/java/com/sitrica/japson/shared/Japson.java +++ b/src/main/java/com/sitrica/japson/shared/Japson.java @@ -4,7 +4,9 @@ import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; +import java.net.InetSocketAddress; import java.net.SocketException; +import java.util.Collections; import java.util.HashSet; import java.util.Set; import java.util.concurrent.CompletableFuture; @@ -26,6 +28,7 @@ public abstract class Japson { protected final FluentLogger logger = FluentLogger.forEnclosingClass(); protected final Set acceptable = new HashSet<>(); protected final Set handlers = new HashSet<>(); + private final Set ignored = new HashSet<>(); protected int PACKET_SIZE = 1024; // UDP standard protected int TIMEOUT = 2000; // milliseconds @@ -81,15 +84,23 @@ public boolean isDebug() { return debug; } - public T sendPacket(InetAddress address, int port, ReturnablePacket packet) throws TimeoutException, InterruptedException, ExecutionException { - return sendPacket(address, port, packet, new GsonBuilder() + public final void addIgnoreDebugPackets(Integer... packets) { + ignored.addAll(Sets.newHashSet(packets)); + } + + public final Set getIgnoredPackets() { + return Collections.unmodifiableSet(ignored); + } + + public T sendPacket(InetSocketAddress address, ReturnablePacket packet) throws TimeoutException, InterruptedException, ExecutionException { + return sendPacket(address, packet, new GsonBuilder() .enableComplexMapKeySerialization() .serializeNulls() .setLenient() .create()); } - public T sendPacket(InetAddress address, int port, ReturnablePacket japsonPacket, Gson gson) throws TimeoutException, InterruptedException, ExecutionException { + public T sendPacket(InetSocketAddress address, ReturnablePacket japsonPacket, Gson gson) throws TimeoutException, InterruptedException, ExecutionException { return CompletableFuture.supplyAsync(() -> { try (DatagramSocket socket = new DatagramSocket()) { ByteArrayDataOutput out = ByteStreams.newDataOutput(); @@ -97,7 +108,7 @@ public T sendPacket(InetAddress address, int port, ReturnablePacket japso out.writeUTF(gson.toJson(japsonPacket.toJson())); byte[] buf = out.toByteArray(); socket.setSoTimeout(TIMEOUT); - socket.send(new DatagramPacket(buf, buf.length, address, port)); + socket.send(new DatagramPacket(buf, buf.length, address)); // Reset the byte buffer buf = new byte[PACKET_SIZE]; ByteArrayDataInput input = new ReceiverFuture(logger, this, socket) @@ -114,9 +125,9 @@ public T sendPacket(InetAddress address, int port, ReturnablePacket japso return null; } String json = input.readUTF(); - if (debug) + if (debug && (ignored.isEmpty() || !ignored.contains(japsonPacket.getID()))) logger.atInfo().log("Sent returnable packet with id %s and recieved %s", japsonPacket.getID(), json); - return japsonPacket.getObject(JsonParser.parseString(json).getAsJsonObject()); + return japsonPacket.getObject(new JsonParser().parse(json).getAsJsonObject()); } catch (SocketException socketException) { logger.atSevere().withCause(socketException) .atMostEvery(15, TimeUnit.SECONDS) @@ -132,25 +143,26 @@ public T sendPacket(InetAddress address, int port, ReturnablePacket japso }).get(TIMEOUT, TimeUnit.MILLISECONDS); } - public void sendPacket(InetAddress address, int port, Packet japsonPacket) throws InterruptedException, ExecutionException, TimeoutException { - sendPacket(address, port, japsonPacket, new GsonBuilder() + public void sendPacket(InetSocketAddress address, Packet japsonPacket) throws InterruptedException, ExecutionException, TimeoutException { + sendPacket(address, japsonPacket, new GsonBuilder() .enableComplexMapKeySerialization() .serializeNulls() .setLenient() .create()); } - public void sendPacket(InetAddress address, int port, Packet japsonPacket, Gson gson) throws InterruptedException, ExecutionException, TimeoutException { + public void sendPacket(InetSocketAddress address, Packet japsonPacket, Gson gson) throws InterruptedException, ExecutionException, TimeoutException { CompletableFuture.runAsync(() -> { try (DatagramSocket socket = new DatagramSocket()) { ByteArrayDataOutput out = ByteStreams.newDataOutput(); out.writeInt(japsonPacket.getID()); - out.writeUTF(gson.toJson(japsonPacket.toJson())); + String data = gson.toJson(japsonPacket.toJson()); + out.writeUTF(data); byte[] buf = out.toByteArray(); socket.setSoTimeout(TIMEOUT); - socket.send(new DatagramPacket(buf, buf.length, address, port)); - if (debug) - logger.atInfo().log("Sent non-returnable packet with id %s", japsonPacket.getID()); + socket.send(new DatagramPacket(buf, buf.length, address)); + if (debug && (ignored.isEmpty() || !ignored.contains(japsonPacket.getID()))) + logger.atInfo().log("Sent non-returnable packet with id %s and data %s", japsonPacket.getID(), data); socket.close(); } catch (SocketException socketException) { logger.atSevere().withCause(socketException) diff --git a/src/test/java/com/sitrica/japson/ClientTest.java b/src/test/java/com/sitrica/japson/ClientTest.java index b40aaae..f90445a 100644 --- a/src/test/java/com/sitrica/japson/ClientTest.java +++ b/src/test/java/com/sitrica/japson/ClientTest.java @@ -1,6 +1,7 @@ package com.sitrica.japson; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.net.UnknownHostException; @@ -20,6 +21,9 @@ public static void setupClient() { } catch (UnknownHostException e) { e.printStackTrace(); } + assertTrue(japson.getAddress().getPort() == 1337); + assertTrue(japson.hasPassword()); + assertTrue(japson.passwordMatches("test-password")); assertNotNull(japson); } diff --git a/src/test/java/com/sitrica/japson/GeneralTest.java b/src/test/java/com/sitrica/japson/GeneralTest.java index 491de73..2b7c06e 100644 --- a/src/test/java/com/sitrica/japson/GeneralTest.java +++ b/src/test/java/com/sitrica/japson/GeneralTest.java @@ -34,7 +34,8 @@ public void startClient() { @Test @Order(3) public void sendPacket() { - assertEquals(ClientTest.japson.getAddress(), ServerTest.japson.getAddress()); + assertEquals(ClientTest.japson.getAddress().getAddress(), ServerTest.japson.getAddress().getAddress()); + //assertEquals(ClientTest.japson.getAddress().getPort(), ServerTest.japson.getAddress().getPort()); String value = "testing Japson", value2 = "testing Japson 2"; String returned = null, second = null; try { diff --git a/src/test/java/com/sitrica/japson/ServerTest.java b/src/test/java/com/sitrica/japson/ServerTest.java index 3bbeb36..cab2f11 100644 --- a/src/test/java/com/sitrica/japson/ServerTest.java +++ b/src/test/java/com/sitrica/japson/ServerTest.java @@ -4,7 +4,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; -import java.net.InetAddress; +import java.net.InetSocketAddress; import java.net.SocketException; import java.net.UnknownHostException; @@ -22,12 +22,13 @@ public static void setupServer() { japson = new JapsonServer(1337) .setPassword("test-password") .enableDebug(); + assertNotNull(japson); japson.registerHandlers(new Handler[] {new Handler(0x01) { @Override - public JsonObject handle(InetAddress address, int port, JsonObject object) { + public JsonObject handle(InetSocketAddress address, JsonObject object) { assertNotNull(object); assertTrue(object.has("value")); - assertEquals(address, japson.getAddress()); + assertEquals(address.getAddress(), japson.getAddress().getAddress()); String value = object.get("value").getAsString(); assertEquals(value, "testing Japson"); JsonObject returnJson = new JsonObject(); @@ -36,10 +37,10 @@ public JsonObject handle(InetAddress address, int port, JsonObject object) { } }, new Handler(0x02) { @Override - public JsonObject handle(InetAddress address, int port, JsonObject object) { + public JsonObject handle(InetSocketAddress address, JsonObject object) { assertNotNull(object); assertTrue(object.has("value2")); - assertEquals(address, japson.getAddress()); + assertEquals(address.getAddress(), japson.getAddress().getAddress()); String value = object.get("value2").getAsString(); assertEquals(value, "testing Japson 2"); JsonObject returnJson = new JsonObject(); @@ -48,10 +49,10 @@ public JsonObject handle(InetAddress address, int port, JsonObject object) { } }, new Executor(0x03) { @Override - public void execute(InetAddress address, int port, JsonObject object) { + public void execute(InetSocketAddress address, JsonObject object) { assertNotNull(object); assertTrue(object.has("test")); - assertEquals(address, japson.getAddress()); + assertEquals(address.getAddress(), japson.getAddress().getAddress()); String value = object.get("test").getAsString(); assertEquals(value, "test"); }