@@ -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
1617const 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 {
4548func (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
5766func (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+
85105func (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 {
174194func (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+ }
0 commit comments