📄 serverbuilder.java
字号:
package Sever;
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.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;
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,now has 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("serverBuilder:call another client to connect");
server.SendCommendVoice(ip);
}
public void LetAdminToConnect(Server fromServer, String ip) {
System.out.println("serverBuilder: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("ServerBuilder:new voice connect successful ,has voiceNum "
+ serverList.size());
}
public void CloseAvoiceConnect(Server fromServer) {
System.out
.println("ServerBuilder:will remove voice connect,has voiceNum "
+ serverList.size());
fromServer.SendCommendEndVoice();
fromServer.EndVoice();
fromServerList.removeElement(fromServer);
if (fromServerList.size() == 0) {// 没有与admin连的了
admin.SendCommendEndVoice();
admin.EndVoice();
}
System.out
.println("ServerBuilder:remove voice connect successful ,has voiceNum "
+ serverList.size());
}
public void CloseThisServer(Server server) {
serverList.removeElement(server);
System.out
.println("ServerBuilder:remove server successfully,has serverNum "
+ serverList.size());
}
public void SetAdmin(Server server) {
admin = server;
if (server != null) {
System.out.println("serverBuilder:set admin successful");
} else {
System.out.println("serverBuilder:admin has leave");
}
}
public void RequireTransferNoteFile(String ip) {
System.out.println("ServerBuilder:one server want the note");
fileIP = ip;
}
public void DeliverStateDate(StateData data) {
System.out
.println("ServerBuilder:deliver alldata to clients:,has 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("ServerBuilder:No one require file");
return;
}
System.out.println("ServerBuilder:send out a file");
try {
Socket fSocket = ClientBuilder.ConnectFileServer(fileIP);
NetIO fIO = new NetIO(fSocket);
FileInputStream fStream = new FileInputStream(filePath);
int count = fStream.available();
byte[] data = new byte[count];
fStream.read(data);
while (count != -1)
fIO.WriteBytes(data);
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void RecieveAllData(StateData data) {
System.out.println("ServerBuilder:RecieveAllData");
}
public void RecieveInData(InnerPassengerCommandData data) {
System.out.println("ServerBuilder:RecieveInData");
}
public void RecieveOutData(OuterPassengerCommandData data) {
System.out.println("ServerBuilder:RecieveOutData");
}
public void RecieveAdminData(AdministratorCommandData data) {
System.out.println("ServerBuilder:RecieveAdminData");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -