//This function sends to an elevator its next state, it calls Nextrequest and Stop func Nextstate(localip string, elevators []extra.Elevator, mystate string) (string, []Network.Request) { if Elevator.GetElevObstructionSignal() { Elevator.SetElevStopLamp(1) return "ERROR", nil } else if mystate == "ERROR" { Elevator.SetElevStopLamp(0) return "INIT", nil } stop := Stop(localip, mystate) if len(stop) != 0 { return "DOOR_OPEN", stop } next := Nextrequest(localip, elevators) if Elevator.ElevAtFloor() && next.Floor == Elevator.CurrentFloor() { return "DOOR_OPEN", append(stop, next) } if next.Floor > Elevator.CurrentFloor() { return "UP", nil } else if next.Floor < Elevator.CurrentFloor() && next.Floor != 0 { return "DOWN", nil } else if Elevator.ElevAtFloor() { return "IDLE", nil } else { return mystate, nil } }
//Stop is made to return the request to the elevator, it will stop for these requests func Stop(localip string, mystate string) []Network.Request { var takerequest []Network.Request requestlist := Network.GetRequestList() for _, request := range requestlist { if (request.Direction == Elevator.BUTTON_COMMAND && request.Ipsource == localip) || (request.Direction == Elevator.BUTTON_CALL_UP && mystate == "UP") || (request.Direction == Elevator.BUTTON_CALL_DOWN && mystate == "DOWN") { if request.Floor == Elevator.CurrentFloor() && Elevator.ElevAtFloor() { takerequest = append(takerequest, request) } } } return takerequest }