Package org.ggp.base.server.threads

Source Code of org.ggp.base.server.threads.RequestThread

package org.ggp.base.server.threads;

import java.io.IOException;
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;

import org.ggp.base.server.GameServer;
import org.ggp.base.server.event.ServerConnectionErrorEvent;
import org.ggp.base.server.event.ServerTimeoutEvent;
import org.ggp.base.util.http.HttpRequest;
import org.ggp.base.util.statemachine.Role;


/**
* RequestThread is an abstract class that serves as a framework for all of the
* requests that the match host sends to the players. Requests always have a
* target identified by hostname and port, a role and player name associated
* with that host, a timeout, a game server to report connection issues to,
* et cetera. This framework does the usual setup and try-catch responding so
* that the concrete RequestThread subclasses can focus on request-specific
* business logic.
*
* @author schreib
*/
public abstract class RequestThread extends Thread
{
  private final GameServer gameServer;
  private final String host;
  private final int port;
  private final String playerName;
  private final int timeout;
  private final Role role;
  private final String request;

  public RequestThread(GameServer gameServer, Role role, String host, int port, String playerName, int timeout, String request)
  {
    this.gameServer = gameServer;
    this.role = role;
    this.host = host;
    this.port = port;
    this.playerName = playerName;
    this.timeout = timeout;
    this.request = request;
  }

  protected abstract void handleResponse(String response);

  @Override
  public void run()
  {
    try {
      String response = HttpRequest.issueRequest(host, port, playerName, request, timeout);
      handleResponse(response);
    } catch (SocketTimeoutException e) {
      gameServer.notifyObservers(new ServerTimeoutEvent(role));
    } catch (UnknownHostException e) {
      gameServer.notifyObservers(new ServerConnectionErrorEvent(role));
    } catch (IOException e) {
      gameServer.notifyObservers(new ServerConnectionErrorEvent(role));
    }
  }
}
TOP

Related Classes of org.ggp.base.server.threads.RequestThread

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.