Added 'IgnoreSerialization' annotation, so that fields with this annotation WILL NOT be serialized (by a kryo that has been setup to use the FieldAnnotationAwareSerializer

This commit is contained in:
nathan 2014-08-25 02:16:19 +02:00
parent 61e9862069
commit 7fd3cc18cf
4 changed files with 50 additions and 1 deletions

View File

@ -1,13 +1,18 @@
package dorkbox.network.connection;
import java.lang.annotation.Annotation;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
import org.bouncycastle.crypto.params.IESParameters;
import org.bouncycastle.crypto.params.IESWithCipherParameters;
import com.esotericsoftware.kryo.factories.SerializerFactory;
import dorkbox.network.ConnectionOptions;
import dorkbox.network.connection.ping.PingListener;
import dorkbox.network.connection.ping.PingMessage;
@ -23,6 +28,8 @@ import dorkbox.network.util.KryoSerializationManager;
import dorkbox.network.util.SerializationManager;
import dorkbox.network.util.exceptions.InitializationException;
import dorkbox.network.util.exceptions.SecurityException;
import dorkbox.network.util.serializers.FieldAnnotationAwareSerializer;
import dorkbox.network.util.serializers.IgnoreSerialization;
import dorkbox.util.crypto.serialization.EccPrivateKeySerializer;
import dorkbox.util.crypto.serialization.EccPublicKeySerializer;
import dorkbox.util.crypto.serialization.IesParametersSerializer;
@ -64,6 +71,13 @@ public class EndPointWithSerialization extends EndPoint {
this.serializationManager.register(Registration.class);
// ignore fields that have the "IgnoreSerialization" annotation.
Set<Class<? extends Annotation>> marks = new HashSet<Class<? extends Annotation>>();
marks.add(IgnoreSerialization.class);
SerializerFactory disregardingFactory = new FieldAnnotationAwareSerializer.Factory(marks, true);
this.serializationManager.setDefaultSerializer(disregardingFactory);
// add the ping listener (internal use only!)
this.connectionManager.add(new PingListener(name));

View File

@ -20,7 +20,10 @@ import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.KryoException;
import com.esotericsoftware.kryo.Registration;
import com.esotericsoftware.kryo.Serializer;
import com.esotericsoftware.kryo.factories.ReflectionSerializerFactory;
import com.esotericsoftware.kryo.factories.SerializerFactory;
import com.esotericsoftware.kryo.serializers.CollectionSerializer;
import com.esotericsoftware.kryo.serializers.FieldSerializer;
import com.esotericsoftware.kryo.util.MapReferenceResolver;
import dorkbox.network.connection.Connection;
@ -228,6 +231,19 @@ public class KryoSerializationManager implements SerializationManager {
}
}
/**
* Sets the serializer factory to use when no {@link #addDefaultSerializer(Class, Class) default serializers} match
* an object's type. Default is {@link ReflectionSerializerFactory} with {@link FieldSerializer}.
*
* @see #newDefaultSerializer(Class)
*/
@Override
public void setDefaultSerializer(SerializerFactory factory) {
for (Kryo k : this.kryos) {
k.setDefaultSerializer(factory);
}
}
/**
* If the class is not registered and {@link SerializationManager#setRegistrationRequired(boolean)} is false, it is
* automatically registered using the {@link SerializationManager#addDefaultSerializer(Class, Class) default serializer}.
@ -270,7 +286,9 @@ public class KryoSerializationManager implements SerializationManager {
}
/**
* attempt to allocate the given index. This MUST be wrapped in a synchronized call.!
* attempt to allocate the given index.
*
* Note that this is not thread safe
*/
private final void allocateLazy(int index) {
// keyed off the snappy instance

View File

@ -4,6 +4,7 @@ import io.netty.buffer.ByteBuf;
import com.esotericsoftware.kryo.Registration;
import com.esotericsoftware.kryo.Serializer;
import com.esotericsoftware.kryo.factories.SerializerFactory;
import dorkbox.network.connection.Connection;
import dorkbox.network.rmi.RmiRegisterClassesCallback;
@ -78,4 +79,8 @@ public class NullSerializationManager implements SerializationManager {
@Override
public void registerForRmiClasses(RmiRegisterClassesCallback callback) {
}
@Override
public void setDefaultSerializer(SerializerFactory factory) {
}
}

View File

@ -7,6 +7,9 @@ import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.KryoException;
import com.esotericsoftware.kryo.Registration;
import com.esotericsoftware.kryo.Serializer;
import com.esotericsoftware.kryo.factories.ReflectionSerializerFactory;
import com.esotericsoftware.kryo.factories.SerializerFactory;
import com.esotericsoftware.kryo.serializers.FieldSerializer;
import com.esotericsoftware.kryo.util.MapReferenceResolver;
import dorkbox.network.connection.Connection;
@ -166,6 +169,14 @@ public interface SerializationManager {
*/
public void registerForRmiClasses(RmiRegisterClassesCallback callback);
/**
* Sets the serializer factory to use when no {@link #addDefaultSerializer(Class, Class) default serializers} match
* an object's type. Default is {@link ReflectionSerializerFactory} with {@link FieldSerializer}.
*
* @see #newDefaultSerializer(Class)
*/
public void setDefaultSerializer(SerializerFactory factory);
/**
* If the class is not registered and {@link SerializationManager#setRegistrationRequired(boolean)} is false, it is
* automatically registered using the {@link SerializationManager#addDefaultSerializer(Class, Class) default serializer}.
@ -175,4 +186,5 @@ public interface SerializationManager {
* @see ClassResolver#getRegistration(Class)
*/
public Registration getRegistration(Class<?> clazz);
}