📄 control.java
字号:
package Control;
import Event.ReceiveDataListener;
import Extend.XTXServer;
import Data.AdministratorCommandData;
import Data.InnerPassengerCommandData;
import Data.OuterPassengerCommandData;
public class Control implements ReceiveDataListener {
public double refreshTime = 1;
public Elevator[] elevator = new Elevator[4];//此处修改为4电梯
public XTXServer xtxServer = new XTXServer();
public boolean running = false;
public Control() {
running = true;
xtxServer.AddListener(this);
elevator[0] = new Elevator();
elevator[1] = new Elevator();
elevator[2] = new Elevator();
elevator[3] = new Elevator();//增加3
elevator[0].number = 0;
elevator[1].number = 1;
elevator[2].number = 2;
elevator[3].number = 3;//增加3
System.out.println("ESS Server launching.......");
Elevator.writeRecord("Start The system\n");
while (running) {
System.out.print("Elevator status : ");
for (int i = 0;i <= 3;i++){//修改为3
System.out.print(Elevator.data.elevator[i].floor + " " +
Elevator.data.elevator[i].direction + " ");
}
System.out.println();
try {
Thread.sleep((int) (refreshTime * 1000));
} catch (Exception e) {
}
if(Elevator.numberOfRunningElevators >= 0){
xtxServer.SendData(Elevator.data);
}
}
xtxServer.Close();
}
public void HandleInnerPassengerCommandData(InnerPassengerCommandData inData) {
Elevator.writeRecord("Button " + inData.button + " is pressed in elevator "+
inData.elevator +"\n");
if (inData.button == 11) {
elevator[inData.elevator].immediateOpen = true;
}else if (inData.button >= 1 && inData.button <= 10 &&
inData.button != Elevator.data.elevator[inData.elevator].floor){
Elevator.data.elevator[inData.elevator].light[inData.button] = 1;
elevator[inData.elevator].addStop(inData.button);
elevator[inData.elevator].findNextStop();
}
if(inData.button == Elevator.data.elevator[inData.elevator].floor){
elevator[inData.elevator].openGate();
if(!elevator[inData.elevator].immediateClose){
try {
Thread.sleep((int) (Elevator.gateOpenTime * Elevator.oneSecond));
} catch (Exception e) {
}
}
elevator[inData.elevator].immediateClose = false;
elevator[inData.elevator].closeGate();
if(elevator[inData.elevator].immediateOpen){
elevator[inData.elevator].immediateOpen = false;
elevator[inData.elevator].openGate();
if(!elevator[inData.elevator].immediateClose){
try {
Thread.sleep((int) (Elevator.gateOpenTime * Elevator.oneSecond));
} catch (Exception e) {
}
}
elevator[inData.elevator].closeGate();
}
}
}
public void HandleOuterPassengerCommandData(
OuterPassengerCommandData outData) {
System.out.println("Passenager command : "+outData.floor +" "+ outData.button);
Elevator.writeRecord("Button " + outData.button + " is pressed in floor " +
outData.floor+"\n");
//修改此处,可以使得电梯响应同层请求----刘畅
for (int i = 0; i <= 3; i++){//修改为3
if(Elevator.data.elevator[i].direction == 0)
if(Elevator.data.elevator[i].floor == outData.floor) {
elevator[i].needOpen = true;
return;
}
}
if (outData.button == 1)
Elevator.data.floor.upLight[outData.floor] = 1;
if (outData.button == -1)
Elevator.data.floor.downLight[outData.floor] = 1;
//这里好像是徐设置的返回为最大值则是找不到最好电梯
int number = findBestElevator(outData.floor, outData.button);
if (number != 4){//改成4,则是找不到
elevator[number].addStop(outData.floor);
elevator[number].findNextStop();
} else if (Elevator.numberOfRunningElevators >= 1) {
number = findNearestElevator(outData.floor, outData.button);
elevator[number].addStop(outData.floor);
elevator[number].findNextStop();
} else {
OuterTask task = new OuterTask(outData.floor, outData.button);
Elevator.outerTaskQueue.enqueue(task);
}
}
public void HandleAdministratorCommandData(
AdministratorCommandData adminData) {
System.out.println("Administrator command : " + adminData.elevator
+" "+ adminData.button);
Elevator.writeRecord("Administrator press button "+
adminData.button + " on elevator " + adminData.elevator+"\n");
switch (adminData.button) {
case 0: {
Elevator.data.elevator[adminData.elevator].direction = 0;
elevator[adminData.elevator].stop = true;
}
break;
case 1: {
Elevator.data.elevator[adminData.elevator].direction = 1;
elevator[adminData.elevator].direction = 1;
elevator[adminData.elevator].stop = false;
elevator[adminData.elevator].nextStop = 10;
}
break;
case 2: {
Elevator.data.elevator[adminData.elevator].direction = -1;
elevator[adminData.elevator].direction = -1;
elevator[adminData.elevator].stop = false;
elevator[adminData.elevator].nextStop = 1;
}
break;
case 3: {
elevator[adminData.elevator].immediateOpen = true;
}
break;
case 4: {
elevator[adminData.elevator].immediateClose = true;
}
break;
case 5: {
Elevator.data.elevator[adminData.elevator].direction = 0;
new Thread(elevator[adminData.elevator]).start();
elevator[adminData.elevator].running = true;
Elevator.numberOfRunningElevators++;
System.out.println("Elevator " + adminData.elevator + " started");
}
break;
case 6: {
Elevator.data.elevator[adminData.elevator].direction = 0;
elevator[adminData.elevator].nextStop = 1;
Elevator.data.elevator[adminData.elevator].direction = -1;
while (Elevator.data.elevator[adminData.elevator].floor != 1){
try {
Thread.sleep(50);
}catch (Exception ex) {}
}
elevator[adminData.elevator].running = false;
Elevator.numberOfRunningElevators--;
System.out.println("Elevator " + adminData.elevator + " shutdown");
}
break;
case 7: {
}
break;
case 8: {
}
break;
default:
break;
}
}
public int findBestElevator(int floor, int direction) {
int leastDistance = 10;
int bestElevator = 4;//这里修改为4
int distance;
for (int i = 0; i <= 3; i++) {//修改为3
if (elevator[i].running){
distance = floor - Elevator.data.elevator[i].floor;
if (direction * elevator[i].direction >= 0 && distance
* (elevator[i].nextStop - Elevator.data.elevator[i].floor) >= 0) {
if (distance < leastDistance)
leastDistance = distance;
bestElevator = i;
}
}
}
return bestElevator;
}
public int findNearestElevator(int floor, int direction) {
int leastDistance = 10;
int nearestElevator = 4;//修改为4
for (int i = 0; i <= 3; i++) {//修改为3
int distance = floor - Elevator.data.elevator[i].floor;
if (elevator[i].running && elevator[i].direction == 0) {
if (distance < leastDistance)
leastDistance = distance;
nearestElevator = i;
}
}
return nearestElevator;
}
public String HandleCommendGetFile() {
return "record.txt";
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -