📄 serverbuilder.java
字号:
package Server;
import java.io.FileInputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;
import Client.ClientBuilder;
import Commen.NetIO;
import Data.AdministratorCommandData;
import Data.InnerPassengerCommandData;
import Data.OuterPassengerCommandData;
import Data.StateData;
import Event.ReceiveDataListener;
import Event.ServerEventListener;
public class ServerBuilder extends Thread implements ServerEventListener {
private ServerSocket serverSocket;
private boolean isBuilding = false;
private Server admin;
private Vector<Server> fromServerList = new Vector<Server>();
private Vector<Server> serverList = new Vector<Server>();
private static int soundPort = 9999;
private static int filePort = 7777;
private String fileIP;
private ReceiveDataListener listener;
public static Socket AcceptSoundConnect() {
try {
ServerSocket soundServerSocket = new ServerSocket(soundPort);
Socket socket = soundServerSocket.accept();
System.out.println("# Recieve one sound client");
return socket;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
public static Socket AcceptFileConnect() {
try {
ServerSocket soundServerSocket = new ServerSocket(filePort);
Socket socket = soundServerSocket.accept();
System.out.println("# Recieve one file client");
return socket;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
public ServerBuilder() {
try {
isBuilding = true;
serverSocket = new ServerSocket(8888);
admin = null;
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void run() {
while (isBuilding) {
try {
Socket socket = serverSocket.accept();
Server server = new Server(socket, this);
serverList.addElement(server);
server.start();
System.out.println("# One in. ServerNum : "
+ serverList.size());
Thread.sleep(1000);
} catch (Exception ex) {
ex.printStackTrace();
}
try {
Thread.sleep(50);
}catch (Exception ex) {}
}
}
public void StartListening() {
this.start();
}
public void LetOneClientToConnect(Server server, String ip) {
System.out.println("# Call another client to connect");
server.SendCommendVoice(ip);
}
public void LetAdminToConnect(Server fromServer, String ip) {
System.out.println("# A client to call admin to connect");
if (admin == null) {
System.out.println("no admin");
return;
}
fromServerList.addElement(fromServer);
LetOneClientToConnect(admin, ip);
System.out
.println("# New voice connect successful. VoiceNum : "
+ fromServerList.size());
}
public void CloseAvoiceConnect(Server fromServer) {
fromServer.SendCommendEndVoice();
fromServer.EndVoice();
fromServerList.removeElement(fromServer);
if (fromServerList.size() == 0) {// 没有与admin连的了
admin.SendCommendEndVoice();
admin.EndVoice();
}
System.out.println("# Remove voice connect successful. VoiceNum : "
+ serverList.size());
}
public void CloseThisServer(Server server) {
serverList.removeElement(server);
System.out.println("# Remove server successfully. ServerNum : "
+ serverList.size());
}
public void Close() {
for (int i = serverList.size() - 1; i >= 0; i--) {
serverList.elementAt(i).SendCommendClose();
serverList.elementAt(i).Close();
serverList.removeElementAt(i);
}
isBuilding = false;
}
public void SetAdmin(Server server) {
admin = server;
if (server != null) {
System.out.println("# Set admin successful");
} else {
System.out.println("# Admin has leave");
}
}
public void RequireTransferNoteFile(String ip) {
System.out.println("# One server want the note");
fileIP = ip;
String filePath = listener.HandleCommendGetFile();
// //给出接口 让xtx那知道 下面为测试用
SendFile(filePath);
}
public void DeliverStateDate(StateData data) {
System.out
.println("# Deliver Status Data to clients. ServerNum : "
+ serverList.size());
for (int i = 0; i < serverList.size(); i++) {
serverList.elementAt(i).SendAllData(data);
}
}
public void SendFile(String filePath) {
if (fileIP == null) {
System.out.println("# No one require file");
return;
}
System.out.println("# Send out a file");
try {
Socket fSocket = ClientBuilder.ConnectFileServer(fileIP);
System.out.println("# File Client in");
NetIO fIO = new NetIO(fSocket);
FileInputStream fStream = new FileInputStream(filePath);
int count = fStream.available();
byte[] data = new byte[count];
fStream.read(data);
fIO.WriteBytes(data);
fStream.close();
fIO.Close();
fSocket.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void RecieveAllData(StateData data) {
System.out.println("# RecieveAllData");
}
public void RecieveInData(InnerPassengerCommandData data) {
System.out.println("# RecieveInData");
listener.HandleInnerPassengerCommandData(data);
}
public void RecieveOutData(OuterPassengerCommandData data) {
System.out.println("# RecieveOutData");
listener.HandleOuterPassengerCommandData(data);
}
public void ReceiveAdminData(AdministratorCommandData data) {
System.out.println("# ReceiveAdminData");
System.out.println(data == null);
listener.HandleAdministratorCommandData(data);
}
public void AddListener(ReceiveDataListener listener) {
this.listener = listener;
System.out.println("# Add Listener successfully");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -