From e12b6e098ebafad6fcdc4d8be53ec1cd4e3a7fcf Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Wed, 24 Dec 2025 15:28:35 -0600 Subject: [PATCH] add artnet packet filter --- internal/processor/artnet-packet-filter.go | 52 ++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 internal/processor/artnet-packet-filter.go diff --git a/internal/processor/artnet-packet-filter.go b/internal/processor/artnet-packet-filter.go new file mode 100644 index 0000000..cf7b96c --- /dev/null +++ b/internal/processor/artnet-packet-filter.go @@ -0,0 +1,52 @@ +package processor + +import ( + "context" + "fmt" + + "github.com/jwetzell/artnet-go" + "github.com/jwetzell/showbridge-go/internal/config" +) + +type ArtNetPacketFilter struct { + config config.ProcessorConfig + OpCode uint16 +} + +func (apf *ArtNetPacketFilter) Process(ctx context.Context, payload any) (any, error) { + payloadPacket, ok := payload.(artnet.ArtNetPacket) + + if !ok { + return nil, fmt.Errorf("artnet.packet.filter processor only accepts an ArtNetPacket") + } + + if payloadPacket.GetOpCode() != apf.OpCode { + return nil, nil + } + + return payloadPacket, nil +} + +func (apf *ArtNetPacketFilter) Type() string { + return apf.config.Type +} + +func init() { + RegisterProcessor(ProcessorRegistration{ + Type: "artnet.packet.filter", + New: func(config config.ProcessorConfig) (Processor, error) { + params := config.Params + + opCode, ok := params["opCode"] + if !ok { + return nil, fmt.Errorf("artnet.packet.filter requires an opCode parameter") + } + opCodeNum, ok := opCode.(float64) + if !ok { + return nil, fmt.Errorf("artnet.packet.filter opCode must be a number") + } + + return &ArtNetPacketFilter{config: config, OpCode: uint16(opCodeNum)}, nil + }, + }) +}