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

📄 control.java

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