Skip to content

Commit 00e582c

Browse files
committed
Clear state orders on board connection
1 parent 313ca4b commit 00e582c

3 files changed

Lines changed: 41 additions & 6 deletions

File tree

backend/cmd/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ func main() {
156156
boardIdToBoard[abstraction.BoardId(id)] = name
157157
}
158158
messageTopic := message_topic.NewUpdateTopic(boardIdToBoard)
159-
stateOrderTopic := order_topic.NewState(idToBoard)
159+
stateOrderTopic := order_topic.NewState(idToBoard, trace.Logger)
160160

161161
broker.AddTopic(data_topic.UpdateName, dataTopic)
162162
broker.AddTopic(connection_topic.UpdateName, connectionTopic)

backend/pkg/broker/topics/order/state.go

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/HyperloopUPV-H8/h9-backend/pkg/websocket"
1212
"github.com/google/uuid"
1313
ws "github.com/gorilla/websocket"
14+
"github.com/rs/zerolog"
1415
)
1516

1617
const StateName abstraction.BrokerTopic = "order/stateOrders"
@@ -22,9 +23,10 @@ type State struct {
2223
subscribers map[websocket.ClientId]struct{}
2324
pool *websocket.Pool
2425
api abstraction.BrokerAPI
26+
logger zerolog.Logger
2527
}
2628

27-
func NewState(idToBoard map[uint16]string) *State {
29+
func NewState(idToBoard map[uint16]string, baseLogger zerolog.Logger) *State {
2830
enabled := make(map[string]map[abstraction.PacketId]struct{})
2931
for _, board := range idToBoard {
3032
enabled[board] = make(map[abstraction.PacketId]struct{})
@@ -35,6 +37,7 @@ func NewState(idToBoard map[uint16]string) *State {
3537
idToBoard: idToBoard,
3638
connectionMx: new(sync.Mutex),
3739
subscribers: make(map[websocket.ClientId]struct{}),
40+
logger: baseLogger,
3841
}
3942
}
4043

@@ -45,20 +48,26 @@ func (state *State) Topic() abstraction.BrokerTopic {
4548
func (state *State) Push(push abstraction.BrokerPush) error {
4649
switch action := push.(type) {
4750
case *StateAdd:
51+
state.logger.Info().Msg("add")
4852
return state.addOrders(action.update)
4953
case *StateRemove:
54+
state.logger.Info().Msg("remove")
5055
return state.removeOrders(action.update)
56+
case *StateClear:
57+
state.logger.Info().Msg("clear board")
58+
return state.clearBoard(action.board)
5159
default:
52-
fmt.Printf("unknown push type: %T", push)
53-
return topics.ErrUnexpectedPush{Push: push}
60+
err := topics.ErrUnexpectedPush{Push: push}
61+
state.logger.Warn().Stack().Err(err).Msg("unexpected topic")
62+
return err
5463
}
5564
}
5665

5766
func (state *State) addOrders(add *order.Add) error {
5867
for _, addedOrder := range add.Orders() {
5968
board, ok := state.idToBoard[uint16(addedOrder)]
6069
if !ok {
61-
fmt.Println("unrecoginzed id:", addedOrder)
70+
state.logger.Warn().Uint16("id", uint16(addedOrder)).Msg("unrecognized topic")
6271
continue
6372
}
6473

@@ -72,7 +81,7 @@ func (state *State) removeOrders(remove *order.Remove) error {
7281
for _, removedOrder := range remove.Orders() {
7382
board, ok := state.idToBoard[uint16(removedOrder)]
7483
if !ok {
75-
fmt.Println("unrecoginzed id:", removedOrder)
84+
state.logger.Warn().Uint16("id", uint16(removedOrder)).Msg("unrecognized topic")
7685
continue
7786
}
7887

@@ -82,6 +91,17 @@ func (state *State) removeOrders(remove *order.Remove) error {
8291
return state.updateOrders()
8392
}
8493

94+
func (state *State) clearBoard(board string) error {
95+
if _, ok := state.enabledOrders[board]; !ok {
96+
state.logger.Warn().Str("board", board).Msg("unknown board")
97+
return nil
98+
}
99+
100+
state.enabledOrders[board] = make(map[abstraction.PacketId]struct{}, len(state.enabledOrders[board]))
101+
102+
return state.updateOrders()
103+
}
104+
85105
func (state *State) updateOrders() error {
86106
orderList := make(map[string][]abstraction.PacketId, len(state.enabledOrders))
87107
for board, enabledOrders := range state.enabledOrders {
@@ -174,3 +194,17 @@ func NewRemove(diff *order.Remove) *StateRemove {
174194
func (remove *StateRemove) Topic() abstraction.BrokerTopic {
175195
return StateName
176196
}
197+
198+
type StateClear struct {
199+
board string
200+
}
201+
202+
func NewStateClear(boardName string) *StateClear {
203+
return &StateClear{
204+
board: boardName,
205+
}
206+
}
207+
208+
func (clear *StateClear) Topic() abstraction.BrokerTopic {
209+
return StateName
210+
}

backend/pkg/vehicle/vehicle.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,5 +235,6 @@ func (vehicle *Vehicle) ConnectionUpdate(target abstraction.TransportTarget, isC
235235
vehicle.broker.Push(connection_topic.NewConnection(string(target), isConnected))
236236
if isConnected {
237237
vehicle.updateFactory.ClearPacketsFor(target)
238+
vehicle.broker.Push(order_topic.NewStateClear(string(target)))
238239
}
239240
}

0 commit comments

Comments
 (0)