2016-10-06 4 views
0

Ich habe ein riesiges, großes Problem. Ich verwende AES-Serialisierung für Pakete und hier kommt ein Problem.Kryonet - Wie bekomme ich den Absender (Connection) während der Serialisierung?

Serializer in Kryo wie folgt aussehen:

public class AESSerializer extends Serializer { 
    private final Serializer serializer; 

    public AESSerializer (Serializer serializer) { 
     this.serializer = serializer; 
    } 

    public void write (Kryo kryo, Output output, Object object) { 
     // USE AES KEY TO ENCRYPT 
     // WRITE OBJECT 
    } 

    public Object read (Kryo kryo, Input input, Class type) { 
     // USE AES KEY TO DECRYPT 
     // READ OBJECT 
    } 

} 

Das Problem ist hier, dass jeder Benutzer seine eigene SecretAESKey haben muss. Ich kann keinen Weg finden, zu den Verbindungslisten vom Serialisierer zu kommen und wie ich Kryonets Code lese - sie geben ihn nirgends weiter. Ich muss die Verbindung erhalten, die das Objekt schreibt, um seinen AES-Schlüssel zu erhalten.

Serializer-Konstruktor ist keine Option Ursache Serializer ist eine pro Anwendung, nicht für jeden Benutzer.

Haben Sie eine Idee, wie man mit solchen Dingen umgeht?

Antwort

0

Kryo hat in diesem Code gebaut:

public synchronized void write (Connection connection, ByteBuffer buffer, Object object) { 
    output.setBuffer(buffer); 
    kryo.getContext().put("connection", connection); 
    kryo.writeClassAndObject(output, object); 
    output.flush(); 
} 

public synchronized Object read (Connection connection, ByteBuffer buffer) { 
    input.setBuffer(buffer); 
    kryo.getContext().put("connection", connection); 
    return kryo.readClassAndObject(input); 
} 

In Ihrem Serializer Aufruf:

Connection connection = (Connection) kryo.getContext().get("connection"); 

Und Sie haben Ihre Verbindung.

Verwandte Themen