Guest User

Untitled

a guest
Jul 29th, 2018
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.00 KB | None | 0 0
  1. package DerTod2.ClientConsole.Binary;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.io.ObjectInputStream;
  7. import java.io.ObjectOutputStream;
  8. import java.net.Socket;
  9. import java.security.MessageDigest;
  10. import java.security.NoSuchAlgorithmException;
  11. import java.util.concurrent.ConcurrentLinkedQueue;
  12.  
  13. import org.bukkit.Bukkit;
  14. import org.bukkit.ChatColor;
  15.  
  16. import DerTod2.ClientConsole.Packets.ModPacket;
  17. import DerTod2.ClientConsole.Packets.ModPacketConsoleMessage;
  18. import DerTod2.ClientConsole.Packets.ModPacketExecuteCommand;
  19. import DerTod2.ClientConsole.Packets.ModPacketHandShake;
  20. import DerTod2.ClientConsole.Packets.ModPacketQuit;
  21.  
  22. public class ClientConsole {
  23.     private final int clientVersion = 1;
  24.     private final int serverPort = 2533;
  25.    
  26.     private String serverHost;
  27.     private String userName;
  28.     private String passWord;
  29.     private boolean succesfullyLogin = false;
  30.    
  31.     private Socket socket;
  32.     private ObjectOutputStream outputStream;
  33.     private ObjectInputStream inputStream;
  34.     private BufferedReader bufferedReader;
  35.    
  36.     private ConcurrentLinkedQueue<ModPacket> queryList = new ConcurrentLinkedQueue<ModPacket>();
  37.    
  38.     public void main(String[] args) {
  39.         this.bufferedReader = new BufferedReader(new InputStreamReader(System.in));
  40.  
  41.         startClient();
  42.     }
  43.    
  44.     public void startClient() {
  45.         System.out.println("Willkommen zu der ClientConsole.");
  46.         System.out.println("Über diese Konsole werden Daten von einem Server angefragt und Daten zu einem Server gesendet");
  47.         System.out.println("Geben Sie um sich mit einem Server zu verbinden die benötigten Daten an.");
  48.        
  49.         System.out.println("Server Adresse:");
  50.         do {
  51.             try {
  52.                 this.serverHost = bufferedReader.readLine();       
  53.             } catch (IOException exc) {
  54.                 System.out.println("Ungültigen Server angegeben!");
  55.                 System.out.println("Server Adresse:");
  56.             }
  57.         } while (this.serverHost != null);
  58.        
  59.         try {
  60.             Socket socket = new Socket(this.serverHost, this.serverPort);
  61.             this.socket = socket;
  62.            
  63.             this.socket.setKeepAlive(true);
  64.            
  65.             this.outputStream = new ObjectOutputStream(this.socket.getOutputStream());
  66.             this.inputStream = new ObjectInputStream(this.socket.getInputStream());
  67.         } catch (Exception e) {
  68.             System.out.println("Verbindung zum Host konnte nicht aufgebaut werden!");
  69.             System.out.println("Verwenden Sie einen anderen Host oder versuchen Sie es später erneut");
  70.             System.exit(-1);
  71.             return;
  72.         }
  73.        
  74.         // Start Threads
  75.         Thread writeThread = new Thread(new Runnable() { public void run() { writeThread(); } });
  76.         Thread readThread = new Thread(new Runnable() { public void run() { readThread(); } });
  77.         writeThread.start();
  78.         readThread.start();
  79.        
  80.         // Now send the HandShake Packet!
  81.         System.out.println("Verbindung mit " + this.serverHost + " wurde aufgebaut, bitte logge dich nun ein:");
  82.         System.out.println("Benutzername:");
  83.         try {
  84.             this.userName = bufferedReader.readLine();     
  85.         } catch (IOException exc) {
  86.             System.out.println("Ungültigen Benutzernamen angegeben!");
  87.             System.out.println("Benutzername:");
  88.         }
  89.         System.out.println("Passwort:");
  90.         try {
  91.             this.passWord = bufferedReader.readLine();     
  92.         } catch (IOException exc) {
  93.             System.out.println("Ungültiges Passwort angegeben!");
  94.             System.out.println("Passwort:");
  95.         }
  96.  
  97.         this.queryList.add(new ModPacketHandShake(this.userName, this.md5(this.passWord), this.clientVersion));
  98.        
  99.         // Mainthread Konsole Task
  100.         while (true) {
  101.             if (!this.succesfullyLogin) {
  102.                 try { Thread.sleep(500); } catch (InterruptedException e) { }
  103.                 continue;
  104.             }
  105.            
  106.             try {
  107.                 String consoleLine = bufferedReader.readLine();
  108.                 this.queryList.add(new ModPacketExecuteCommand(consoleLine));
  109.             } catch (IOException exc) {
  110.             }
  111.         }
  112.     }
  113.    
  114.     private void readThread() {
  115.         while (true) {
  116.             if (!this.succesfullyLogin) {
  117.                 try {
  118.                     Object object = this.inputStream.readObject();
  119.                     if (object != null && object instanceof ModPacketHandShake) {
  120.                         ModPacketHandShake packet = (ModPacketHandShake) object;
  121.                        
  122.                         if (packet.getVersion() == this.clientVersion) {
  123.                             if (packet.getPassword().equals("OK")) {
  124.                                 this.succesfullyLogin = true;
  125.                             } else {
  126.                                 System.out.println("Das verwendete Passwort war falsch!");
  127.                                 System.exit(-1);
  128.                                 return;
  129.                             }
  130.                         } else {
  131.                             System.out.println("Du verwendest eine andere Version als der Server!");
  132.                             System.exit(-1);
  133.                             return;
  134.                         }
  135.                     } else if (object instanceof ModPacketQuit) {
  136.                         System.exit(-1);
  137.                         return;
  138.                     }
  139.                 } catch (IOException | ClassNotFoundException exc) {
  140.                     System.out.println("Unbekanntes Paket erhalten!");
  141.                 }
  142.                
  143.                 continue;
  144.             }
  145.            
  146.             try {
  147.                 Object object = this.inputStream.readObject();
  148.                 if (object instanceof ModPacket) {
  149.                     if (object instanceof ModPacketConsoleMessage) {
  150.                         ModPacketConsoleMessage packet = (ModPacketConsoleMessage) object;
  151.                         System.out.println(packet.getMessage());
  152.                     } else if (object instanceof ModPacketQuit) {
  153.                         System.out.println("Server hat die Verbindung geschlossen!");
  154.                         System.exit(-1);
  155.                         return;
  156.                     }
  157.                 } else {
  158.                     System.out.println("Remote Client tried to sent unknown Packet");
  159.                 }
  160.             } catch (Exception exc) {
  161.                 System.out.println("Remote Client tried to sent unknown Packet");
  162.             }
  163.         }
  164.     }
  165.    
  166.     private void writeThread() {
  167.         while (true) {
  168.            
  169.             if (queryList.isEmpty()) { try { Thread.sleep(500); } catch (InterruptedException e) { } continue; }
  170.            
  171.             try {
  172.                 this.outputStream.writeObject(queryList.poll());
  173.                 this.outputStream.flush();
  174.             } catch (IOException e) { }
  175.         }
  176.     }
  177.    
  178.     private String md5(String string) {
  179.         byte[] bytes = string.getBytes();
  180.         StringBuilder stringBuilder = new StringBuilder();
  181.        
  182.         for (int i=0; i < bytes.length; i++) {
  183.             if(bytes[i] <= 15 && bytes[i] >= 0){
  184.                 stringBuilder.append("0");
  185.             }
  186.             stringBuilder.append(Integer.toHexString(0xFF & bytes[i]));
  187.         }
  188.        
  189.         return stringBuilder.toString();
  190.     }
  191. }
Add Comment
Please, Sign In to add comment