?? chessthread.java
字號:
/**
* 一個客戶端用戶線程. 處理用戶落子的點擊事件處理,及消息發(fā)送.
*/
package chessface;
import java.io.IOException;
import java.util.StringTokenizer;
public class chessThread extends Thread {
chessPad chesspad;
public chessThread(chessPad chesspad) {
this.chesspad = chesspad;
}
/**
* 發(fā)送消息
*/
public void sendMessage(String sndMessage) {
try {
// 利用由socket提供的輸出流向服務器發(fā)送信息
chesspad.outData.writeUTF(sndMessage);
} catch (Exception ea) {
System.out.println("chessThread.sendMessage:" + ea);
}
}
/**
* 接收消息,具體就是落子信息,包括落子位置,顏色等.
*/
public void acceptMessage(String recMessage) {
// 如果收到的消息以“/chess”開頭,將其中的坐標信息和顏色信息提取出來
if (recMessage.startsWith("/chess ")) {
StringTokenizer userToken = new StringTokenizer(recMessage, " ");
String chessToken;
String[] chessOpt = {"-1", "-1", "0"};
int chessOptNum = 0;
// 使用Tokenizer將空格分隔的字符串分成三段
while (userToken.hasMoreTokens()) {
chessToken = (String) userToken.nextToken(" ");
if (chessOptNum >= 1 && chessOptNum <= 3) {
chessOpt[chessOptNum - 1] = chessToken;
}
chessOptNum++;
}
// 將己方的走棋信息如棋子擺放的位置、棋子的顏色為參數,使用netChessPaint函數
// 是對方客戶端也看到己方的落子位置。
chesspad.netChessPaint(Integer.parseInt(chessOpt[0]), Integer.parseInt(chessOpt[1]), Integer
.parseInt(chessOpt[2]));
} else if (recMessage.startsWith("/yourname ")) {
chesspad.chessSelfName = recMessage.substring(10);
} else if (recMessage.equals("/error")) {
chesspad.statusText.setText("錯誤:沒有這個用戶,請退出程序,重新加入");
}
}
public void run() {
String message = "";
try {
while (true) {
//之所以要開線程、是因為這里socket讀取服務器發(fā)來的信息會阻塞。。
message = chesspad.inData.readUTF();
//解析處理消息
acceptMessage(message);
}
} catch (IOException es) {
//讀取異常..讀者可以試著添加相應處理,比如像服務器發(fā)回相應的信息提示等,
//從而可提高程序運行可靠性
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -