📄 servermessage.java
字号:
import java.net.*;
import java.io.*;
/**
* Class for sending/relaying messages
*
* @author Sam Cavenagh
* @version 6/11/02
*
* Website: http://home.pacific.net.au/~cavenagh/SH/
* Email: cavenaghweb@hotmail.com
*/
class ServerMessage {
ServerSocket listenSocket;
Socket msgSocket[] = new Socket[3];
PrintWriter out[] = new PrintWriter[3];
BufferedReader in[] = new BufferedReader[3];
SHinterface sh;
String playersName;
boolean listen = true;
int socketCount = 0;
ServerMessage(SHinterface sh) {
this.sh = sh;
}
public void createConnection(String playersName) {
this.playersName = playersName;
sh.addMsg("Listening for other players");
new ListenThread();
}
public void sendMsg(String msg) {
for (int n = 0; n < 3; n++) {
if (out[n] != null)
out[n].println(playersName + ": " + msg);
}
}
public void endConnection() {
listen = false;
if (listenSocket != null)
try {
listenSocket.close();
} catch (IOException e) {
sh.addMsg("Error Closing Listen " + e);
}
for (int n = 0; n < 3; n++) {
if (msgSocket[n] != null) {
try {
out[n].println("end");
msgSocket[n].close();
} catch (Exception e2) {
sh.addMsg("Error Closing Msg " + e2);
}
}
}
socketCount = 0;
sh.addMsg("Connections Closed");
}
class WaitforMsg implements Runnable {
Thread wt; //Wait Thread
int socketNumber; //With of the 3 sockets is this socket listening to ?
boolean socketOK = true;
String name; //Name of player at other end of socket.
WaitforMsg(int socketNumber, String name) {
this.socketNumber = socketNumber;
this.name = name;
wt = new Thread(this, "Wait");
wt.start(); // Starting thread
}
public void run() {
do {
String otherplayermsg = "Message Error";
try {
otherplayermsg = in[socketNumber].readLine();
} catch (IOException e) {
sh.addMsg("Read Error: " + e);
disconnect();
}
if (socketOK) {
if (otherplayermsg.equals("end")) {
disconnect();
} else {
//Displaying msg to server player
sh.addMsg(otherplayermsg);
//Sending message to other players
for (int n = 0; n < 3; n++) {
if (out[n] != null)
if (socketNumber != n)
out[n].println(otherplayermsg);
}
}
}
} while (listen == true && socketOK == true);
sh.addMsg("Player " + name + " Has Disconnected");
sendMsg("Player " + name + " Has Disconnected");
}
private void disconnect() {
try {
msgSocket[socketNumber].close();
} catch (IOException e) {
sh.addMsg("Error Closing Listen " + e);
}
msgSocket[socketNumber] = null;
in[socketNumber] = null;
out[socketNumber] = null;
socketOK = false;
}
}
class ListenThread implements Runnable {
Thread lt; //Listen Thread
ListenThread() {
lt = new Thread(this, "Listen");
lt.start(); // Starting thread
}
public void run() {
//Opening listening Socket
listenSocket = null;
try {
listenSocket = new ServerSocket(4444);
} catch (IOException e) {
//sh.addMsg("Could not listen " + e);
}
boolean endlook = false;
//Waiting for connection
do {
msgSocket[socketCount] = null;
try {
msgSocket[socketCount] = listenSocket.accept();
} catch (IOException e2) {
sh.addMsg("Error Accept " + e2);
endlook = true;
}
if (!endlook) {
try {
out[socketCount] = new PrintWriter(
msgSocket[socketCount].getOutputStream(), true);
in[socketCount] = new BufferedReader(
new InputStreamReader(msgSocket[socketCount]
.getInputStream()));
} catch (IOException e) {
sh.addMsg("Error Out / In problem." + e);
}
String name = "unknown";
try {
name = in[socketCount].readLine();
} catch (IOException e3) {
sh.addMsg("Getting Otherplayers Name Error " + e3);
}
out[socketCount].println(playersName);
sh.addMsg("Connection established with " + name);
new WaitforMsg(socketCount, name);
socketCount++;
}
} while (listen == true && socketCount < 3 && endlook != true);
if (listenSocket != null)
try {
listenSocket.close();
} catch (IOException e) {
sh.addMsg("Error Closing Listen " + e);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -