TetrisClient.java :  » Game » tetris-mina » TetrisMina » client » Java Open Source

Java Open Source » Game » tetris mina 
tetris mina » TetrisMina » client » TetrisClient.java
package tetrismina.client;

import java.net.InetSocketAddress;

import org.apache.mina.core.RuntimeIoException;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.SocketConnector;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import tetrismina.codec.TetrisCodecFactory;
import tetrismina.command.AbstractTetrisCommand;

public class TetrisClient {
  private String host;
  private int port;
  private SocketConnector connector;
  private IoSession session;

  private static final long CONNECT_TIMEOUT = 30 * 1000L;

  private static final Logger LOGGER = LoggerFactory
      .getLogger(TetrisClient.class);

  private IoHandler handler;

  public TetrisClient(String host, int port) {
    this.host = host;
    this.port = port;
    connector = new NioSocketConnector();
    connector.setConnectTimeoutMillis(CONNECT_TIMEOUT);
    connector.getFilterChain().addLast("logger", new LoggingFilter());
    connector.getFilterChain().addLast("protocol",
        new ProtocolCodecFilter(new TetrisCodecFactory()));
  }

  public void setHandler(IoHandler handler) {
    this.handler = handler;
    connector.setHandler(this.handler);
  }

  public void connect() {
    ConnectFuture connectFuture = connector.connect(new InetSocketAddress(
        host, port));
    connectFuture.awaitUninterruptibly(CONNECT_TIMEOUT);
    try {
      session = connectFuture.getSession();
    } catch (RuntimeIoException e) {
      LOGGER.warn(e.getMessage(), e);
    }
  }

  public void disconnect() {
    if (session != null) {
      session.close(false).awaitUninterruptibly(CONNECT_TIMEOUT);
      session = null;
    }
  }

  public IoSession getSession() {
    return this.session;
  }

  public void sendCommand(AbstractTetrisCommand command) {
    if (session != null) {
      session.write(command);
    }
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.