Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package DerTod2.ClientConsole.Binary;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.net.Socket;
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
- import java.util.concurrent.ConcurrentLinkedQueue;
- import org.bukkit.Bukkit;
- import org.bukkit.ChatColor;
- import DerTod2.ClientConsole.Packets.ModPacket;
- import DerTod2.ClientConsole.Packets.ModPacketConsoleMessage;
- import DerTod2.ClientConsole.Packets.ModPacketExecuteCommand;
- import DerTod2.ClientConsole.Packets.ModPacketHandShake;
- import DerTod2.ClientConsole.Packets.ModPacketQuit;
- public class ClientConsole {
- private final int clientVersion = 1;
- private final int serverPort = 2533;
- private String serverHost;
- private String userName;
- private String passWord;
- private boolean succesfullyLogin = false;
- private Socket socket;
- private ObjectOutputStream outputStream;
- private ObjectInputStream inputStream;
- private BufferedReader bufferedReader;
- private ConcurrentLinkedQueue<ModPacket> queryList = new ConcurrentLinkedQueue<ModPacket>();
- public void main(String[] args) {
- this.bufferedReader = new BufferedReader(new InputStreamReader(System.in));
- startClient();
- }
- public void startClient() {
- System.out.println("Willkommen zu der ClientConsole.");
- System.out.println("Über diese Konsole werden Daten von einem Server angefragt und Daten zu einem Server gesendet");
- System.out.println("Geben Sie um sich mit einem Server zu verbinden die benötigten Daten an.");
- System.out.println("Server Adresse:");
- do {
- try {
- this.serverHost = bufferedReader.readLine();
- } catch (IOException exc) {
- System.out.println("Ungültigen Server angegeben!");
- System.out.println("Server Adresse:");
- }
- } while (this.serverHost != null);
- try {
- Socket socket = new Socket(this.serverHost, this.serverPort);
- this.socket = socket;
- this.socket.setKeepAlive(true);
- this.outputStream = new ObjectOutputStream(this.socket.getOutputStream());
- this.inputStream = new ObjectInputStream(this.socket.getInputStream());
- } catch (Exception e) {
- System.out.println("Verbindung zum Host konnte nicht aufgebaut werden!");
- System.out.println("Verwenden Sie einen anderen Host oder versuchen Sie es später erneut");
- System.exit(-1);
- return;
- }
- // Start Threads
- Thread writeThread = new Thread(new Runnable() { public void run() { writeThread(); } });
- Thread readThread = new Thread(new Runnable() { public void run() { readThread(); } });
- writeThread.start();
- readThread.start();
- // Now send the HandShake Packet!
- System.out.println("Verbindung mit " + this.serverHost + " wurde aufgebaut, bitte logge dich nun ein:");
- System.out.println("Benutzername:");
- try {
- this.userName = bufferedReader.readLine();
- } catch (IOException exc) {
- System.out.println("Ungültigen Benutzernamen angegeben!");
- System.out.println("Benutzername:");
- }
- System.out.println("Passwort:");
- try {
- this.passWord = bufferedReader.readLine();
- } catch (IOException exc) {
- System.out.println("Ungültiges Passwort angegeben!");
- System.out.println("Passwort:");
- }
- this.queryList.add(new ModPacketHandShake(this.userName, this.md5(this.passWord), this.clientVersion));
- // Mainthread Konsole Task
- while (true) {
- if (!this.succesfullyLogin) {
- try { Thread.sleep(500); } catch (InterruptedException e) { }
- continue;
- }
- try {
- String consoleLine = bufferedReader.readLine();
- this.queryList.add(new ModPacketExecuteCommand(consoleLine));
- } catch (IOException exc) {
- }
- }
- }
- private void readThread() {
- while (true) {
- if (!this.succesfullyLogin) {
- try {
- Object object = this.inputStream.readObject();
- if (object != null && object instanceof ModPacketHandShake) {
- ModPacketHandShake packet = (ModPacketHandShake) object;
- if (packet.getVersion() == this.clientVersion) {
- if (packet.getPassword().equals("OK")) {
- this.succesfullyLogin = true;
- } else {
- System.out.println("Das verwendete Passwort war falsch!");
- System.exit(-1);
- return;
- }
- } else {
- System.out.println("Du verwendest eine andere Version als der Server!");
- System.exit(-1);
- return;
- }
- } else if (object instanceof ModPacketQuit) {
- System.exit(-1);
- return;
- }
- } catch (IOException | ClassNotFoundException exc) {
- System.out.println("Unbekanntes Paket erhalten!");
- }
- continue;
- }
- try {
- Object object = this.inputStream.readObject();
- if (object instanceof ModPacket) {
- if (object instanceof ModPacketConsoleMessage) {
- ModPacketConsoleMessage packet = (ModPacketConsoleMessage) object;
- System.out.println(packet.getMessage());
- } else if (object instanceof ModPacketQuit) {
- System.out.println("Server hat die Verbindung geschlossen!");
- System.exit(-1);
- return;
- }
- } else {
- System.out.println("Remote Client tried to sent unknown Packet");
- }
- } catch (Exception exc) {
- System.out.println("Remote Client tried to sent unknown Packet");
- }
- }
- }
- private void writeThread() {
- while (true) {
- if (queryList.isEmpty()) { try { Thread.sleep(500); } catch (InterruptedException e) { } continue; }
- try {
- this.outputStream.writeObject(queryList.poll());
- this.outputStream.flush();
- } catch (IOException e) { }
- }
- }
- private String md5(String string) {
- byte[] bytes = string.getBytes();
- StringBuilder stringBuilder = new StringBuilder();
- for (int i=0; i < bytes.length; i++) {
- if(bytes[i] <= 15 && bytes[i] >= 0){
- stringBuilder.append("0");
- }
- stringBuilder.append(Integer.toHexString(0xFF & bytes[i]));
- }
- return stringBuilder.toString();
- }
- }
Add Comment
Please, Sign In to add comment