RelayClient.java 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package net;
  2. import config.Config;
  3. import crypto.KeyManager;
  4. import model.AuthMessage;
  5. import model.Message;
  6. import java.io.*;
  7. import java.net.*;
  8. import java.security.PublicKey;
  9. public class RelayClient {
  10. private Socket socket;
  11. private ObjectOutputStream out;
  12. private ObjectInputStream in;
  13. public RelayClient(String serverIp, PublicKey myPublicKey, MessageReceiver messageReceiver) throws IOException {
  14. socket = new Socket(serverIp, 12345);
  15. out = new ObjectOutputStream(socket.getOutputStream());
  16. in = new ObjectInputStream(socket.getInputStream());
  17. AuthMessage auth = new AuthMessage(Config.APPEARANCE_NAME, myPublicKey);
  18. System.out.println("Sending auth: " + auth);
  19. send(auth);
  20. new Thread(() -> {
  21. try {
  22. Object msg;
  23. while ((msg = in.readObject()) != null) {
  24. if(msg instanceof Message){
  25. ((Message) msg).decrypt(KeyManager.getPrivateKey(), KeyManager.getPublicKey());
  26. messageReceiver.onMessage((Message) msg);
  27. }
  28. }
  29. } catch (Exception e) {
  30. e.printStackTrace();
  31. }
  32. }).start();
  33. }
  34. public void send(Object msg) {
  35. try {
  36. out.writeObject(msg);
  37. out.flush();
  38. System.out.println("Sent: " + msg);
  39. } catch (IOException e) {
  40. e.printStackTrace();
  41. }
  42. }
  43. public interface MessageReceiver {
  44. void onMessage(Message msg);
  45. }
  46. }