アプリからPOSTメソッドで送られる値
UTN=ser********* | 端末ID |
ACTION=1 | 状態フラグ(ゲーム終了) |
RES=xx | 対戦結果フラグ |
対戦が終了すると、アプリは対戦結果をサーバに通知する。対戦に勝利した側のみが、サーバに結果を通知することができる。アプリからの通信を受けて、引分け時は双方がサーバにデータを通知することとなるが、先にデータを送ったほうの更新のみが反映され、後から送ったほうは無視する。システムエラーが発生しない限り、成功の値が戻される。アプリは値に従った表示を行う。
成功時…1
失敗時…0
設計に関しての記憶が新しいうちに、アプリの実装も行っておこう。
アプリからサーバサイドのシステムにデータを渡す場合には、POSTメソッドを用いてデータを送る。接続モードも読み書きが可能なモードにしておく。また、送信時のContent-Typeも、忘れずにapplication/x-www-form-urlencodedを指定しておこう。
以下に、今回用意した接続と送信、受信のメソッドを示す。
接続メソッドでは、スクリプトとの通信に、適切なリクエストを設定したHttpConnectionを返す。返されたオブジェクトを用いて接続と切断だけを行えばよい。
private static HttpConnection connectPost() {
try {
hc = (HttpConnection)Connector.open(
IApp.getSourceURL() + "arena.php",
Connector.READ_WRITE, true);
hc.setRequestMethod(HttpConnection.POST);
hc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
} catch (IOException e) {}
return hc;
}
| |
送信メソッドでは、引数に指定した文字列をスクリプトに送信する。
private static boolean sendPost(String sendData) {
try {
os = hc.openOutputStream();
byte[] outdata = sendData.getBytes();
os.write(outdata);
System.out.println("sendData: "+sendData);
os.close();
return true;
} catch (IOException e) {
return false;
}
}
| |
受信メソッドでは、受信したデータをすべて読み取り、使用しやすいように、String型にして返している。
private static String receivePost() {
try {
is = hc.openInputStream();
int isbuf;
byte[] single = new byte[1];
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for(;;) {
if((isbuf = is.read(single)) < 0) {
break;
}
baos.write(single);
}
is.close();
return baos.toString();
} catch (IOException e) {
return null;
}
}
| |
対戦相手を探すとき(マッチング時)に、サーバから送られてきたデータは不正なデータであれば"0"から始まっているので、その場合は例外を投げている。
if (strNet.startsWith("0")) {
throw new Exception();
}
| |
正常なデータであれば、"1/"から始まっているので、3文字目以降から、次の"/"までを取得する。以下は敵プレイヤーの名前を取得し、URLデコードを行っている例である。
int start = 2, end = strNet.indexOf("/", 2);
nameE = strNet.substring(start, end);
| |
Copyright © ITmedia, Inc. All Rights Reserved.