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