2016-10-06 3 views
0

거대한, 거대한 문제가 있습니다. 패킷에 AES 직렬화를 사용하고 있으며 여기에 문제가 있습니다. Kryo에서Kryonet - 직렬화 중에 보낸 사람 (연결)을 얻는 방법?

직렬 변환기는 다음과 같다 :

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 자신의 가지고 있어야하는 것이 여기에있다. 나는 serializer에서 연결 목록에 도달 할 수있는 방법을 찾을 수 없으며 Kryonet의 코드를 읽을 때 - 아무데도 전달하지 않습니다. AES 키를 얻기 위해 객체를 작성하는 Connection을 가져와야합니다.

serializer 생성자가 옵션이 아닙니다. 이유는 serializer가 응용 프로그램마다 하나씩 있기 때문이며 각 사용자마다 하나가 아닙니다.

여러분은 그런 것들을 어떻게 처리 할 생각이 있습니까? 당신의 시리얼 통화에서

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이 코드가 내장되어

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

그리고 당신은 당신의 연결을 가지고있다.