66 "time"
77
88 "github.com/HyperloopUPV-H8/h9-backend/internal/common"
9+ "github.com/HyperloopUPV-H8/h9-backend/pkg/abstraction"
910 "github.com/HyperloopUPV-H8/h9-backend/pkg/transport/packet/data"
1011
1112 "github.com/HyperloopUPV-H8/h9-backend/internal/update_factory/models"
@@ -30,9 +31,10 @@ type UpdateFactory struct {
3031 packetCount map [uint16 ]uint
3132 lastPacketCount map [uint16 ]float64
3233 trace zerolog.Logger
34+ boardToPackets map [abstraction.TransportTarget ][]uint16
3335}
3436
35- func NewFactory () * UpdateFactory {
37+ func NewFactory (boardToPackets map [abstraction. TransportTarget ][] uint16 ) * UpdateFactory {
3638 trace .Info ().Msg ("new update factory" )
3739 factory := & UpdateFactory {
3840 count : make (map [uint16 ]uint64 ),
@@ -44,13 +46,39 @@ func NewFactory() *UpdateFactory {
4446 packetCount : make (map [uint16 ]uint ),
4547 lastPacketCount : make (map [uint16 ]float64 ),
4648 trace : trace .With ().Str ("component" , "updateFactory" ).Logger (),
49+ boardToPackets : boardToPackets ,
4750 }
4851
4952 go factory .adjustOrder ()
5053
5154 return factory
5255}
5356
57+ func (factory * UpdateFactory ) ClearPacketsFor (target abstraction.TransportTarget ) {
58+ packets , ok := factory .boardToPackets [target ]
59+ if ! ok {
60+ return
61+ }
62+
63+ factory .averageMx .Lock ()
64+ defer factory .averageMx .Unlock ()
65+ factory .countMx .Lock ()
66+ defer factory .countMx .Unlock ()
67+
68+ for _ , id := range packets {
69+ factory .clearPacket (id )
70+ }
71+ }
72+
73+ func (factory * UpdateFactory ) clearPacket (id uint16 ) {
74+ delete (factory .count , id )
75+ delete (factory .cycleTimeAvg , id )
76+ delete (factory .timestamp , id )
77+ delete (factory .fieldAvg , id )
78+ delete (factory .packetCount , id )
79+ delete (factory .lastPacketCount , id )
80+ }
81+
5482func (factory * UpdateFactory ) NewUpdate (packet * data.Packet ) models.Update {
5583 factory .updateCount (uint16 (packet .Id ()))
5684
0 commit comments