Search in sources :

Example 1 with SerializerRegistration

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());
    }
}
Also used : IOException(java.io.IOException) SerializerRegistration(com.jme3.network.serializing.SerializerRegistration)

Example 2 with SerializerRegistration

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;
}
Also used : ArrayList(java.util.ArrayList) Collection(java.util.Collection) IOException(java.io.IOException) SerializerRegistration(com.jme3.network.serializing.SerializerRegistration) Serializer(com.jme3.network.serializing.Serializer)

Example 3 with SerializerRegistration

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);
}
Also used : SerializerRegistration(com.jme3.network.serializing.SerializerRegistration) SerializerRegistration(com.jme3.network.serializing.SerializerRegistration)

Example 4 with SerializerRegistration

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;
}
Also used : HashMap(java.util.HashMap) Map(java.util.Map) HashMap(java.util.HashMap) IOException(java.io.IOException) SerializerRegistration(com.jme3.network.serializing.SerializerRegistration) Serializer(com.jme3.network.serializing.Serializer)

Aggregations

SerializerRegistration (com.jme3.network.serializing.SerializerRegistration)4 IOException (java.io.IOException)3 Serializer (com.jme3.network.serializing.Serializer)2 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1