From 1ea96b04594d951ecb677b6c66adf43db7948e75 Mon Sep 17 00:00:00 2001 From: sveinisdahl Date: Fri, 15 Mar 2024 15:39:53 +0100 Subject: [PATCH] Refactored sync/transition --- orderSync/orderSync.go | 38 +++++++++++++++++++++++++------------- transition/transition.go | 35 ----------------------------------- 2 files changed, 25 insertions(+), 48 deletions(-) delete mode 100644 transition/transition.go diff --git a/orderSync/orderSync.go b/orderSync/orderSync.go index 2274d1f..d3f4926 100644 --- a/orderSync/orderSync.go +++ b/orderSync/orderSync.go @@ -1,7 +1,6 @@ package orderSync import ( - "elevator-project/transition" "elevatorAlgorithm/elevator" "elevatorAlgorithm/hra" "elevatorAlgorithm/orders" @@ -129,21 +128,21 @@ func Sync(elevatorSystemFromFSM chan elevator.Elevator, localId string, orderAss func AddOrder(localId string, syncOrderSystem SyncOrderSystem, btn elevio.ButtonEvent) SyncOrderSystem { if btn.Button == elevio.BT_Cab { - syncOrderSystem.CabOrders[localId][btn.Floor][localId] = transition.Order(syncOrderSystem.CabOrders[localId][btn.Floor][localId], unconfirmedOrder) + syncOrderSystem.CabOrders[localId][btn.Floor][localId] = TransitionOrder(syncOrderSystem.CabOrders[localId][btn.Floor][localId], unconfirmedOrder) } else { - syncOrderSystem.HallOrders[btn.Floor][btn.Button][localId] = transition.Order(syncOrderSystem.HallOrders[btn.Floor][btn.Button][localId], unconfirmedOrder) + syncOrderSystem.HallOrders[btn.Floor][btn.Button][localId] = TransitionOrder(syncOrderSystem.HallOrders[btn.Floor][btn.Button][localId], unconfirmedOrder) } return syncOrderSystem } func RemoveOrder(localId string, orderToClear orders.ClearFloorOrders, syncOrderSystem SyncOrderSystem) SyncOrderSystem { if orderToClear.Cab { - syncOrderSystem.CabOrders[localId][orderToClear.Floor][localId] = transition.Order(syncOrderSystem.CabOrders[localId][orderToClear.Floor][localId], servicedOrder) + syncOrderSystem.CabOrders[localId][orderToClear.Floor][localId] = TransitionOrder(syncOrderSystem.CabOrders[localId][orderToClear.Floor][localId], servicedOrder) } if orderToClear.HallUp { - syncOrderSystem.HallOrders[orderToClear.Floor][0][localId] = transition.Order(syncOrderSystem.HallOrders[orderToClear.Floor][0][localId], servicedOrder) + syncOrderSystem.HallOrders[orderToClear.Floor][0][localId] = TransitionOrder(syncOrderSystem.HallOrders[orderToClear.Floor][0][localId], servicedOrder) } if orderToClear.HallDown { - syncOrderSystem.HallOrders[orderToClear.Floor][1][localId] = transition.Order(syncOrderSystem.HallOrders[orderToClear.Floor][1][localId], servicedOrder) + syncOrderSystem.HallOrders[orderToClear.Floor][1][localId] = TransitionOrder(syncOrderSystem.HallOrders[orderToClear.Floor][1][localId], servicedOrder) } return syncOrderSystem } @@ -152,17 +151,13 @@ func Transition(localId string, networkMsg StateMsg, updatedSyncOrderSystem Sync updatedSyncOrderSystem = AddElevatorToSyncOrderSystem(localId, networkMsg, updatedSyncOrderSystem) - orderSystem := SyncOrderSystemToOrderSystem(localId, updatedSyncOrderSystem) - orderSystem.HallOrders = transition.Hall(orderSystem.HallOrders, networkMsg.OrderSystem.HallOrders) - - updatedSyncOrderSystem = UpdateSyncOrderSystem(localId, updatedSyncOrderSystem, orderSystem) - return ConsensusBarrierTransition(localId, updatedSyncOrderSystem, peers) } func AddElevatorToSyncOrderSystem(localId string, networkMsg StateMsg, syncOrderSystem SyncOrderSystem) SyncOrderSystem { for floor, orders := range networkMsg.OrderSystem.HallOrders { for btn, networkorder := range orders { + syncOrderSystem.HallOrders[floor][btn][localId] = TransitionOrder(syncOrderSystem.HallOrders[floor][btn][localId], networkorder) syncOrderSystem.HallOrders[floor][btn][networkMsg.Id] = networkorder } } @@ -173,9 +168,9 @@ func AddElevatorToSyncOrderSystem(localId string, networkMsg StateMsg, syncOrder for syncID := range networkMsg.OrderSystem.CabOrders { _, ok := syncOrderSystem.CabOrders[elevId][floor][syncID] if ok { - syncOrderSystem.CabOrders[elevId][floor][syncID] = transition.Order(syncOrderSystem.CabOrders[elevId][floor][syncID], order) + syncOrderSystem.CabOrders[elevId][floor][syncID] = TransitionOrder(syncOrderSystem.CabOrders[elevId][floor][syncID], order) } else { - syncOrderSystem.CabOrders[elevId][floor][syncID] = transition.Order(unknownOrder, order) + syncOrderSystem.CabOrders[elevId][floor][syncID] = TransitionOrder(unknownOrder, order) } } } @@ -254,6 +249,23 @@ func ConsensusAmongPeers(order SyncOrder, peers []string) bool { return true } +func TransitionOrder(currentOrder int, updatedOrder int) int { + if currentOrder == unknownOrder { //Catch up if we just joined + return updatedOrder + } + if currentOrder == noOrder && updatedOrder == servicedOrder { //Prevent reset + return currentOrder + } + if currentOrder == servicedOrder && updatedOrder == noOrder { //Reset + return noOrder + } + if updatedOrder <= currentOrder { //Counter + return currentOrder + } else { + return updatedOrder + } +} + func NewSyncOrderSystem(id string) SyncOrderSystem { HallOrders := make([][]SyncOrder, elevator.N_FLOORS) for i := 0; i < elevator.N_FLOORS; i++ { diff --git a/transition/transition.go b/transition/transition.go deleted file mode 100644 index 889ac8b..0000000 --- a/transition/transition.go +++ /dev/null @@ -1,35 +0,0 @@ -package transition - -const ( - unknownOrder = iota - noOrder - unconfirmedOrder - confirmedOrder - servicedOrder -) - -func Hall(internalRequests [][]int, networkRequests [][]int) [][]int { - for i, row := range internalRequests { - for j, req := range row { - internalRequests[i][j] = Order(req, networkRequests[i][j]) - } - } - return internalRequests -} - -func Order(currentOrder int, updatedOrder int) int { - if currentOrder == unknownOrder { //Catch up if we just joined - return updatedOrder - } - if currentOrder == noOrder && updatedOrder == servicedOrder { //Prevent reset - return currentOrder - } - if currentOrder == servicedOrder && updatedOrder == noOrder { //Reset - return noOrder - } - if updatedOrder <= currentOrder { //Counter - return currentOrder - } else { - return updatedOrder - } -}