diff --git a/Dorkbox-Network/src/dorkbox/network/Client.java b/Dorkbox-Network/src/dorkbox/network/Client.java
index 36e4203b..75681a79 100644
--- a/Dorkbox-Network/src/dorkbox/network/Client.java
+++ b/Dorkbox-Network/src/dorkbox/network/Client.java
@@ -22,8 +22,6 @@ import java.util.List;
import org.slf4j.Logger;
import dorkbox.network.connection.Connection;
-import dorkbox.network.connection.ConnectionBridge;
-import dorkbox.network.connection.ConnectionBridgeFlushAlways;
import dorkbox.network.connection.EndPointClient;
import dorkbox.network.connection.idle.IdleBridge;
import dorkbox.network.connection.idle.IdleSender;
@@ -48,8 +46,6 @@ public class Client extends EndPointClient {
private volatile int connectionTimeout = 5000; // default
- private volatile ConnectionBridgeFlushAlways connectionBridgeFlushAlways;
-
/**
* Starts a LOCAL only client, with the default local channel name and serialization scheme
*/
@@ -311,22 +307,6 @@ public class Client extends EndPointClient {
}
}
-
- /**
- * Expose methods to send objects to a destination.
- *
- * This returns a bridge that will flush after EVERY send! This is because sending data can occur on the client, outside
- * of the normal eventloop patterns, and it is confusing to the user to have to manually flush the channel each time.
- */
- public ConnectionBridge send() {
- ConnectionBridgeFlushAlways connectionBridgeFlushAlways2 = this.connectionBridgeFlushAlways;
- if (connectionBridgeFlushAlways2 == null) {
- this.connectionBridgeFlushAlways = new ConnectionBridgeFlushAlways(this.connectionManager.getConnection0().send());
- }
-
- return this.connectionBridgeFlushAlways;
- }
-
/**
* Expose methods to send objects to a destination when the connection has become idle.
*/
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/Connection.java b/Dorkbox-Network/src/dorkbox/network/connection/Connection.java
index 25039dec..52347bd1 100644
--- a/Dorkbox-Network/src/dorkbox/network/connection/Connection.java
+++ b/Dorkbox-Network/src/dorkbox/network/connection/Connection.java
@@ -3,6 +3,7 @@ package dorkbox.network.connection;
import org.bouncycastle.crypto.params.ParametersWithIV;
+import dorkbox.network.connection.bridge.ConnectionBridge;
import dorkbox.network.connection.idle.IdleBridge;
import dorkbox.network.connection.idle.IdleSender;
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/ConnectionBridgeServer.java b/Dorkbox-Network/src/dorkbox/network/connection/ConnectionBridgeServer.java
deleted file mode 100644
index 10bae66f..00000000
--- a/Dorkbox-Network/src/dorkbox/network/connection/ConnectionBridgeServer.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package dorkbox.network.connection;
-
-
-public interface ConnectionBridgeServer {
-
- /**
- * Sends the object all server connections over the network using TCP. (or
- * via LOCAL when it's a local channel).
- */
- public void TCP(Object message);
-
- /**
- * Sends the object all server connections over the network using UDP (or
- * via LOCAL when it's a local channel).
- */
- public void UDP(Object message);
-
- /**
- * Sends the object all server connections over the network using UDT. (or
- * via LOCAL when it's a local channel).
- */
- public void UDT(Object message);
-
- /**
- * Exposes methods to send the object to all server connections (except the specified one)
- * over the network. (or via LOCAL when it's a local channel).
- */
- public ConnectionExceptSpecifiedBridgeServer except();
-}
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/ConnectionImpl.java b/Dorkbox-Network/src/dorkbox/network/connection/ConnectionImpl.java
index 3849a39d..b66e0528 100644
--- a/Dorkbox-Network/src/dorkbox/network/connection/ConnectionImpl.java
+++ b/Dorkbox-Network/src/dorkbox/network/connection/ConnectionImpl.java
@@ -19,6 +19,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
import org.bouncycastle.crypto.params.ParametersWithIV;
import org.slf4j.Logger;
+import dorkbox.network.connection.bridge.ConnectionBridge;
import dorkbox.network.connection.idle.IdleBridge;
import dorkbox.network.connection.idle.IdleObjectSender;
import dorkbox.network.connection.idle.IdleSender;
@@ -245,7 +246,7 @@ public class ConnectionImpl extends ChannelInboundHandlerAdapter
if (logger2.isTraceEnabled()) {
logger2.trace("Sending TCP {}", message);
}
- ConnectionPoint tcp = this.channelWrapper.tcp();
+ ConnectionPointWriter tcp = this.channelWrapper.tcp();
tcp.write(message);
return tcp;
} else {
@@ -268,7 +269,7 @@ public class ConnectionImpl extends ChannelInboundHandlerAdapter
if (logger2.isTraceEnabled()) {
logger2.trace("Sending UDP {}", message);
}
- ConnectionPoint udp = this.channelWrapper.udp();
+ ConnectionPointWriter udp = this.channelWrapper.udp();
udp.write(message);
return udp;
} else {
@@ -290,7 +291,7 @@ public class ConnectionImpl extends ChannelInboundHandlerAdapter
if (logger2.isTraceEnabled()) {
logger2.trace("Sending UDT {}", message);
}
- ConnectionPoint udt = this.channelWrapper.udt();
+ ConnectionPointWriter udt = this.channelWrapper.udt();
udt.write(message);
return udt;
} else {
@@ -513,7 +514,7 @@ public class ConnectionImpl extends ChannelInboundHandlerAdapter
*/
@SuppressWarnings("rawtypes")
@Override
- public final void add(Listener listener) {
+ public final void add(ListenerRaw listener) {
if (this.endPoint instanceof EndPointServer) {
// when we are a server, NORMALLY listeners are added at the GLOBAL level
// meaning --
@@ -550,7 +551,7 @@ public class ConnectionImpl extends ChannelInboundHandlerAdapter
*/
@SuppressWarnings("rawtypes")
@Override
- public final void remove(Listener listener) {
+ public final void remove(ListenerRaw listener) {
if (this.endPoint instanceof EndPointServer) {
// when we are a server, NORMALLY listeners are added at the GLOBAL level
// meaning --
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/ConnectionManager.java b/Dorkbox-Network/src/dorkbox/network/connection/ConnectionManager.java
index 166a914b..18d95be9 100644
--- a/Dorkbox-Network/src/dorkbox/network/connection/ConnectionManager.java
+++ b/Dorkbox-Network/src/dorkbox/network/connection/ConnectionManager.java
@@ -21,7 +21,7 @@ import dorkbox.util.ClassHelper;
public class ConnectionManager implements ListenerBridge, ISessionManager {
// these are final, because the REFERENCE to these will never change. They ARE NOT immutable objects (meaning their content can change)
- private final ConcurrentHashMapFactory>> listeners;
+ private final ConcurrentHashMapFactory>> listeners;
private final ConcurrentHashMapFactory localManagers;
private final CopyOnWriteArrayList connections = new CopyOnWriteArrayList();
@@ -37,12 +37,12 @@ public class ConnectionManager implements ListenerBridge, ISessionManager {
this.baseClass = baseClass;
- this.listeners = new ConcurrentHashMapFactory>>() {
+ this.listeners = new ConcurrentHashMapFactory>>() {
private static final long serialVersionUID = 1L;
@Override
- public CopyOnWriteArrayList> createNewOject(Object... args) {
- return new CopyOnWriteArrayList>();
+ public CopyOnWriteArrayList> createNewOject(Object... args) {
+ return new CopyOnWriteArrayList>();
}
};
@@ -72,14 +72,14 @@ public class ConnectionManager implements ListenerBridge, ISessionManager {
*/
@SuppressWarnings("rawtypes")
@Override
- public final void add(Listener listener) {
+ public final void add(ListenerRaw listener) {
if (listener == null) {
throw new IllegalArgumentException("listener cannot be null.");
}
// find the class that uses Listener.class.
Class> clazz = listener.getClass();
- while (clazz.getSuperclass() != Listener.class) {
+ while (clazz.getSuperclass() != ListenerRaw.class) {
clazz = clazz.getSuperclass();
}
@@ -101,17 +101,17 @@ public class ConnectionManager implements ListenerBridge, ISessionManager {
}
// didn't successfully add the listener.
- throw new RuntimeException("Unable to add incompatible connection types as a listener!");
+ throw new IllegalArgumentException("Unable to add incompatible connection type as a listener! : " + this.baseClass);
}
/**
* INTERNAL USE ONLY
*/
@SuppressWarnings({"unchecked","rawtypes"})
- private final void addListener0(Listener listener) {
+ private final void addListener0(ListenerRaw listener) {
Class> type = listener.getObjectType();
- CopyOnWriteArrayList> list = this.listeners.getOrCreate(type);
+ CopyOnWriteArrayList> list = this.listeners.getOrCreate(type);
list.addIfAbsent(listener);
Logger logger2 = this.logger;
@@ -134,14 +134,14 @@ public class ConnectionManager implements ListenerBridge, ISessionManager {
*/
@SuppressWarnings("rawtypes")
@Override
- public final void remove(Listener listener) {
+ public final void remove(ListenerRaw listener) {
if (listener == null) {
throw new IllegalArgumentException("listener cannot be null.");
}
Class> type = listener.getObjectType();
- CopyOnWriteArrayList> list = this.listeners.get(type);
+ CopyOnWriteArrayList> list = this.listeners.get(type);
if (list != null) {
list.remove(listener);
}
@@ -196,18 +196,18 @@ public class ConnectionManager implements ListenerBridge, ISessionManager {
*/
@Override
public final void notifyOnMessage(Connection connection, Object message) {
- notifyOnMessage(connection, message, false);
+ notifyOnMessage0(connection, message, false);
}
- private final void notifyOnMessage(Connection connection, Object message, boolean foundListener) {
+ private final boolean notifyOnMessage0(Connection connection, Object message, boolean foundListener) {
Class> objectType = message.getClass();
// this is the GLOBAL version (unless it's the call from below, then it's the connection scoped version)
- CopyOnWriteArrayList> list = this.listeners.get(objectType);
+ CopyOnWriteArrayList> list = this.listeners.get(objectType);
if (list != null) {
- for (Listener listener : list) {
+ for (ListenerRaw listener : list) {
if (this.shutdown) {
- return;
+ return true;
}
listener.received(connection, message);
@@ -239,26 +239,17 @@ public class ConnectionManager implements ListenerBridge, ISessionManager {
}
if (list != null) {
- for (Listener listener : list) {
+ for (ListenerRaw listener : list) {
if (this.shutdown) {
- return;
+ return true;
}
listener.received(connection, message);
foundListener = true;
}
- } else if (!foundListener) {
- Logger logger2 = this.logger;
- if (logger2.isDebugEnabled()) {
- this.logger.debug("----------- LISTENER NOT REGISTERED FOR TYPE: {}", message.getClass().getSimpleName());
- }
}
}
- // only run a flush once
- if (foundListener) {
- connection.send().flush();
- }
// now have to account for additional connection listener managers (non-global).
ConnectionManager localManager = this.localManagers.get(connection);
@@ -266,8 +257,19 @@ public class ConnectionManager implements ListenerBridge, ISessionManager {
// if we found a listener during THIS method call, we need to let the NEXT method call know,
// so it doesn't spit out error for not handling a message (since that message MIGHT have
// been found in this method).
- localManager.notifyOnMessage(connection, message, foundListener);
+ foundListener |= localManager.notifyOnMessage0(connection, message, foundListener);
}
+
+ // only run a flush once
+ if (foundListener) {
+ connection.send().flush();
+ } else {
+ Logger logger2 = this.logger;
+ if (logger2.isDebugEnabled()) {
+ this.logger.debug("----------- LISTENER NOT REGISTERED FOR TYPE: {}", message.getClass().getSimpleName());
+ }
+ }
+ return foundListener;
}
/**
@@ -277,12 +279,12 @@ public class ConnectionManager implements ListenerBridge, ISessionManager {
*/
@Override
public final void notifyOnIdle(Connection connection) {
- Set>>> entrySet = this.listeners.entrySet();
- CopyOnWriteArrayList> list;
- for (Entry>> entry : entrySet) {
+ Set>>> entrySet = this.listeners.entrySet();
+ CopyOnWriteArrayList> list;
+ for (Entry>> entry : entrySet) {
list = entry.getValue();
if (list != null) {
- for (Listener listener : list) {
+ for (ListenerRaw listener : list) {
if (this.shutdown) {
return;
}
@@ -311,12 +313,12 @@ public class ConnectionManager implements ListenerBridge, ISessionManager {
this.connections.add(connection);
try {
- Set>>> entrySet = this.listeners.entrySet();
- CopyOnWriteArrayList> list;
- for (Entry>> entry : entrySet) {
+ Set>>> entrySet = this.listeners.entrySet();
+ CopyOnWriteArrayList> list;
+ for (Entry>> entry : entrySet) {
list = entry.getValue();
if (list != null) {
- for (Listener listener : list) {
+ for (ListenerRaw listener : list) {
if (this.shutdown) {
return;
}
@@ -343,12 +345,12 @@ public class ConnectionManager implements ListenerBridge, ISessionManager {
*/
@Override
public void connectionDisconnected(Connection connection) {
- Set>>> entrySet = this.listeners.entrySet();
- CopyOnWriteArrayList> list;
- for (Entry>> entry : entrySet) {
+ Set>>> entrySet = this.listeners.entrySet();
+ CopyOnWriteArrayList> list;
+ for (Entry>> entry : entrySet) {
list = entry.getValue();
if (list != null) {
- for (Listener listener : list) {
+ for (ListenerRaw listener : list) {
if (this.shutdown) {
return;
}
@@ -378,12 +380,12 @@ public class ConnectionManager implements ListenerBridge, ISessionManager {
*/
@Override
public void connectionError(Connection connection, Throwable throwable) {
- Set>>> entrySet = this.listeners.entrySet();
- CopyOnWriteArrayList> list;
- for (Entry>> entry : entrySet) {
+ Set>>> entrySet = this.listeners.entrySet();
+ CopyOnWriteArrayList> list;
+ for (Entry>> entry : entrySet) {
list = entry.getValue();
if (list != null) {
- for (Listener listener : list) {
+ for (ListenerRaw listener : list) {
if (this.shutdown) {
return;
}
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/ConnectionPoint.java b/Dorkbox-Network/src/dorkbox/network/connection/ConnectionPoint.java
index 07253146..31121cae 100644
--- a/Dorkbox-Network/src/dorkbox/network/connection/ConnectionPoint.java
+++ b/Dorkbox-Network/src/dorkbox/network/connection/ConnectionPoint.java
@@ -2,11 +2,6 @@ package dorkbox.network.connection;
public interface ConnectionPoint {
- /**
- * Writes data to the pipe. DOES NOT FLUSH the pipe to the wire!
- */
- public void write(Object object);
-
/**
* Waits for the last write to complete. Useful when sending large amounts of data at once.
*/
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/ConnectionPointWriter.java b/Dorkbox-Network/src/dorkbox/network/connection/ConnectionPointWriter.java
new file mode 100644
index 00000000..45c862ea
--- /dev/null
+++ b/Dorkbox-Network/src/dorkbox/network/connection/ConnectionPointWriter.java
@@ -0,0 +1,9 @@
+package dorkbox.network.connection;
+
+public interface ConnectionPointWriter extends ConnectionPoint {
+
+ /**
+ * Writes data to the pipe. DOES NOT FLUSH the pipe to the wire!
+ */
+ public void write(Object object);
+}
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/EndPointClient.java b/Dorkbox-Network/src/dorkbox/network/connection/EndPointClient.java
index 74bcf637..81f53df0 100644
--- a/Dorkbox-Network/src/dorkbox/network/connection/EndPointClient.java
+++ b/Dorkbox-Network/src/dorkbox/network/connection/EndPointClient.java
@@ -3,6 +3,8 @@ package dorkbox.network.connection;
import org.slf4j.Logger;
import dorkbox.network.ConnectionOptions;
+import dorkbox.network.connection.bridge.ConnectionBridge;
+import dorkbox.network.connection.bridge.ConnectionBridgeFlushAlways;
import dorkbox.network.util.exceptions.InitializationException;
import dorkbox.network.util.exceptions.SecurityException;
@@ -16,6 +18,9 @@ public class EndPointClient extends EndPointWithSerialization {
protected volatile boolean registrationComplete = false;
+ private volatile ConnectionBridgeFlushAlways connectionBridgeFlushAlways;
+
+
public EndPointClient(String name, ConnectionOptions options) throws InitializationException, SecurityException {
super(name, options);
}
@@ -68,4 +73,21 @@ public class EndPointClient extends EndPointWithSerialization {
this.registrationInProgress = false;
stop();
}
+
+ /**
+ * Expose methods to send objects to a destination.
+ *
+ * This returns a bridge that will flush after EVERY send! This is because sending data can occur on the client, outside
+ * of the normal eventloop patterns, and it is confusing to the user to have to manually flush the channel each time.
+ */
+ @Override
+ public ConnectionBridge send() {
+ ConnectionBridgeFlushAlways connectionBridgeFlushAlways2 = this.connectionBridgeFlushAlways;
+ if (connectionBridgeFlushAlways2 == null) {
+ ConnectionBridge clientBridge = this.connectionManager.getConnection0().send();
+ this.connectionBridgeFlushAlways = new ConnectionBridgeFlushAlways(clientBridge);
+ }
+
+ return this.connectionBridgeFlushAlways;
+ }
}
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/EndPointServer.java b/Dorkbox-Network/src/dorkbox/network/connection/EndPointServer.java
index 074850ef..717db30a 100644
--- a/Dorkbox-Network/src/dorkbox/network/connection/EndPointServer.java
+++ b/Dorkbox-Network/src/dorkbox/network/connection/EndPointServer.java
@@ -1,6 +1,7 @@
package dorkbox.network.connection;
import dorkbox.network.ConnectionOptions;
+import dorkbox.network.connection.bridge.ConnectionBridgeServer;
import dorkbox.network.util.exceptions.InitializationException;
import dorkbox.network.util.exceptions.SecurityException;
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/EndPointWithSerialization.java b/Dorkbox-Network/src/dorkbox/network/connection/EndPointWithSerialization.java
index 0dfd090f..4da3c8e2 100644
--- a/Dorkbox-Network/src/dorkbox/network/connection/EndPointWithSerialization.java
+++ b/Dorkbox-Network/src/dorkbox/network/connection/EndPointWithSerialization.java
@@ -14,6 +14,7 @@ import org.bouncycastle.crypto.params.IESWithCipherParameters;
import com.esotericsoftware.kryo.factories.SerializerFactory;
import dorkbox.network.ConnectionOptions;
+import dorkbox.network.connection.bridge.ConnectionBridgeBase;
import dorkbox.network.connection.registration.MetaChannel;
import dorkbox.network.connection.registration.Registration;
import dorkbox.network.connection.wrapper.ChannelLocalWrapper;
@@ -33,7 +34,7 @@ import dorkbox.util.crypto.serialization.EccPublicKeySerializer;
import dorkbox.util.crypto.serialization.IesParametersSerializer;
import dorkbox.util.crypto.serialization.IesWithCipherParametersSerializer;
-public class EndPointWithSerialization extends EndPoint {
+public abstract class EndPointWithSerialization extends EndPoint {
protected final ConnectionManager connectionManager;
@@ -219,6 +220,12 @@ public class EndPointWithSerialization extends EndPoint {
return (Collection) this.connectionManager.getConnections();
}
+ /**
+ * Expose methods to send objects to a destination.
+ */
+ public abstract ConnectionBridgeBase send();
+
+
/**
* Closes all connections ONLY (keeps the server/client running)
*/
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/Listener.java b/Dorkbox-Network/src/dorkbox/network/connection/Listener.java
index ae4920be..962f72c9 100644
--- a/Dorkbox-Network/src/dorkbox/network/connection/Listener.java
+++ b/Dorkbox-Network/src/dorkbox/network/connection/Listener.java
@@ -1,98 +1,10 @@
package dorkbox.network.connection;
-import dorkbox.util.ClassHelper;
-public abstract class Listener {
- private final Class> objectType;
- // for compile time code. The generic type parameter #2 (index 1) is pulled from type arguments.
- // generic parameters cannot be primitive types
+public abstract class Listener extends ListenerRaw {
public Listener() {
- this(1);
- }
-
- // for sub-classed listeners, we might have to specify which parameter to use.
- protected Listener(int lastParameterIndex) {
- if (lastParameterIndex > -1) {
- Class> objectType = ClassHelper.getGenericParameterAsClassForSuperClass(getClass(), lastParameterIndex);
-
- if (objectType != null) {
- this.objectType = objectType;
- } else {
- this.objectType = Object.class;
- }
- } else {
- // for when we want to override it
- this.objectType = Object.class;
- }
- }
-
- /**
- * Gets the referenced object type.
- *
- * non-final so this can be overridden by listeners that aren't able to define their type as a generic parameter
- */
- public Class> getObjectType() {
- return this.objectType;
- }
-
- /**
- * Called when the remote end has been connected. This will be invoked before any objects are received by the network.
- * This method should not block for long periods as other network activity will not be processed
- * until it returns.
- */
- public void connected(C connection) {
- }
-
- /**
- * Called when the remote end is no longer connected. There is no guarantee as to what thread will invoke this method.
- *
- * Do not write data in this method! The channel can be closed, resulting in an error if you attempt to do so.
- */
- public void disconnected(C connection) {
- }
-
- /**
- * Called when an object has been received from the remote end of the connection.
- * This method should not block for long periods as other network activity will not be processed until it returns.
- */
- public void received(C connection, M message) {
- }
-
- /**
- * Called when the connection is idle for longer than the {@link EndPoint#setIdleTimeout(idle) idle threshold}.
- */
- public void idle(C connection) {
- }
-
- /**
- * Called when there is an error of some kind during the up/down stream process (to/from the socket or otherwise)
- */
- public void error(C connection, Throwable throwable) {
- throwable.printStackTrace();
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + (this.objectType == null ? 0 : this.objectType.hashCode());
- return result;
- }
-
- // only possible way for it to be equal, is if it is the same object
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
-
- return false;
- }
-
- @Override
- public String toString() {
- return "Listener [type=" + getObjectType() + "]";
+ super(0);
}
}
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/ListenerBridge.java b/Dorkbox-Network/src/dorkbox/network/connection/ListenerBridge.java
index 65b837f7..432edb71 100644
--- a/Dorkbox-Network/src/dorkbox/network/connection/ListenerBridge.java
+++ b/Dorkbox-Network/src/dorkbox/network/connection/ListenerBridge.java
@@ -22,7 +22,7 @@ public interface ListenerBridge {
* the connection is notified on that event (ie, admin type listeners)
*/
@SuppressWarnings("rawtypes")
- public void add(Listener listener);
+ public void add(ListenerRaw listener);
/**
* Removes a listener from this connection/endpoint to NO LONGER be notified
@@ -37,7 +37,7 @@ public interface ListenerBridge {
* the connection is removed
*/
@SuppressWarnings("rawtypes")
- public void remove(Listener listener);
+ public void remove(ListenerRaw listener);
/**
* Removes all registered listeners from this connection/endpoint to NO
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/ListenerRaw.java b/Dorkbox-Network/src/dorkbox/network/connection/ListenerRaw.java
new file mode 100644
index 00000000..2c287b96
--- /dev/null
+++ b/Dorkbox-Network/src/dorkbox/network/connection/ListenerRaw.java
@@ -0,0 +1,103 @@
+package dorkbox.network.connection;
+
+import dorkbox.util.ClassHelper;
+
+public abstract class ListenerRaw {
+
+ private final Class> objectType;
+
+ // for compile time code. The generic type parameter #2 (index 1) is pulled from type arguments.
+ // generic parameters cannot be primitive types
+ public ListenerRaw() {
+ this(1);
+ }
+
+ // for sub-classed listeners, we might have to specify which parameter to use.
+ protected ListenerRaw(int lastParameterIndex) {
+ if (lastParameterIndex > -1) {
+ Class> objectType = ClassHelper.getGenericParameterAsClassForSuperClass(getClass(), lastParameterIndex);
+
+ if (objectType != null) {
+ // SOMETIMES generics get confused on which parameter we actually mean (when sub-classing)
+ if (objectType.isAssignableFrom(Connection.class)) {
+ objectType = ClassHelper.getGenericParameterAsClassForSuperClass(getClass(), lastParameterIndex+1);
+ }
+
+ this.objectType = objectType;
+ } else {
+ this.objectType = Object.class;
+ }
+ } else {
+ // for when we want to override it
+ this.objectType = Object.class;
+ }
+ }
+
+ /**
+ * Gets the referenced object type.
+ *
+ * non-final so this can be overridden by listeners that aren't able to define their type as a generic parameter
+ */
+ public Class> getObjectType() {
+ return this.objectType;
+ }
+
+ /**
+ * Called when the remote end has been connected. This will be invoked before any objects are received by the network.
+ * This method should not block for long periods as other network activity will not be processed
+ * until it returns.
+ */
+ public void connected(C connection) {
+ }
+
+ /**
+ * Called when the remote end is no longer connected. There is no guarantee as to what thread will invoke this method.
+ *
+ * Do not write data in this method! The channel can be closed, resulting in an error if you attempt to do so.
+ */
+ public void disconnected(C connection) {
+ }
+
+ /**
+ * Called when an object has been received from the remote end of the connection.
+ * This method should not block for long periods as other network activity will not be processed until it returns.
+ */
+ public void received(C connection, M message) {
+ }
+
+ /**
+ * Called when the connection is idle for longer than the {@link EndPoint#setIdleTimeout(idle) idle threshold}.
+ */
+ public void idle(C connection) {
+ }
+
+ /**
+ * Called when there is an error of some kind during the up/down stream process (to/from the socket or otherwise)
+ */
+ public void error(C connection, Throwable throwable) {
+ throwable.printStackTrace();
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + (this.objectType == null ? 0 : this.objectType.hashCode());
+ return result;
+ }
+
+ // only possible way for it to be equal, is if it is the same object
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return "Listener [type=" + getObjectType() + "]";
+ }
+}
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/PingSystemListener.java b/Dorkbox-Network/src/dorkbox/network/connection/PingSystemListener.java
index fabf580c..f892a8d1 100644
--- a/Dorkbox-Network/src/dorkbox/network/connection/PingSystemListener.java
+++ b/Dorkbox-Network/src/dorkbox/network/connection/PingSystemListener.java
@@ -1,7 +1,7 @@
package dorkbox.network.connection;
-class PingSystemListener extends Listener {
+class PingSystemListener extends ListenerRaw {
PingSystemListener(String name) {
}
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/RegistrationWrapper.java b/Dorkbox-Network/src/dorkbox/network/connection/RegistrationWrapper.java
index 45276ac3..f6c49ef1 100644
--- a/Dorkbox-Network/src/dorkbox/network/connection/RegistrationWrapper.java
+++ b/Dorkbox-Network/src/dorkbox/network/connection/RegistrationWrapper.java
@@ -83,7 +83,7 @@ public class RegistrationWrapper implements UdpServer {
}
public void releaseChannelMap() {
- // try to unlocal access
+ // try to unlock access
this.channelMapLock.unlock();
}
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/ServerConnectionBridge.java b/Dorkbox-Network/src/dorkbox/network/connection/ServerConnectionBridge.java
index 7dc25939..b5bad512 100644
--- a/Dorkbox-Network/src/dorkbox/network/connection/ServerConnectionBridge.java
+++ b/Dorkbox-Network/src/dorkbox/network/connection/ServerConnectionBridge.java
@@ -2,7 +2,11 @@ package dorkbox.network.connection;
import java.util.Collection;
-public class ServerConnectionBridge implements ConnectionBridgeServer, ConnectionExceptSpecifiedBridgeServer {
+import dorkbox.network.connection.bridge.ConnectionBridgeServer;
+import dorkbox.network.connection.bridge.ConnectionExceptSpecifiedBridgeServer;
+import sun.reflect.generics.reflectiveObjects.NotImplementedException;
+
+public class ServerConnectionBridge implements ConnectionPoint, ConnectionBridgeServer, ConnectionExceptSpecifiedBridgeServer {
private final ConnectionManager connectionManager;
@@ -15,11 +19,13 @@ public class ServerConnectionBridge implements ConnectionBridgeServer, Connectio
* via LOCAL when it's a local channel).
*/
@Override
- public void TCP(Object message) {
- Collection connections0 = connectionManager.getConnections0();
+ public ConnectionPoint TCP(Object message) {
+ Collection connections0 = this.connectionManager.getConnections0();
for (Connection c : connections0) {
c.send().TCP(message);
}
+
+ return this;
}
/**
@@ -27,11 +33,13 @@ public class ServerConnectionBridge implements ConnectionBridgeServer, Connectio
* via LOCAL when it's a local channel).
*/
@Override
- public void UDP(Object message) {
- Collection connections0 = connectionManager.getConnections0();
+ public ConnectionPoint UDP(Object message) {
+ Collection connections0 = this.connectionManager.getConnections0();
for (Connection c : connections0) {
c.send().UDP(message);
}
+
+ return this;
}
/**
@@ -39,13 +47,39 @@ public class ServerConnectionBridge implements ConnectionBridgeServer, Connectio
* via LOCAL when it's a local channel).
*/
@Override
- public void UDT(Object message) {
- Collection connections0 = connectionManager.getConnections0();
+ public ConnectionPoint UDT(Object message) {
+ Collection connections0 = this.connectionManager.getConnections0();
for (Connection c : connections0) {
c.send().UDT(message);
}
+
+ return this;
}
+ /**
+ * Not implemented, since this would cause horrendous problems.
+ *
+ * @see dorkbox.network.connection.ConnectionPoint#waitForWriteToComplete()
+ */
+ @Override
+ public void waitForWriteToComplete() {
+ throw new NotImplementedException();
+ }
+
+ /**
+ * This will flush the data from EVERY connection on this server.
+ *
+ * THIS WILL BE SLOW!
+ *
+ * @see dorkbox.network.connection.ConnectionPoint#flush()
+ */
+ @Override
+ public void flush() {
+ Collection connections0 = this.connectionManager.getConnections0();
+ for (Connection c : connections0) {
+ c.send().flush();
+ }
+ }
/**
* Exposes methods to send the object to all server connections (except the specified one)
@@ -62,7 +96,7 @@ public class ServerConnectionBridge implements ConnectionBridgeServer, Connectio
*/
@Override
public void TCP(Connection connection, Object message) {
- Collection connections0 = connectionManager.getConnections0();
+ Collection connections0 = this.connectionManager.getConnections0();
for (Connection c : connections0) {
if (c != connection) {
c.send().TCP(message);
@@ -76,7 +110,7 @@ public class ServerConnectionBridge implements ConnectionBridgeServer, Connectio
*/
@Override
public void UDP(Connection connection, Object message) {
- Collection connections0 = connectionManager.getConnections0();
+ Collection connections0 = this.connectionManager.getConnections0();
for (Connection c : connections0) {
if (c != connection) {
c.send().UDP(message);
@@ -90,11 +124,23 @@ public class ServerConnectionBridge implements ConnectionBridgeServer, Connectio
*/
@Override
public void UDT(Connection connection, Object message) {
- Collection connections0 = connectionManager.getConnections0();
+ Collection connections0 = this.connectionManager.getConnections0();
for (Connection c : connections0) {
if (c != connection) {
c.send().UDT(message);
}
}
}
+
+ /**
+ * Sends the message to other listeners INSIDE this endpoint for EVERY connection. It does not
+ * send it to a remote address.
+ */
+ @Override
+ public void self(Object message) {
+ Collection connections0 = this.connectionManager.getConnections0();
+ for (Connection c : connections0) {
+ this.connectionManager.notifyOnMessage(c, message);
+ }
+ }
}
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/bridge/ConnectionBridge.java b/Dorkbox-Network/src/dorkbox/network/connection/bridge/ConnectionBridge.java
new file mode 100644
index 00000000..3cf2be82
--- /dev/null
+++ b/Dorkbox-Network/src/dorkbox/network/connection/bridge/ConnectionBridge.java
@@ -0,0 +1,19 @@
+package dorkbox.network.connection.bridge;
+
+import dorkbox.network.connection.Ping;
+
+
+
+public interface ConnectionBridge extends ConnectionBridgeBase {
+ /**
+ * Sends a "ping" packet, trying UDP, then UDT, then TCP (in that order) to measure ROUND TRIP time to the remote connection.
+ *
+ * @return Ping can have a listener attached, which will get called when the ping returns.
+ */
+ public Ping ping();
+
+ /**
+ * Flushes the contents of the TCP/UDP/UDT/etc pipes to the actual transport.
+ */
+ public void flush();
+}
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/ConnectionBridge.java b/Dorkbox-Network/src/dorkbox/network/connection/bridge/ConnectionBridgeBase.java
similarity index 58%
rename from Dorkbox-Network/src/dorkbox/network/connection/ConnectionBridge.java
rename to Dorkbox-Network/src/dorkbox/network/connection/bridge/ConnectionBridgeBase.java
index 7c894c6d..e1cc4bf0 100644
--- a/Dorkbox-Network/src/dorkbox/network/connection/ConnectionBridge.java
+++ b/Dorkbox-Network/src/dorkbox/network/connection/bridge/ConnectionBridgeBase.java
@@ -1,8 +1,10 @@
-package dorkbox.network.connection;
+package dorkbox.network.connection.bridge;
+
+import dorkbox.network.connection.ConnectionPoint;
-public interface ConnectionBridge {
+public interface ConnectionBridgeBase {
/**
* Sends the message to other listeners INSIDE this endpoint. It does not
* send it to a remote address.
@@ -26,16 +28,4 @@ public interface ConnectionBridge {
* local channel).
*/
public ConnectionPoint UDT(Object message);
-
- /**
- * Sends a "ping" packet, trying UDP, then UDT, then TCP (in that order) to measure ROUND TRIP time to the remote connection.
- *
- * @return Ping can have a listener attached, which will get called when the ping returns.
- */
- public Ping ping();
-
- /**
- * Flushes the contents of the TCP/UDP/UDT/etc pipes to the actual transport.
- */
- public void flush();
}
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/ConnectionBridgeFlushAlways.java b/Dorkbox-Network/src/dorkbox/network/connection/bridge/ConnectionBridgeFlushAlways.java
similarity index 89%
rename from Dorkbox-Network/src/dorkbox/network/connection/ConnectionBridgeFlushAlways.java
rename to Dorkbox-Network/src/dorkbox/network/connection/bridge/ConnectionBridgeFlushAlways.java
index f01f7e96..987e2542 100644
--- a/Dorkbox-Network/src/dorkbox/network/connection/ConnectionBridgeFlushAlways.java
+++ b/Dorkbox-Network/src/dorkbox/network/connection/bridge/ConnectionBridgeFlushAlways.java
@@ -1,4 +1,7 @@
-package dorkbox.network.connection;
+package dorkbox.network.connection.bridge;
+
+import dorkbox.network.connection.ConnectionPoint;
+import dorkbox.network.connection.Ping;
public class ConnectionBridgeFlushAlways implements ConnectionBridge {
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/bridge/ConnectionBridgeServer.java b/Dorkbox-Network/src/dorkbox/network/connection/bridge/ConnectionBridgeServer.java
new file mode 100644
index 00000000..8b83c751
--- /dev/null
+++ b/Dorkbox-Network/src/dorkbox/network/connection/bridge/ConnectionBridgeServer.java
@@ -0,0 +1,11 @@
+package dorkbox.network.connection.bridge;
+
+
+public interface ConnectionBridgeServer extends ConnectionBridgeBase {
+
+ /**
+ * Exposes methods to send the object to all server connections (except the specified one)
+ * over the network. (or via LOCAL when it's a local channel).
+ */
+ public ConnectionExceptSpecifiedBridgeServer except();
+}
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/ConnectionExceptSpecifiedBridgeServer.java b/Dorkbox-Network/src/dorkbox/network/connection/bridge/ConnectionExceptSpecifiedBridgeServer.java
similarity index 89%
rename from Dorkbox-Network/src/dorkbox/network/connection/ConnectionExceptSpecifiedBridgeServer.java
rename to Dorkbox-Network/src/dorkbox/network/connection/bridge/ConnectionExceptSpecifiedBridgeServer.java
index ce4645d4..64a9a701 100644
--- a/Dorkbox-Network/src/dorkbox/network/connection/ConnectionExceptSpecifiedBridgeServer.java
+++ b/Dorkbox-Network/src/dorkbox/network/connection/bridge/ConnectionExceptSpecifiedBridgeServer.java
@@ -1,4 +1,6 @@
-package dorkbox.network.connection;
+package dorkbox.network.connection.bridge;
+
+import dorkbox.network.connection.Connection;
public interface ConnectionExceptSpecifiedBridgeServer {
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/idle/IdleListener.java b/Dorkbox-Network/src/dorkbox/network/connection/idle/IdleListener.java
index e08c8f5f..3fcf37c8 100644
--- a/Dorkbox-Network/src/dorkbox/network/connection/idle/IdleListener.java
+++ b/Dorkbox-Network/src/dorkbox/network/connection/idle/IdleListener.java
@@ -1,9 +1,9 @@
package dorkbox.network.connection.idle;
import dorkbox.network.connection.Connection;
-import dorkbox.network.connection.Listener;
+import dorkbox.network.connection.ListenerRaw;
-abstract class IdleListener extends Listener {
+abstract class IdleListener extends ListenerRaw {
/**
* used by the Idle Sender
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/idle/IdleSender.java b/Dorkbox-Network/src/dorkbox/network/connection/idle/IdleSender.java
index 3ad6726b..7cf694f5 100644
--- a/Dorkbox-Network/src/dorkbox/network/connection/idle/IdleSender.java
+++ b/Dorkbox-Network/src/dorkbox/network/connection/idle/IdleSender.java
@@ -2,10 +2,10 @@
package dorkbox.network.connection.idle;
import dorkbox.network.connection.Connection;
-import dorkbox.network.connection.Listener;
+import dorkbox.network.connection.ListenerRaw;
-abstract public class IdleSender extends Listener implements IdleBridge {
+abstract public class IdleSender extends ListenerRaw implements IdleBridge {
volatile boolean started;
IdleListener idleListener;
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/wrapper/ChannelLocalWrapper.java b/Dorkbox-Network/src/dorkbox/network/connection/wrapper/ChannelLocalWrapper.java
index c9ce7e2d..7d5a8cdd 100644
--- a/Dorkbox-Network/src/dorkbox/network/connection/wrapper/ChannelLocalWrapper.java
+++ b/Dorkbox-Network/src/dorkbox/network/connection/wrapper/ChannelLocalWrapper.java
@@ -8,13 +8,13 @@ import java.util.concurrent.atomic.AtomicBoolean;
import org.bouncycastle.crypto.params.ParametersWithIV;
+import dorkbox.network.connection.ConnectionPointWriter;
import dorkbox.network.connection.Connection;
-import dorkbox.network.connection.ConnectionPoint;
import dorkbox.network.connection.EndPoint;
import dorkbox.network.connection.ISessionManager;
import dorkbox.network.connection.registration.MetaChannel;
-public class ChannelLocalWrapper implements ChannelWrapper, ConnectionPoint {
+public class ChannelLocalWrapper implements ChannelWrapper, ConnectionPointWriter {
private final Channel channel;
private String remoteAddress;
@@ -68,17 +68,17 @@ public class ChannelLocalWrapper implements ChannelWrapper, ConnectionPoint {
}
@Override
- public ConnectionPoint tcp() {
+ public ConnectionPointWriter tcp() {
return this;
}
@Override
- public ConnectionPoint udp() {
+ public ConnectionPointWriter udp() {
return this;
}
@Override
- public ConnectionPoint udt() {
+ public ConnectionPointWriter udt() {
return this;
}
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/wrapper/ChannelNetwork.java b/Dorkbox-Network/src/dorkbox/network/connection/wrapper/ChannelNetwork.java
index 09e6690c..07969279 100644
--- a/Dorkbox-Network/src/dorkbox/network/connection/wrapper/ChannelNetwork.java
+++ b/Dorkbox-Network/src/dorkbox/network/connection/wrapper/ChannelNetwork.java
@@ -5,9 +5,9 @@ import io.netty.channel.ChannelFuture;
import java.util.concurrent.atomic.AtomicBoolean;
-import dorkbox.network.connection.ConnectionPoint;
+import dorkbox.network.connection.ConnectionPointWriter;
-public class ChannelNetwork implements ConnectionPoint {
+public class ChannelNetwork implements ConnectionPointWriter {
private volatile ChannelFuture lastWriteFuture;
private final Channel channel;
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/wrapper/ChannelNetworkWrapper.java b/Dorkbox-Network/src/dorkbox/network/connection/wrapper/ChannelNetworkWrapper.java
index 7f701034..d1a14661 100644
--- a/Dorkbox-Network/src/dorkbox/network/connection/wrapper/ChannelNetworkWrapper.java
+++ b/Dorkbox-Network/src/dorkbox/network/connection/wrapper/ChannelNetworkWrapper.java
@@ -8,8 +8,8 @@ import java.net.InetSocketAddress;
import org.bouncycastle.crypto.params.KeyParameter;
import org.bouncycastle.crypto.params.ParametersWithIV;
+import dorkbox.network.connection.ConnectionPointWriter;
import dorkbox.network.connection.Connection;
-import dorkbox.network.connection.ConnectionPoint;
import dorkbox.network.connection.EndPoint;
import dorkbox.network.connection.ISessionManager;
import dorkbox.network.connection.UdpServer;
@@ -104,17 +104,17 @@ public class ChannelNetworkWrapper implements ChannelWrapper {
}
@Override
- public ConnectionPoint tcp() {
+ public ConnectionPointWriter tcp() {
return this.tcp;
}
@Override
- public ConnectionPoint udp() {
+ public ConnectionPointWriter udp() {
return this.udp;
}
@Override
- public ConnectionPoint udt() {
+ public ConnectionPointWriter udt() {
return this.udt;
}
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/wrapper/ChannelNull.java b/Dorkbox-Network/src/dorkbox/network/connection/wrapper/ChannelNull.java
index abbbf8df..69579e13 100644
--- a/Dorkbox-Network/src/dorkbox/network/connection/wrapper/ChannelNull.java
+++ b/Dorkbox-Network/src/dorkbox/network/connection/wrapper/ChannelNull.java
@@ -1,8 +1,9 @@
package dorkbox.network.connection.wrapper;
import dorkbox.network.connection.ConnectionPoint;
+import dorkbox.network.connection.ConnectionPointWriter;
-public class ChannelNull implements ConnectionPoint {
+public class ChannelNull implements ConnectionPointWriter {
private static final ConnectionPoint INSTANCE = new ChannelNull();
public static ConnectionPoint get() {
diff --git a/Dorkbox-Network/src/dorkbox/network/connection/wrapper/ChannelWrapper.java b/Dorkbox-Network/src/dorkbox/network/connection/wrapper/ChannelWrapper.java
index a7ed98a2..0418ca07 100644
--- a/Dorkbox-Network/src/dorkbox/network/connection/wrapper/ChannelWrapper.java
+++ b/Dorkbox-Network/src/dorkbox/network/connection/wrapper/ChannelWrapper.java
@@ -5,15 +5,15 @@ import io.netty.channel.EventLoop;
import org.bouncycastle.crypto.params.ParametersWithIV;
+import dorkbox.network.connection.ConnectionPointWriter;
import dorkbox.network.connection.Connection;
-import dorkbox.network.connection.ConnectionPoint;
import dorkbox.network.connection.ISessionManager;
public interface ChannelWrapper {
- public ConnectionPoint tcp();
- public ConnectionPoint udp();
- public ConnectionPoint udt();
+ public ConnectionPointWriter tcp();
+ public ConnectionPointWriter udp();
+ public ConnectionPointWriter udt();
/**
* Initialize the connection with any extra info that is needed but was unavailable at the channel construction.
diff --git a/Dorkbox-Network/src/dorkbox/network/rmi/RemoteInvocationHandler.java b/Dorkbox-Network/src/dorkbox/network/rmi/RemoteInvocationHandler.java
index 94a70233..6744c67d 100644
--- a/Dorkbox-Network/src/dorkbox/network/rmi/RemoteInvocationHandler.java
+++ b/Dorkbox-Network/src/dorkbox/network/rmi/RemoteInvocationHandler.java
@@ -10,52 +10,52 @@ import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
import dorkbox.network.connection.Connection;
-import dorkbox.network.connection.Listener;
+import dorkbox.network.connection.ListenerRaw;
/** Handles network communication when methods are invoked on a proxy. */
class RemoteInvocationHandler implements InvocationHandler {
private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(RemoteInvocationHandler.class);
- private final Connection connection;
+ private final Connection connection;
- final int objectID;
- private int timeoutMillis = 3000;
+ final int objectID;
+ private int timeoutMillis = 3000;
- private boolean nonBlocking = false;
+ private boolean nonBlocking = false;
private boolean transmitReturnValue = true;
private boolean transmitExceptions = true;
- private Byte lastResponseID;
- private byte nextResponseNum = 1;
+ private Byte lastResponseID;
+ private byte nextResponseNum = 1;
- private Listener responseListener;
+ private ListenerRaw responseListener;
- final ReentrantLock lock = new ReentrantLock();
+ final ReentrantLock lock = new ReentrantLock();
final Condition responseCondition = lock.newCondition();
final ConcurrentHashMap responseTable = new ConcurrentHashMap();
public RemoteInvocationHandler(Connection connection, final int objectID) {
- super();
- this.connection = connection;
- this.objectID = objectID;
+ super();
+ this.connection = connection;
+ this.objectID = objectID;
- responseListener = new Listener() {
+ responseListener = new ListenerRaw() {
@Override
public void received (Connection connection, InvokeMethodResult invokeMethodResult) {
- byte responseID = invokeMethodResult.responseID;
+ byte responseID = invokeMethodResult.responseID;
if (invokeMethodResult.objectID != objectID) {
// System.err.println("FAILED: " + responseID);
// logger.trace("{} FAILED to received data: {} with id ({})", connection, invokeMethodResult.result, invokeMethodResult.responseID);
- return;
- }
+ return;
+ }
// System.err.println("Recieved: " + responseID);
// logger.trace("{} received data: {} with id ({})", connection, invokeMethodResult.result, invokeMethodResult.responseID);
- responseTable.put(responseID, invokeMethodResult);
+ responseTable.put(responseID, invokeMethodResult);
// System.err.println("L");
lock.lock();
@@ -65,18 +65,18 @@ class RemoteInvocationHandler implements InvocationHandler {
lock.unlock();
// System.err.println("U");
}
- }
+ }
- @Override
+ @Override
public void disconnected(Connection connection) {
- close();
- }
- };
+ close();
+ }
+ };
- connection.listeners().add(responseListener);
- }
+ connection.listeners().add(responseListener);
+ }
- @Override
+ @Override
public int hashCode() {
final int prime = 31;
int result = 1;
@@ -123,7 +123,7 @@ class RemoteInvocationHandler implements InvocationHandler {
@Override
- public Object invoke(Object proxy, Method method, Object[] args) throws Exception {
+ public Object invoke(Object proxy, Method method, Object[] args) throws Exception {
if (method.getDeclaringClass() == RemoteObject.class) {
String name = method.getName();
if (name.equals("close")) {
@@ -261,9 +261,9 @@ class RemoteInvocationHandler implements InvocationHandler {
}
}
- private Object waitForResponse(byte responseID) {
+ private Object waitForResponse(byte responseID) {
- long endTime = System.currentTimeMillis() + timeoutMillis;
+ long endTime = System.currentTimeMillis() + timeoutMillis;
long remaining = timeoutMillis;
while (remaining > 0) {
@@ -297,6 +297,6 @@ class RemoteInvocationHandler implements InvocationHandler {
void close() {
- connection.listeners().remove(responseListener);
- }
+ connection.listeners().remove(responseListener);
+ }
}
\ No newline at end of file
diff --git a/Dorkbox-Network/src/dorkbox/network/rmi/RemoteObject.java b/Dorkbox-Network/src/dorkbox/network/rmi/RemoteObject.java
index 50844871..1402b207 100644
--- a/Dorkbox-Network/src/dorkbox/network/rmi/RemoteObject.java
+++ b/Dorkbox-Network/src/dorkbox/network/rmi/RemoteObject.java
@@ -5,7 +5,7 @@ import dorkbox.network.connection.Connection;
/** Provides access to various settings on a remote object.
- * @see RmiBridge#getRemoteObject(dorkbox.networking.connection.interfaces.IConnection.Connection, int, Class...)
+ * @see RmiBridge#getRemoteObject(dorkbox.Connection.connection.interfaces.IConnection.Connection, int, Class...)
* @author Nathan Sweet */
public interface RemoteObject {
/** Sets the milliseconds to wait for a method to return value. Default is 3000. */
@@ -38,7 +38,7 @@ public interface RemoteObject {
/** Waits for the response to the last method invocation to be received or the response timeout to be reached. Must not be
* called from the connection's update thread.
- * @see RmiBridge#getRemoteObject(dorkbox.networking.connection.interfaces.IConnection.Connection, int, Class...) */
+ * @see RmiBridge#getRemoteObject(dorkbox.Connection.connection.interfaces.IConnection.Connection, int, Class...) */
public Object waitForLastResponse ();
/** Gets the ID of response for the last method invocation. */
@@ -48,7 +48,7 @@ public interface RemoteObject {
* from the connection's update thread. Response IDs use a six bit identifier, with one identifier reserved for "no response".
* This means that this method should be called to get the result for a non-blocking call before an additional 63 non-blocking
* calls are made, or risk undefined behavior due to identical IDs.
- * @see RmiBridge#getRemoteObject(dorkbox.networking.connection.interfaces.IConnection.Connection, int, Class...) */
+ * @see RmiBridge#getRemoteObject(dorkbox.Connection.connection.interfaces.IConnection.Connection, int, Class...) */
public Object waitForResponse (byte responseID);
/** Causes this RemoteObject to stop listening to the connection for method invocation response messages. */
diff --git a/Dorkbox-Network/src/dorkbox/network/rmi/RmiBridge.java b/Dorkbox-Network/src/dorkbox/network/rmi/RmiBridge.java
index 5aeb8e33..77b7c2ef 100644
--- a/Dorkbox-Network/src/dorkbox/network/rmi/RmiBridge.java
+++ b/Dorkbox-Network/src/dorkbox/network/rmi/RmiBridge.java
@@ -29,7 +29,7 @@ import com.esotericsoftware.kryo.util.IntMap;
import dorkbox.network.connection.Connection;
import dorkbox.network.connection.EndPoint;
-import dorkbox.network.connection.Listener;
+import dorkbox.network.connection.ListenerRaw;
import dorkbox.network.util.SerializationManager;
import dorkbox.util.primativeCollections.ObjectIntMap;
@@ -78,7 +78,7 @@ public class RmiBridge {
// the name of who created this object space.
private final org.slf4j.Logger logger;
- private final Listener invokeListener= new Listener() {
+ private final ListenerRaw invokeListener= new ListenerRaw() {
@Override
public void received(final Connection connection, final InvokeMethod invokeMethod) {
boolean found = false;
diff --git a/Dorkbox-Network/src/dorkbox/network/util/store/SettingsStore.java b/Dorkbox-Network/src/dorkbox/network/util/store/SettingsStore.java
index b81e2246..1f3b69bf 100644
--- a/Dorkbox-Network/src/dorkbox/network/util/store/SettingsStore.java
+++ b/Dorkbox-Network/src/dorkbox/network/util/store/SettingsStore.java
@@ -14,6 +14,7 @@ import dorkbox.util.storage.Storage;
*
* A static "create" method, with any number of parameters, is required to create this class (which is done via reflection)
*/
+@SuppressWarnings("deprecation")
public abstract class SettingsStore {
/**
diff --git a/Dorkbox-Network/test/dorkbox/network/ChunkedDataTest.java b/Dorkbox-Network/test/dorkbox/network/ChunkedDataTest.java
index 731fc683..1cfc071f 100644
--- a/Dorkbox-Network/test/dorkbox/network/ChunkedDataTest.java
+++ b/Dorkbox-Network/test/dorkbox/network/ChunkedDataTest.java
@@ -60,7 +60,7 @@ public class ChunkedDataTest extends BaseTest {
addEndPoint(server);
server.setIdleTimeout(100);
server.bind(false);
- server.listeners().add(new Listener() {
+ server.listeners().add(new Listener() {
@Override
public void connected (Connection connection) {
@@ -82,7 +82,7 @@ public class ChunkedDataTest extends BaseTest {
Client client = new Client(connectionOptions);
register(client.getSerialization());
addEndPoint(client);
- client.listeners().add(new Listener() {
+ client.listeners().add(new Listener() {
@Override
public void received(Connection connection, Data object) {
if (mainData.equals(object)) {
diff --git a/Dorkbox-Network/test/dorkbox/network/ClientSendTest.java b/Dorkbox-Network/test/dorkbox/network/ClientSendTest.java
index 0a4b9a33..37f3da29 100644
--- a/Dorkbox-Network/test/dorkbox/network/ClientSendTest.java
+++ b/Dorkbox-Network/test/dorkbox/network/ClientSendTest.java
@@ -3,6 +3,7 @@ package dorkbox.network;
import static org.junit.Assert.fail;
+import hive.common.Listener;
import java.io.IOException;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -10,7 +11,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
import org.junit.Test;
import dorkbox.network.connection.Connection;
-import dorkbox.network.connection.Listener;
import dorkbox.network.util.SerializationManager;
import dorkbox.network.util.exceptions.InitializationException;
import dorkbox.network.util.exceptions.SecurityException;
@@ -30,7 +30,7 @@ public class ClientSendTest extends BaseTest {
server.bind(false);
register(server.getSerialization());
- server.listeners().add(new Listener() {
+ server.listeners().add(new Listener() {
@Override
public void received (Connection connection, AMessage object) {
System.err.println("Server received message from client. Bouncing back.");
@@ -43,7 +43,7 @@ public class ClientSendTest extends BaseTest {
register(client.getSerialization());
client.connect(5000);
- client.listeners().add(new Listener() {
+ client.listeners().add(new Listener() {
@Override
public void received (Connection connection, AMessage object) {
ClientSendTest.this.checkPassed.set(true);
diff --git a/Dorkbox-Network/test/dorkbox/network/ConnectionTest.java b/Dorkbox-Network/test/dorkbox/network/ConnectionTest.java
index a53be9be..88b8140c 100644
--- a/Dorkbox-Network/test/dorkbox/network/ConnectionTest.java
+++ b/Dorkbox-Network/test/dorkbox/network/ConnectionTest.java
@@ -2,6 +2,8 @@
package dorkbox.network;
+import hive.common.Listener;
+
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;
@@ -9,7 +11,6 @@ import java.util.TimerTask;
import org.junit.Test;
import dorkbox.network.connection.Connection;
-import dorkbox.network.connection.Listener;
import dorkbox.network.util.exceptions.InitializationException;
import dorkbox.network.util.exceptions.SecurityException;
@@ -119,12 +120,12 @@ public class ConnectionTest extends BaseTest {
addEndPoint(server);
server.bind(false);
- server.listeners().add(new Listener() {
+ server.listeners().add(new Listener