MCPcopy
hub / github.com/daptin/daptin / stateMachineRunnerFor

Method stateMachineRunnerFor

server/fsm/fsm_manager.go:96–147  ·  view source on GitHub ↗
(currentState string, typeName string, machineId int64)

Source from the content-addressed store, hash-verified

94}
95
96func (fsm *fsmManager) stateMachineRunnerFor(currentState string, typeName string, machineId int64) (*loopfsm.FSM, error) {
97
98 s, v, err := statementbuilder.Squirrel.
99 Select("initial_state", "events").From("smd").Prepared(true).
100 Where(goqu.Ex{"id": machineId}).ToSQL()
101 if err != nil {
102 return nil, err
103 }
104
105 var jsonValue string
106 var initialState string
107
108 stmt1, err := fsm.db.Preparex(s)
109 if err != nil {
110 log.Errorf("[104] failed to prepare statment: %v", err)
111 }
112 defer func(stmt1 *sqlx.Stmt) {
113 err := stmt1.Close()
114 if err != nil {
115 log.Errorf("failed to close prepared statement: %v", err)
116 }
117 }(stmt1)
118
119 err = stmt1.QueryRowx(v...).Scan(&initialState, &jsonValue)
120
121 if currentState == "" {
122
123 if err != nil {
124 return nil, err
125 }
126 currentState = initialState
127 }
128
129 var events []LoopbackEventDesc
130 err = json.Unmarshal([]byte(jsonValue), &events)
131 if err != nil {
132 return nil, err
133 }
134
135 listOfEvents := make([]loopfsm.EventDesc, 0)
136 for _, e := range events {
137 e1 := loopfsm.EventDesc{
138 Name: e.Name,
139 Src: e.Src,
140 Dst: e.Dst,
141 }
142 listOfEvents = append(listOfEvents, e1)
143 }
144
145 fsmI := loopfsm.NewFSM(currentState, listOfEvents, map[string]loopfsm.Callback{})
146 return fsmI, nil
147}
148
149func (fsm *fsmManager) ApplyEvent(subject map[string]interface{}, stateMachineEvent StateMachineEvent) (string, error) {
150

Callers 1

ApplyEventMethod · 0.95

Calls 6

makeFunction · 0.85
ScanMethod · 0.80
QueryRowxMethod · 0.80
SelectMethod · 0.65
PreparexMethod · 0.65
CloseMethod · 0.65

Tested by

no test coverage detected