Package com.esotericsoftware.kryonet.examples.position

Source Code of com.esotericsoftware.kryonet.examples.position.PositionClient$UI

package com.esotericsoftware.kryonet.examples.position;

import java.io.IOException;
import java.util.HashMap;

import javax.swing.JOptionPane;

import com.esotericsoftware.kryonet.Client;
import com.esotericsoftware.kryonet.Connection;
import com.esotericsoftware.kryonet.Listener;
import com.esotericsoftware.kryonet.Listener.ThreadedListener;
import com.esotericsoftware.kryonet.examples.position.Network.AddCharacter;
import com.esotericsoftware.kryonet.examples.position.Network.RegistrationRequired;
import com.esotericsoftware.kryonet.examples.position.Network.Login;
import com.esotericsoftware.kryonet.examples.position.Network.MoveCharacter;
import com.esotericsoftware.kryonet.examples.position.Network.Register;
import com.esotericsoftware.kryonet.examples.position.Network.RemoveCharacter;
import com.esotericsoftware.kryonet.examples.position.Network.UpdateCharacter;
import com.esotericsoftware.minlog.Log;

public class PositionClient {
  UI ui;
  Client client;
  String name;

  public PositionClient () {
    client = new Client();
    client.start();

    // For consistency, the classes to be sent over the network are
    // registered by the same method for both the client and server.
    Network.register(client);

    // ThreadedListener runs the listener methods on a different thread.
    client.addListener(new ThreadedListener(new Listener() {
      public void connected (Connection connection) {
      }

      public void received (Connection connection, Object object) {
        if (object instanceof RegistrationRequired) {
          Register register = new Register();
          register.name = name;
          register.otherStuff = ui.inputOtherStuff();
          client.sendTCP(register);
        }

        if (object instanceof AddCharacter) {
          AddCharacter msg = (AddCharacter)object;
          ui.addCharacter(msg.character);
          return;
        }

        if (object instanceof UpdateCharacter) {
          ui.updateCharacter((UpdateCharacter)object);
          return;
        }

        if (object instanceof RemoveCharacter) {
          RemoveCharacter msg = (RemoveCharacter)object;
          ui.removeCharacter(msg.id);
          return;
        }
      }

      public void disconnected (Connection connection) {
        System.exit(0);
      }
    }));

    ui = new UI();

    String host = ui.inputHost();
    try {
      client.connect(5000, host, Network.port);
      // Server communication after connection can go here, or in Listener#connected().
    } catch (IOException ex) {
      ex.printStackTrace();
    }

    name = ui.inputName();
    Login login = new Login();
    login.name = name;
    client.sendTCP(login);

    while (true) {
      int ch;
      try {
        ch = System.in.read();
      } catch (IOException ex) {
        ex.printStackTrace();
        break;
      }

      MoveCharacter msg = new MoveCharacter();
      switch (ch) {
      case 'w':
        msg.y = -1;
        break;
      case 's':
        msg.y = 1;
        break;
      case 'a':
        msg.x = -1;
        break;
      case 'd':
        msg.x = 1;
        break;
      default:
        msg = null;
      }
      if (msg != null) client.sendTCP(msg);
    }
  }

  static class UI {
    HashMap<Integer, Character> characters = new HashMap();

    public String inputHost () {
      String input = (String)JOptionPane.showInputDialog(null, "Host:", "Connect to server", JOptionPane.QUESTION_MESSAGE,
        null, null, "localhost");
      if (input == null || input.trim().length() == 0) System.exit(1);
      return input.trim();
    }

    public String inputName () {
      String input = (String)JOptionPane.showInputDialog(null, "Name:", "Connect to server", JOptionPane.QUESTION_MESSAGE,
        null, null, "Test");
      if (input == null || input.trim().length() == 0) System.exit(1);
      return input.trim();
    }

    public String inputOtherStuff () {
      String input = (String)JOptionPane.showInputDialog(null, "Other Stuff:", "Create account", JOptionPane.QUESTION_MESSAGE,
        null, null, "other stuff");
      if (input == null || input.trim().length() == 0) System.exit(1);
      return input.trim();
    }

    public void addCharacter (Character character) {
      characters.put(character.id, character);
      System.out.println(character.name + " added at " + character.x + ", " + character.y);
    }

    public void updateCharacter (UpdateCharacter msg) {
      Character character = characters.get(msg.id);
      if (character == null) return;
      character.x = msg.x;
      character.y = msg.y;
      System.out.println(character.name + " moved to " + character.x + ", " + character.y);
    }

    public void removeCharacter (int id) {
      Character character = characters.remove(id);
      if (character != null) System.out.println(character.name + " removed");
    }
  }

  public static void main (String[] args) {
    Log.set(Log.LEVEL_DEBUG);
    new PositionClient();
  }
}
TOP

Related Classes of com.esotericsoftware.kryonet.examples.position.PositionClient$UI

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.