From 05809714cf67fd8d83085ae5d37ed321bec277ba Mon Sep 17 00:00:00 2001 From: nathan Date: Sat, 27 Jan 2018 23:07:53 +0100 Subject: [PATCH] Streamlined registering/creating RMI objects. Invalid object IDs are no longer hard-coded to Integer.MAX_VALUE --- .../network/connection/ConnectionImpl.java | 19 ++++--------------- .../network/rmi/RemoteObjectSerializer.java | 2 +- 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/src/dorkbox/network/connection/ConnectionImpl.java b/src/dorkbox/network/connection/ConnectionImpl.java index 75c3c8a3..3ec6f2b0 100644 --- a/src/dorkbox/network/connection/ConnectionImpl.java +++ b/src/dorkbox/network/connection/ConnectionImpl.java @@ -39,17 +39,7 @@ import dorkbox.network.connection.ping.PingTuple; import dorkbox.network.connection.wrapper.ChannelNetworkWrapper; import dorkbox.network.connection.wrapper.ChannelNull; import dorkbox.network.connection.wrapper.ChannelWrapper; -import dorkbox.network.rmi.InvokeMethod; -import dorkbox.network.rmi.InvokeMethodResult; -import dorkbox.network.rmi.RemoteObject; -import dorkbox.network.rmi.RemoteObjectCallback; -import dorkbox.network.rmi.Rmi; -import dorkbox.network.rmi.RmiBridge; -import dorkbox.network.rmi.RmiMessage; -import dorkbox.network.rmi.RmiObjectHandler; -import dorkbox.network.rmi.RmiProxyHandler; -import dorkbox.network.rmi.RmiRegistration; -import dorkbox.network.rmi.TimeoutException; +import dorkbox.network.rmi.*; import dorkbox.network.serialization.CryptoSerializationManager; import dorkbox.util.collections.IntMap; import dorkbox.util.collections.LockFreeHashMap; @@ -1080,8 +1070,7 @@ class ConnectionImpl extends ChannelInboundHandlerAdapter implements ICryptoConn // this is what creates a new instance of the impl class, and stores it as an ID. object = kryo.newInstance(implementationClass); - rmiId = rmiBridge.nextObjectId(); - rmiBridge.register(rmiId, object); + rmiId = rmiBridge.register(object); @@ -1116,7 +1105,7 @@ class ConnectionImpl extends ChannelInboundHandlerAdapter implements ICryptoConn try { o = field.get(remoteClassObject.getValue()); - rmiBridge.register(rmiBridge.nextObjectId(), o); + rmiBridge.register(o); classesToCheck.add(new AbstractMap.SimpleEntry, Object>(type, o)); } catch (IllegalAccessException e) { logger.error("Error checking RMI fields for: {}.{}", remoteClassObject.getKey(), field.getName(), e); @@ -1184,7 +1173,7 @@ class ConnectionImpl extends ChannelInboundHandlerAdapter implements ICryptoConn } int objectId = globalRmiBridge.getRegisteredId(object); - if (objectId == Integer.MAX_VALUE) { + if (objectId == RmiBridge.INVALID_RMI) { return rmiBridge.getRegisteredId(object); } else { return objectId; diff --git a/src/dorkbox/network/rmi/RemoteObjectSerializer.java b/src/dorkbox/network/rmi/RemoteObjectSerializer.java index 1c7c68ca..79dcc866 100644 --- a/src/dorkbox/network/rmi/RemoteObjectSerializer.java +++ b/src/dorkbox/network/rmi/RemoteObjectSerializer.java @@ -59,7 +59,7 @@ class RemoteObjectSerializer extends Serializer { void write(Kryo kryo, Output output, T object) { KryoExtra kryoExtra = (KryoExtra) kryo; int id = kryoExtra.connection.getRegisteredId(object); - if (id == Integer.MAX_VALUE) { + if (id == RmiBridge.INVALID_RMI) { throw new IllegalStateException("Object not found in RMI objectSpace: " + object); }