Skip to content
Snippets Groups Projects
fsm_idle.go 759 B
Newer Older
  • Learn to ignore specific revisions
  • Oliver Herms's avatar
    Oliver Herms committed
    package server
    
    type idleState struct {
    	fsm            *FSM2
    	newStateReason string
    }
    
    func newIdleState(fsm *FSM2) *idleState {
    	return &idleState{
    		fsm: fsm,
    	}
    }
    
    func (s *idleState) run() (state, string) {
    	for {
    		switch <-s.fsm.eventCh {
    		case ManualStart:
    			s.manualStart()
    		case AutomaticStart:
    			s.automaticStart()
    		default:
    			continue
    		}
    
    		return newConnectState(s.fsm), s.newStateReason
    	}
    }
    
    func (s *idleState) manualStart() {
    	s.newStateReason = "Received ManualStart event"
    	s.start()
    }
    
    func (s *idleState) automaticStart() {
    	s.newStateReason = "Received AutomaticStart event"
    	s.start()
    }
    
    func (s *idleState) start() {
    	s.fsm.resetConnectRetryCounter()
    	s.fsm.startConnectRetryTimer()
    	if s.fsm.active {
    		s.fsm.tcpConnect()
    	}
    }