2016-10-06 11 views
0

私は巨大で大きな問題があります。私はパケットのためにAESシリアライゼーションを使用しています。Kryonet - シリアル化中に送信者(Connection)を取得する方法は?

Kryoでシリアライザは、次のようになります。

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 
    } 

} 

問題は、各ユーザーは、それが自分のSecretAESKeyだ有していなければならないことここにあります。シリアライザから接続リストにアクセスする方法が見つからず、Kryonetのコードを読むとどこにも渡されません。私はAESキーを取得するオブジェクトを記述するConnectionを取得する必要があります。

シリアライザのコンストラクタはオプションではありません。シリアライザはアプリケーションごとに1つで、ユーザーごとにはありません。

あなたはそのようなことをどう対処するか考えていますか?

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

そして、あなたはあなたの接続を持っている:あなたのシリアライザコールで

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); 
} 

を:

答えて

0

Kryoは、このコードが組み込まれています。

関連する問題