package net; import config.Config; import crypto.KeyManager; import model.AuthMessage; import model.Message; import java.io.*; import java.net.*; import java.security.PublicKey; public class RelayClient { private Socket socket; private ObjectOutputStream out; private ObjectInputStream in; public RelayClient(String serverIp, PublicKey myPublicKey, MessageReceiver messageReceiver) throws IOException { socket = new Socket(serverIp, 12345); out = new ObjectOutputStream(socket.getOutputStream()); in = new ObjectInputStream(socket.getInputStream()); AuthMessage auth = new AuthMessage(Config.APPEARANCE_NAME, myPublicKey); System.out.println("Sending auth: " + auth); send(auth); new Thread(() -> { try { Object msg; while ((msg = in.readObject()) != null) { if(msg instanceof Message){ ((Message) msg).decrypt(KeyManager.getPrivateKey(), KeyManager.getPublicKey()); messageReceiver.onMessage((Message) msg); } } } catch (Exception e) { e.printStackTrace(); } }).start(); } public void send(Object msg) { try { out.writeObject(msg); out.flush(); System.out.println("Sent: " + msg); } catch (IOException e) { e.printStackTrace(); } } public interface MessageReceiver { void onMessage(Message msg); } }