Package ch.fusun.baron.client.rmi

Source Code of ch.fusun.baron.client.rmi.GameClient

package ch.fusun.baron.client.rmi;

import java.io.IOException;

import ch.fusun.baron.core.command.GameCommand;
import ch.fusun.baron.core.command.base.CreateUserCommand;
import ch.fusun.baron.core.command.base.LoginUserCommand;
import ch.fusun.baron.core.injection.Inject;
import ch.fusun.baron.core.injection.ReInjector;
import ch.fusun.baron.core.rmi.KryoUtil;
import ch.fusun.baron.core.rmi.User;
import ch.fusun.baron.core.service.UserService;
import ch.fusun.baron.data.DataUpdate;

import com.esotericsoftware.kryonet.Client;
import com.esotericsoftware.kryonet.Connection;
import com.esotericsoftware.kryonet.Listener;

/**
* Client implementation
*/
public class GameClient implements ClientService {

  private Client client;
  @Inject
  private UserService userService;

  /**
   * Constructor
   */
  public GameClient() {

  }

  /**
   * Tries to connect to the server
   */
  @Override
  public boolean connectToServer(String host) {
    client = new Client();
    for (Class<?> clazz : KryoUtil.getInstance()
        .getClassesForRegistration()) {
      client.getKryo().register(clazz);
    }
    client.start();
    client.addListener(new Listener() {
      @Override
      public synchronized void received(Connection arg0, Object object) {
        if (object instanceof DataUpdate) {
          DataUpdate update = (DataUpdate) object;
          ReInjector.getInstance().reInject(update);
          update.update();
        }
      }
    });
    try {
      client.connect(5000, host, 54555, 54555);
      return true;
    } catch (IOException e) {
      return false;
    }
  }

  /**
   * @return The current user
   */
  @Override
  public User getUser() {
    return userService.getUser();
  }

  @Override
  public void createUser(User user) {
    client.sendTCP(new CreateUserCommand(user.getName(), user.getPassword()));
    userService.setUser(user);
  }

  @Override
  public void login(String name, String password) {
    userService.setUser(new User(name, password));
    client.sendTCP(new LoginUserCommand(name, password, client.getID()));
  }

  @Override
  public void execute(GameCommand command) {
    client.sendTCP(command);
  }

}
TOP

Related Classes of ch.fusun.baron.client.rmi.GameClient

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.