use of com.jme3.network.serializing.SerializerRegistration in project jmonkeyengine by jMonkeyEngine.
the class RmiSerializer method writeType.
private void writeType(ByteBuffer buffer, Class<?> clazz) throws IOException {
if (clazz == void.class) {
buffer.putShort((short) 0);
} else {
SerializerRegistration reg = Serializer.getSerializerRegistration(clazz);
if (reg == null) {
logger.log(Level.WARNING, "Unknown class: {0}", clazz);
// prevents message from being serialized
throw new IOException();
}
buffer.putShort(reg.getId());
}
}
use of com.jme3.network.serializing.SerializerRegistration in project jmonkeyengine by jMonkeyEngine.
the class CollectionSerializer method readObject.
@SuppressWarnings("unchecked")
public <T> T readObject(ByteBuffer data, Class<T> c) throws IOException {
int length = data.getInt();
Collection collection;
try {
collection = (Collection) c.newInstance();
} catch (Exception e) {
log.log(Level.FINE, "[Serializer][???] Could not determine collection type. Using ArrayList.");
collection = new ArrayList(length);
}
if (length == 0)
return (T) collection;
if (data.get() == (byte) 1) {
SerializerRegistration reg = Serializer.readClass(data);
Class clazz = reg.getType();
Serializer serializer = reg.getSerializer();
for (int i = 0; i != length; ++i) {
collection.add(serializer.readObject(data, clazz));
}
} else {
for (int i = 0; i != length; ++i) {
collection.add(Serializer.readClassAndObject(data));
}
}
return (T) collection;
}
use of com.jme3.network.serializing.SerializerRegistration in project jmonkeyengine by jMonkeyEngine.
the class SerializerRegistrationsMessage method compile.
public static void compile() {
// Let's just see what they are here
List<Registration> list = new ArrayList<Registration>();
for (SerializerRegistration reg : Serializer.getSerializerRegistrations()) {
Class type = reg.getType();
if (ignore.contains(type))
continue;
if (type.isPrimitive())
continue;
list.add(new Registration(reg));
}
if (log.isLoggable(Level.FINE)) {
log.log(Level.FINE, "Number of registered classes:{0}", list.size());
for (Registration reg : list) {
log.log(Level.FINE, " {0}", reg);
}
}
compiled = list.toArray(new Registration[list.size()]);
INSTANCE = new SerializerRegistrationsMessage(compiled);
Serializer.setReadOnly(true);
}
use of com.jme3.network.serializing.SerializerRegistration in project jmonkeyengine by jMonkeyEngine.
the class MapSerializer method readObject.
/*
Structure:
struct Map {
INT length
BYTE flags = { 0x01 = all keys have the same type,
0x02 = all values have the same type }
if (flags has 0x01 set)
SHORT keyType
if (flags has 0x02 set)
SHORT valType
struct MapEntry[length] entries {
if (flags does not have 0x01 set)
SHORT keyType
OBJECT key
if (flags does not have 0x02 set)
SHORT valType
OBJECT value
}
}
*/
@SuppressWarnings("unchecked")
public <T> T readObject(ByteBuffer data, Class<T> c) throws IOException {
int length = data.getInt();
Map map;
try {
map = (Map) c.newInstance();
} catch (Exception e) {
log.log(Level.WARNING, "[Serializer][???] Could not determine map type. Using HashMap.");
map = new HashMap();
}
if (length == 0)
return (T) map;
int flags = data.get() & 0xff;
boolean uniqueKeys = (flags & 0x01) == 0;
boolean uniqueVals = (flags & 0x02) == 0;
Class keyClazz = null;
Class valClazz = null;
Serializer keySerial = null;
Serializer valSerial = null;
if (!uniqueKeys) {
SerializerRegistration reg = Serializer.readClass(data);
keyClazz = reg.getType();
keySerial = reg.getSerializer();
}
if (!uniqueVals) {
SerializerRegistration reg = Serializer.readClass(data);
valClazz = reg.getType();
valSerial = reg.getSerializer();
}
for (int i = 0; i < length; i++) {
Object key;
Object value;
if (uniqueKeys) {
key = Serializer.readClassAndObject(data);
} else {
key = keySerial.readObject(data, keyClazz);
}
if (uniqueVals) {
value = Serializer.readClassAndObject(data);
} else {
value = valSerial.readObject(data, valClazz);
}
map.put(key, value);
}
return (T) map;
}
Aggregations