⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serverbuilder.java

📁 这是我们专业的课程设计
💻 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 + -