📄 client.java
字号:
package Client;
import java.io.FileInputStream;
import java.net.InetAddress;
import java.net.Socket;
import org.w3c.dom.Document;
import Commen.AnalyzeXML;
import Commen.NetIO;
import Commen.Send;
import Data.AdministratorCommandData;
import Data.InnerPassengerCommandData;
import Data.OuterPassengerCommandData;
import Data.StateData;
import Event.FinishAnalyseListener;
import Event.RecieveStateDataListener;
import Sever.ServerBuilder;
import Sound.SoundThread;
import XML.TransXML;
public class Client extends Thread implements FinishAnalyseListener {
private Socket socket;
private NetIO IO;
private SoundThread soundThread = null;
private boolean isActive = false;// 是否处于活动状态
private boolean onVoice = false;// 是否处于语音状态
private AnalyzeXML analyzer;
private RecieveStateDataListener recieveStateDataListener = null;
public void Connect() {
try {
socket = ClientBuilder.Connect();
isActive = true;
IO = new NetIO(socket);
analyzer = new AnalyzeXML(this);
this.start();
} catch (Exception ex) {
System.out.println(ex);
}
}
public void Connect(String ip) {
try {
socket = ClientBuilder.Connect(ip);
isActive = true;
IO = new NetIO(socket);
analyzer = new AnalyzeXML(this);
this.start();
} catch (Exception ex) {
System.out.println(ex);
}
}
public void run() {
while (isActive) {
try {
if (IO.CanRead()) {
String docStr = IO.ReadString();
Document doc = TransXML.StringToXMLDoc(docStr);
analyzer.Analyze(doc);
}
} catch (Exception ex) {
System.out.println("trace" + ex);
}
try {
Thread.sleep(50);
}catch (Exception ex){}
}
System.out.println("Stop connection from server");
}
public void SendCommendVoice() {// 发出声音请求 并打开一个线程来接管
System.out.println("Client:this client want to start voice");
onVoice = true;
Send.BeginVoice(IO);
Socket soundSocket = ServerBuilder.AcceptSoundConnect();
soundThread = new SoundThread(soundSocket);
soundThread.Start();
}
public void SendCommendEndVoice() {
if (onVoice == false) {
return;
}
Send.EndVoice(IO);
System.out.println("Client:this client want to end voice");
EndVoice();
}
public void SendCommendBeAdmin() {
System.out.println("Client:this client want to be admin");
Send.BeAdmin(IO);
}
public void SendCommendClose() {
if (onVoice) {
SendCommendEndVoice();
}
System.out.println("Client:this client want to close");
Send.Close(IO);
}
public void SendCommendGetFile() {
try {
System.out.println("Client:this client want noteFile");
String ip = InetAddress.getLocalHost().getHostAddress();
Send.GetFile(ip, IO);
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void SendAllData(StateData data) {
Send.AllData(IO, data);
}
public void SendInData(InnerPassengerCommandData data) {
Send.InData(IO, data);
}
public void SendOutData(OuterPassengerCommandData data) {
Send.OutData(IO, data);
}
public void SendAdminData(AdministratorCommandData data) {
Send.AdminData(IO, data);
}
public void HandleCommendClose() {
System.out.println("Client:this client must close");
}
public void HandleCommendVoice(String ip) {
System.out.println("Client:this Client will connect the " + ip);
Socket soundSocket = ClientBuilder.ConnectSoundServer(ip);
soundThread = new SoundThread(soundSocket);
soundThread.Start();
}
public void HandleCommendEndVoice() {
System.out.println("Client:this client must end voice ");
EndVoice();
}
public void HandleCommendBeAdmin() {// 无操作 因为这是传给serverbuilder的
}
public void HandleCommendGetFile(String ip) {// 无操作
}
public void HandleAllData(StateData data) {// 接口
System.out.println("client: HandleAllData");
recieveStateDataListener.RecieveStateData(data);
}
public void HandleInData(InnerPassengerCommandData data) {
}
public void HandleOutData(OuterPassengerCommandData data) {
}
public void HandleAdminData(AdministratorCommandData data) {
}
public void AddRecieveStateDataListener(
RecieveStateDataListener recieveStateDataListener) {
this.recieveStateDataListener = recieveStateDataListener;
}
public void EndVoice() {
onVoice = false;
soundThread.Close();
}
public void GetFile(String filePath) {
SendCommendGetFile();
try {
Socket fSocket = ServerBuilder.AcceptFileConnect();
@SuppressWarnings("unused")
FileInputStream fstream = new FileInputStream(filePath);
@SuppressWarnings("unused")
NetIO fIO = new NetIO(fSocket);
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void Close() {
try {
if (onVoice) {
EndVoice();
}
isActive = false;
SendCommendClose();
IO.Close();
socket.close();
} catch (Exception ex) {
System.out.println(ex);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -