jp.ac.fun.osawalab.tileworld.client
クラス Client

java.lang.Object
  上位を拡張 jp.ac.fun.osawalab.tileworld.client.Client
すべての実装されたインタフェース:
Runnable
直系の既知のサブクラス:
PlayerClient, ViewerClient

public abstract class Client
extends Object
implements Runnable

クライアントの抽象クラスです。 プレイヤー、ビューアーに共通するコマンドについて、 送信するメソッドの定義が行われています。

作成者:
高山 貴裕(公立はこだて未来大学 システム情報科学研究科 大沢研究室)
関連項目:
PlayerClient, ViewerClient

コンストラクタの概要
Client(String host, int port, String id, int messagePort)
          サーバーのhost、portと、クライアントID、メッセージを受けるportを指定して、 クライアントのインスタンスを生成します。
 
メソッドの概要
 String[] getAgentList()
          コマンド:「AGENTLIST」を送信し、エージェントのリストを取得します。
 String[] getAgentList(String playerID)
          コマンド:「AGENTLIST $PLAYER_ID」を送信し、 指定されたプレイヤーについてのエージェントリストIDを取得します。
protected  String getMessage()
          クロックなどのサーバーからのメッセージを取得します。
 String[] getPlayerList()
          コマンド:「PLAYERLIST」を送信し、プレイヤーのリストを取得します。
protected  String getReply()
          サーバーにコマンドを送信した後、それに対する応答を取得します。
 int getScore(String agentID)
          コマンド:「SCORE $AGENT_ID」を送信し、 指定されたエージェントのスコアを返します。
 String[] getScoreList()
          コマンド:「SCORELIST」を送信し、スコアのリストを返します。
 String[] getScoreList(String playerID)
          コマンド:「SCORELIST」を送信し、 指定されたプレイヤーに関連づけられたエージェント達についての、 スコアのリストを返します。
 char[][] getWorld()
          コマンド:「WORLD」を送信し、 世界の状態をchar型の2次元配列として取得します。
 void login(String clientID, int messagePort)
          コマンド:「LOGIN $CLIENT_ID $PORT」
 void logout()
          コマンド:「LOGOUT」を送信し,ログアウトを行います.
protected abstract  void onMessageReceived(String message)
          メッセージを受信したとき、呼ばれるメソッドです。
protected abstract  void onTicked(int clock)
          時刻が一つ進んだときに呼ばれるメソッドです。
 void printWorld(PrintStream out, char[][] world)
          char型2次元配列を指定されたPrintStreamに出力します。
 void run()
          Clientスレッドのメインループです。
protected  void sendQuery(String query)
          要求コマンドを送信します。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

Client

public Client(String host,
              int port,
              String id,
              int messagePort)
サーバーのhost、portと、クライアントID、メッセージを受けるportを指定して、 クライアントのインスタンスを生成します。 クライアントIDが既に存在する場合、適当にIDを変更する場合があります。

パラメータ:
host - Tileworldサーバーのhostname。
port - Tileworldサーバーのport。
id - ビューアークライアントのID。
messagePort - サーバーからのメッセージを受けるport。
メソッドの詳細

getAgentList

public String[] getAgentList()
コマンド:「AGENTLIST」を送信し、エージェントのリストを取得します。 エージェントIDが一つ以上得られた場合、 エージェントIDを要素にもつ文字列の配列 (長さは、得られたエージェントIDの数と等しい)を返します。 そうでない場合はnullを返します。

戻り値:
エージェントIDを要素にもつ文字列の配列。 エージェントIDが一つも得られなかった場合はnull

getAgentList

public String[] getAgentList(String playerID)
コマンド:「AGENTLIST $PLAYER_ID」を送信し、 指定されたプレイヤーについてのエージェントリストIDを取得します。 $PLAYER_IDの部分は、引数のplayerIDで 置き換えられます。$PLAYER_IDに 関連づけられたエージェントのリストを取得します。 エージェントIDが一つ以上得られた場合、 エージェントIDを要素にもつ文字列の配列 長さは、得られたエージェントIDの数と等しい)を返します。 そうでない場合はnullを返します。

パラメータ:
playerID - 取得したいエージェントリストをもつ プレイヤーのID。
戻り値:
エージェントIDを要素にもつ文字列の配列。 エージェントIDが一つも得られなかった場合はnull

getPlayerList

public String[] getPlayerList()
コマンド:「PLAYERLIST」を送信し、プレイヤーのリストを取得します。 プレーヤーIDが一つ以上得られた場合、 プレイヤーIDを要素にもつ文字列の配列 (長さは、得られたプレイヤーの数と等しい)を返します。 そうでない場合はnullを返します。

戻り値:
プレイヤーIDを要素にもつ文字列の配列。 プレイヤーIDが一つも得られなかった場合はnull

getScore

public int getScore(String agentID)
コマンド:「SCORE $AGENT_ID」を送信し、 指定されたエージェントのスコアを返します。 そのエージェントが存在しないなど、取得に失敗した場合は、 -1を返します。

パラメータ:
agentID - スコアを取得するエージェントのID。
戻り値:
エージェントのスコア。取得できなかった場合は-1。

getScoreList

public String[] getScoreList()
コマンド:「SCORELIST」を送信し、スコアのリストを返します。 スコアが一つ以上得られた場合、 エージェントID、スコアを要素にもつ文字列の配列 (長さは、得られたエージェントの数の2倍と等しい)を返します。 例えば、エージェントがN存在した場合、その配列の中身は、 {エージェント1のID, エージェント1のスコア, エージェント2のID, エージェント2のスコア,...,エージェントNのID, エージェントNのスコア} のようになっています。 エージェントIDが一つも得られなかった場合はnullを返します。

戻り値:
エージェントIDを要素にもつ文字列の配列。 エージェントIDが一つも得られなかった場合はnull
関連項目:
getScoreList(String)

getScoreList

public String[] getScoreList(String playerID)
コマンド:「SCORELIST」を送信し、 指定されたプレイヤーに関連づけられたエージェント達についての、 スコアのリストを返します。 スコアが一つ以上得られた場合、 エージェントID、スコアを要素にもつ文字列の配列 (長さは、得られたエージェントの数の2倍と等しい)を返します。 例えば、エージェントがN存在した場合、その配列の中身は、 {エージェント1のID, エージェント1のスコア, エージェント2のID, エージェント2のスコア,...,エージェントNのID, エージェントNのスコア} のようになっています。 エージェントIDが一つも得られなかった場合はnullを返します。

パラメータ:
スコアリストを取得したいプレイヤーのID。 -
戻り値:
エージェントIDを要素にもつ文字列の配列。 エージェントIDが一つも得られなかった場合はnull
関連項目:
getScoreList()

getWorld

public char[][] getWorld()
コマンド:「WORLD」を送信し、 世界の状態をchar型の2次元配列として取得します。

戻り値:
世界の状態を表すchar型の2次元配列。 もし、取得に失敗した場合はnull

login

public void login(String clientID,
                  int messagePort)
           throws jp.ac.fun.osawalab.tileworld.client.AlreadyExistsException
コマンド:「LOGIN $CLIENT_ID $PORT」

パラメータ:
clientID - ログインするプレイヤーIDまたはビューアーID。
messagePort - クロックなどのサーバーからのメッセージを受けるポート。
例外:
jp.ac.fun.osawalab.tileworld.client.AlreadyExistsException

logout

public void logout()
コマンド:「LOGOUT」を送信し,ログアウトを行います.


printWorld

public void printWorld(PrintStream out,
                       char[][] world)
char型2次元配列を指定されたPrintStreamに出力します。

パラメータ:
out - 出力先のPrintStream
world - 出力する2次元配列。

run

public void run()
Clientスレッドのメインループです。 クロックなどのサーバーからのメッセージを受け、 onMessageReceived(String)や、 onTicked(int)を呼び出します。

定義:
インタフェース Runnable 内の run
関連項目:
Runnable.run()

getMessage

protected String getMessage()
クロックなどのサーバーからのメッセージを取得します。 実際には、ClientSocket.getMessage()によって取得されます。

戻り値:
取得したメッセージ。

getReply

protected String getReply()
サーバーにコマンドを送信した後、それに対する応答を取得します。 実際には、ClientSocket.getReply()によって取得されます。

戻り値:
取得した応答。

onMessageReceived

protected abstract void onMessageReceived(String message)
メッセージを受信したとき、呼ばれるメソッドです。

パラメータ:
message - 受信したメッセージ。

onTicked

protected abstract void onTicked(int clock)
時刻が一つ進んだときに呼ばれるメソッドです。

パラメータ:
clock - 進んだ後の時刻です。

sendQuery

protected void sendQuery(String query)
要求コマンドを送信します。 実際には、ClientSocket.sendQuery(String) が処理を行います。

パラメータ:
query - 送信するコマンド。