45 lines
1.2 KiB
Go
45 lines
1.2 KiB
Go
package sessionbroker
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
sessioncontracts "github.com/example/remote-access-platform/backend/pkg/contracts/session"
|
|
)
|
|
|
|
var allowedTransitions = map[sessioncontracts.State]map[sessioncontracts.State]struct{}{
|
|
sessioncontracts.StateStarting: {
|
|
sessioncontracts.StateActive: {},
|
|
sessioncontracts.StateFailed: {},
|
|
sessioncontracts.StateTerminated: {},
|
|
},
|
|
sessioncontracts.StateActive: {
|
|
sessioncontracts.StateDetached: {},
|
|
sessioncontracts.StateReconnecting: {},
|
|
sessioncontracts.StateFailed: {},
|
|
sessioncontracts.StateTerminated: {},
|
|
},
|
|
sessioncontracts.StateDetached: {
|
|
sessioncontracts.StateReconnecting: {},
|
|
sessioncontracts.StateTerminated: {},
|
|
sessioncontracts.StateFailed: {},
|
|
},
|
|
sessioncontracts.StateReconnecting: {
|
|
sessioncontracts.StateActive: {},
|
|
sessioncontracts.StateDetached: {},
|
|
sessioncontracts.StateFailed: {},
|
|
sessioncontracts.StateTerminated: {},
|
|
},
|
|
}
|
|
|
|
func validateTransition(from, to sessioncontracts.State) error {
|
|
if from == to {
|
|
return nil
|
|
}
|
|
if allowed, ok := allowedTransitions[from]; ok {
|
|
if _, ok := allowed[to]; ok {
|
|
return nil
|
|
}
|
|
}
|
|
return fmt.Errorf("invalid session state transition: %s -> %s", from, to)
|
|
}
|