mirror of
https://github.com/jwetzell/showbridge-go.git
synced 2026-05-15 14:04:15 +00:00
Compare commits
7 Commits
benchmarks
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| ac2930b91b | |||
| d16e247a3a | |||
| a134a8929f | |||
| ad91be50c4 | |||
| d4abe7ed2d | |||
| 0912949f31 | |||
| b4b5e17265 |
@@ -10,8 +10,8 @@ require (
|
|||||||
github.com/extism/go-sdk v1.7.1
|
github.com/extism/go-sdk v1.7.1
|
||||||
github.com/google/jsonschema-go v0.4.3
|
github.com/google/jsonschema-go v0.4.3
|
||||||
github.com/gorilla/websocket v1.5.3
|
github.com/gorilla/websocket v1.5.3
|
||||||
github.com/jwetzell/artnet-go v0.2.1
|
github.com/jwetzell/artnet-go v0.2.2
|
||||||
github.com/jwetzell/free-d-go v0.1.0
|
github.com/jwetzell/free-d-go v0.1.1
|
||||||
github.com/jwetzell/osc-go v0.3.0
|
github.com/jwetzell/osc-go v0.3.0
|
||||||
github.com/jwetzell/psn-go v0.3.0
|
github.com/jwetzell/psn-go v0.3.0
|
||||||
github.com/nats-io/nats-server/v2 v2.14.0
|
github.com/nats-io/nats-server/v2 v2.14.0
|
||||||
|
|||||||
@@ -65,10 +65,10 @@ github.com/ianlancetaylor/demangle v0.0.0-20260505044615-1ff4bf46051f h1:NW3E2QS
|
|||||||
github.com/ianlancetaylor/demangle v0.0.0-20260505044615-1ff4bf46051f/go.mod h1:gx7rwoVhcfuVKG5uya9Hs3Sxj7EIvldVofAWIUtGouw=
|
github.com/ianlancetaylor/demangle v0.0.0-20260505044615-1ff4bf46051f/go.mod h1:gx7rwoVhcfuVKG5uya9Hs3Sxj7EIvldVofAWIUtGouw=
|
||||||
github.com/icholy/digest v1.1.0 h1:HfGg9Irj7i+IX1o1QAmPfIBNu/Q5A5Tu3n/MED9k9H4=
|
github.com/icholy/digest v1.1.0 h1:HfGg9Irj7i+IX1o1QAmPfIBNu/Q5A5Tu3n/MED9k9H4=
|
||||||
github.com/icholy/digest v1.1.0/go.mod h1:QNrsSGQ5v7v9cReDI0+eyjsXGUoRSUZQHeQ5C4XLa0Y=
|
github.com/icholy/digest v1.1.0/go.mod h1:QNrsSGQ5v7v9cReDI0+eyjsXGUoRSUZQHeQ5C4XLa0Y=
|
||||||
github.com/jwetzell/artnet-go v0.2.1 h1:iYTKWcwYrF5kBkYfkw2UbWvoueeA23iKEn7fR27mWZE=
|
github.com/jwetzell/artnet-go v0.2.2 h1:vaXSmRrSlEdETPZ/gvw6aAmVqzQm0i+gfAwyIQkVsB0=
|
||||||
github.com/jwetzell/artnet-go v0.2.1/go.mod h1:gli97Z32a0kMkZ6taoTiK7/lqHcF/dhiGjGJdx/PxqA=
|
github.com/jwetzell/artnet-go v0.2.2/go.mod h1:gli97Z32a0kMkZ6taoTiK7/lqHcF/dhiGjGJdx/PxqA=
|
||||||
github.com/jwetzell/free-d-go v0.1.0 h1:xHt6dvyit98X+OC3jVzV0aLidxbyzi3vI9QiYkteEtA=
|
github.com/jwetzell/free-d-go v0.1.1 h1:pzY2c4qRxKFBZ2jO3z512ysvUI0BUmgd4mSlWPiFVRM=
|
||||||
github.com/jwetzell/free-d-go v0.1.0/go.mod h1:KmrkooRARRaxJTBSPvwt/6IMAIaHH1R8bSA8cwbbELw=
|
github.com/jwetzell/free-d-go v0.1.1/go.mod h1:KmrkooRARRaxJTBSPvwt/6IMAIaHH1R8bSA8cwbbELw=
|
||||||
github.com/jwetzell/osc-go v0.3.0 h1:z75TxuQSEmdcmZ56OAepkDa3m88SdZh//3m4nBb/XZI=
|
github.com/jwetzell/osc-go v0.3.0 h1:z75TxuQSEmdcmZ56OAepkDa3m88SdZh//3m4nBb/XZI=
|
||||||
github.com/jwetzell/osc-go v0.3.0/go.mod h1:kCs329JxY6Qjga08tRQ/Gl0PqhgQzLIMpOhm6uszvIc=
|
github.com/jwetzell/osc-go v0.3.0/go.mod h1:kCs329JxY6Qjga08tRQ/Gl0PqhgQzLIMpOhm6uszvIc=
|
||||||
github.com/jwetzell/psn-go v0.3.0 h1:WVpCEmExYE8a+I5hQak5jNJJp2x35VdGX/VuMUKPmhY=
|
github.com/jwetzell/psn-go v0.3.0 h1:WVpCEmExYE8a+I5hQak5jNJJp2x35VdGX/VuMUKPmhY=
|
||||||
|
|||||||
@@ -81,11 +81,19 @@ func GetAnyAsByte(value any) (byte, bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func GetAnyAsByteSlice(value any) ([]byte, bool) {
|
func GetAnyAsByteSlice(value any) ([]byte, bool) {
|
||||||
|
// already a []byte
|
||||||
|
byteSlice, ok := value.([]byte)
|
||||||
|
if ok {
|
||||||
|
return byteSlice, true
|
||||||
|
}
|
||||||
|
|
||||||
|
// check for a slice
|
||||||
v := reflect.ValueOf(value)
|
v := reflect.ValueOf(value)
|
||||||
if v.Kind() != reflect.Slice {
|
if v.Kind() != reflect.Slice {
|
||||||
return nil, false
|
return nil, false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// try to convert each element to a byte
|
||||||
result := make([]byte, v.Len())
|
result := make([]byte, v.Len())
|
||||||
for i := 0; i < v.Len(); i++ {
|
for i := 0; i < v.Len(); i++ {
|
||||||
elem := v.Index(i).Interface()
|
elem := v.Index(i).Interface()
|
||||||
@@ -99,6 +107,14 @@ func GetAnyAsByteSlice(value any) ([]byte, bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func GetAnyAsIntSlice(value any) ([]int, bool) {
|
func GetAnyAsIntSlice(value any) ([]int, bool) {
|
||||||
|
|
||||||
|
// already a []byte
|
||||||
|
intSlice, ok := value.([]int)
|
||||||
|
if ok {
|
||||||
|
return intSlice, true
|
||||||
|
}
|
||||||
|
|
||||||
|
// check for a slice
|
||||||
v := reflect.ValueOf(value)
|
v := reflect.ValueOf(value)
|
||||||
if v.Kind() != reflect.Slice {
|
if v.Kind() != reflect.Slice {
|
||||||
return nil, false
|
return nil, false
|
||||||
|
|||||||
@@ -17,27 +17,31 @@ type DbQuery struct {
|
|||||||
ModuleId string
|
ModuleId string
|
||||||
Query *template.Template
|
Query *template.Template
|
||||||
logger *slog.Logger
|
logger *slog.Logger
|
||||||
|
module common.DatabaseModule
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dq *DbQuery) Process(ctx context.Context, wrappedPayload common.WrappedPayload) (common.WrappedPayload, error) {
|
func (dq *DbQuery) Process(ctx context.Context, wrappedPayload common.WrappedPayload) (common.WrappedPayload, error) {
|
||||||
if wrappedPayload.Modules == nil {
|
if dq.module == nil {
|
||||||
wrappedPayload.End = true
|
if wrappedPayload.Modules == nil {
|
||||||
return wrappedPayload, errors.New("db.query wrapped payload has no modules")
|
wrappedPayload.End = true
|
||||||
|
return wrappedPayload, errors.New("db.query wrapped payload has no modules")
|
||||||
|
}
|
||||||
|
|
||||||
|
module, ok := wrappedPayload.Modules[dq.ModuleId]
|
||||||
|
if !ok {
|
||||||
|
wrappedPayload.End = true
|
||||||
|
return wrappedPayload, fmt.Errorf("db.query unable to find module with id: %s", dq.ModuleId)
|
||||||
|
}
|
||||||
|
|
||||||
|
dbModule, ok := module.(common.DatabaseModule)
|
||||||
|
if !ok {
|
||||||
|
wrappedPayload.End = true
|
||||||
|
return wrappedPayload, fmt.Errorf("db.query module with id %s is not a DatabaseModule", dq.ModuleId)
|
||||||
|
}
|
||||||
|
dq.module = dbModule
|
||||||
}
|
}
|
||||||
|
|
||||||
module, ok := wrappedPayload.Modules[dq.ModuleId]
|
db := dq.module.Database()
|
||||||
if !ok {
|
|
||||||
wrappedPayload.End = true
|
|
||||||
return wrappedPayload, fmt.Errorf("db.query unable to find module with id: %s", dq.ModuleId)
|
|
||||||
}
|
|
||||||
|
|
||||||
dbModule, ok := module.(common.DatabaseModule)
|
|
||||||
if !ok {
|
|
||||||
wrappedPayload.End = true
|
|
||||||
return wrappedPayload, fmt.Errorf("db.query module with id %s is not a DatabaseModule", dq.ModuleId)
|
|
||||||
}
|
|
||||||
|
|
||||||
db := dbModule.Database()
|
|
||||||
if db == nil {
|
if db == nil {
|
||||||
wrappedPayload.End = true
|
wrappedPayload.End = true
|
||||||
return wrappedPayload, fmt.Errorf("db.query module with id %s returned nil database", dq.ModuleId)
|
return wrappedPayload, fmt.Errorf("db.query module with id %s returned nil database", dq.ModuleId)
|
||||||
@@ -65,6 +69,7 @@ func (dq *DbQuery) Process(ctx context.Context, wrappedPayload common.WrappedPay
|
|||||||
return wrappedPayload, fmt.Errorf("db.query error getting columns: %w", err)
|
return wrappedPayload, fmt.Errorf("db.query error getting columns: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(jwetzell): optimize this
|
||||||
results := make([]map[string]any, 0)
|
results := make([]map[string]any, 0)
|
||||||
|
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
|
|||||||
@@ -16,27 +16,31 @@ type KVGet struct {
|
|||||||
ModuleId string
|
ModuleId string
|
||||||
Key string
|
Key string
|
||||||
logger *slog.Logger
|
logger *slog.Logger
|
||||||
|
module common.KeyValueModule
|
||||||
}
|
}
|
||||||
|
|
||||||
func (kvg *KVGet) Process(ctx context.Context, wrappedPayload common.WrappedPayload) (common.WrappedPayload, error) {
|
func (kvg *KVGet) Process(ctx context.Context, wrappedPayload common.WrappedPayload) (common.WrappedPayload, error) {
|
||||||
if wrappedPayload.Modules == nil {
|
if kvg.module == nil {
|
||||||
wrappedPayload.End = true
|
if wrappedPayload.Modules == nil {
|
||||||
return wrappedPayload, errors.New("kv.get wrapped payload has no modules")
|
wrappedPayload.End = true
|
||||||
|
return wrappedPayload, errors.New("kv.get wrapped payload has no modules")
|
||||||
|
}
|
||||||
|
|
||||||
|
module, ok := wrappedPayload.Modules[kvg.ModuleId]
|
||||||
|
if !ok {
|
||||||
|
wrappedPayload.End = true
|
||||||
|
return wrappedPayload, fmt.Errorf("kv.get unable to find module with id: %s", kvg.ModuleId)
|
||||||
|
}
|
||||||
|
|
||||||
|
kvModule, ok := module.(common.KeyValueModule)
|
||||||
|
if !ok {
|
||||||
|
wrappedPayload.End = true
|
||||||
|
return wrappedPayload, fmt.Errorf("kv.get module with id %s is not a KeyValueModule", kvg.ModuleId)
|
||||||
|
}
|
||||||
|
kvg.module = kvModule
|
||||||
}
|
}
|
||||||
|
|
||||||
module, ok := wrappedPayload.Modules[kvg.ModuleId]
|
value, err := kvg.module.Get(kvg.Key)
|
||||||
if !ok {
|
|
||||||
wrappedPayload.End = true
|
|
||||||
return wrappedPayload, fmt.Errorf("kv.get unable to find module with id: %s", kvg.ModuleId)
|
|
||||||
}
|
|
||||||
|
|
||||||
kvModule, ok := module.(common.KeyValueModule)
|
|
||||||
if !ok {
|
|
||||||
wrappedPayload.End = true
|
|
||||||
return wrappedPayload, fmt.Errorf("kv.get module with id %s is not a KeyValueModule", kvg.ModuleId)
|
|
||||||
}
|
|
||||||
|
|
||||||
value, err := kvModule.Get(kvg.Key)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
wrappedPayload.End = true
|
wrappedPayload.End = true
|
||||||
return wrappedPayload, fmt.Errorf("kv.get error getting key: %w", err)
|
return wrappedPayload, fmt.Errorf("kv.get error getting key: %w", err)
|
||||||
|
|||||||
@@ -19,25 +19,28 @@ type KVSet struct {
|
|||||||
Key string
|
Key string
|
||||||
Value *template.Template
|
Value *template.Template
|
||||||
logger *slog.Logger
|
logger *slog.Logger
|
||||||
|
module common.KeyValueModule
|
||||||
}
|
}
|
||||||
|
|
||||||
func (kvs *KVSet) Process(ctx context.Context, wrappedPayload common.WrappedPayload) (common.WrappedPayload, error) {
|
func (kvs *KVSet) Process(ctx context.Context, wrappedPayload common.WrappedPayload) (common.WrappedPayload, error) {
|
||||||
|
if kvs.module == nil {
|
||||||
|
if wrappedPayload.Modules == nil {
|
||||||
|
wrappedPayload.End = true
|
||||||
|
return wrappedPayload, errors.New("kv.set wrapped payload has no modules")
|
||||||
|
}
|
||||||
|
|
||||||
if wrappedPayload.Modules == nil {
|
module, ok := wrappedPayload.Modules[kvs.ModuleId]
|
||||||
wrappedPayload.End = true
|
if !ok {
|
||||||
return wrappedPayload, errors.New("kv.set wrapped payload has no modules")
|
wrappedPayload.End = true
|
||||||
}
|
return wrappedPayload, fmt.Errorf("kv.set unable to find module with id: %s", kvs.ModuleId)
|
||||||
|
}
|
||||||
|
|
||||||
module, ok := wrappedPayload.Modules[kvs.ModuleId]
|
kvModule, ok := module.(common.KeyValueModule)
|
||||||
if !ok {
|
if !ok {
|
||||||
wrappedPayload.End = true
|
wrappedPayload.End = true
|
||||||
return wrappedPayload, fmt.Errorf("kv.set unable to find module with id: %s", kvs.ModuleId)
|
return wrappedPayload, fmt.Errorf("kv.set module with id %s is not a KeyValueModule", kvs.ModuleId)
|
||||||
}
|
}
|
||||||
|
kvs.module = kvModule
|
||||||
kvModule, ok := module.(common.KeyValueModule)
|
|
||||||
if !ok {
|
|
||||||
wrappedPayload.End = true
|
|
||||||
return wrappedPayload, fmt.Errorf("kv.set module with id %s is not a KeyValueModule", kvs.ModuleId)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var valueBuffer bytes.Buffer
|
var valueBuffer bytes.Buffer
|
||||||
@@ -48,7 +51,7 @@ func (kvs *KVSet) Process(ctx context.Context, wrappedPayload common.WrappedPayl
|
|||||||
return wrappedPayload, err
|
return wrappedPayload, err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = kvModule.Set(kvs.Key, valueBuffer.String())
|
err = kvs.module.Set(kvs.Key, valueBuffer.String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
wrappedPayload.End = true
|
wrappedPayload.End = true
|
||||||
return wrappedPayload, fmt.Errorf("kv.set error setting key: %w", err)
|
return wrappedPayload, fmt.Errorf("kv.set error setting key: %w", err)
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import (
|
|||||||
|
|
||||||
type ScriptWASM struct {
|
type ScriptWASM struct {
|
||||||
config config.ProcessorConfig
|
config config.ProcessorConfig
|
||||||
Program *extism.CompiledPlugin
|
Program *extism.Plugin
|
||||||
Function string
|
Function string
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -28,14 +28,7 @@ func (sw *ScriptWASM) Process(ctx context.Context, wrappedPayload common.Wrapped
|
|||||||
return wrappedPayload, fmt.Errorf("script.wasm can only process a byte array")
|
return wrappedPayload, fmt.Errorf("script.wasm can only process a byte array")
|
||||||
}
|
}
|
||||||
|
|
||||||
program, err := sw.Program.Instance(ctx, extism.PluginInstanceConfig{})
|
_, output, err := sw.Program.Call(sw.Function, payloadBytes)
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
wrappedPayload.End = true
|
|
||||||
return wrappedPayload, err
|
|
||||||
}
|
|
||||||
|
|
||||||
_, output, err := program.Call(sw.Function, payloadBytes)
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
wrappedPayload.End = true
|
wrappedPayload.End = true
|
||||||
@@ -117,7 +110,13 @@ func init() {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return &ScriptWASM{config: processorConfig, Program: program, Function: functionString}, nil
|
programInstance, err := program.Instance(context.Background(), extism.PluginInstanceConfig{})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &ScriptWASM{config: processorConfig, Program: programInstance, Function: functionString}, nil
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ func TestGoodArtnetPacketDecode(t *testing.T) {
|
|||||||
name: "number",
|
name: "number",
|
||||||
payload: []byte{65, 114, 116, 45, 78, 101, 116, 0, 0, 80, 0, 14, 237, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
payload: []byte{65, 114, 116, 45, 78, 101, 116, 0, 0, 80, 0, 14, 237, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
expected: &artnet.ArtDmx{
|
expected: &artnet.ArtDmx{
|
||||||
ID: []byte{'A', 'r', 't', '-', 'N', 'e', 't', 0x00},
|
ID: [8]byte{'A', 'r', 't', '-', 'N', 'e', 't', 0x00},
|
||||||
OpCode: artnet.OpDmx,
|
OpCode: artnet.OpDmx,
|
||||||
ProtVerHi: 0,
|
ProtVerHi: 0,
|
||||||
ProtVerLo: 14,
|
ProtVerLo: 14,
|
||||||
@@ -49,7 +49,6 @@ func TestGoodArtnetPacketDecode(t *testing.T) {
|
|||||||
Physical: 0,
|
Physical: 0,
|
||||||
SubUni: 1,
|
SubUni: 1,
|
||||||
Net: 0,
|
Net: 0,
|
||||||
Length: 512,
|
|
||||||
Data: make([]uint8, 512),
|
Data: make([]uint8, 512),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ func TestGoodArtnetPacketEncode(t *testing.T) {
|
|||||||
name: "number",
|
name: "number",
|
||||||
expected: []byte{65, 114, 116, 45, 78, 101, 116, 0, 0, 80, 0, 14, 237, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
expected: []byte{65, 114, 116, 45, 78, 101, 116, 0, 0, 80, 0, 14, 237, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
payload: &artnet.ArtDmx{
|
payload: &artnet.ArtDmx{
|
||||||
ID: []byte{'A', 'r', 't', '-', 'N', 'e', 't', 0x00},
|
ID: [8]byte{'A', 'r', 't', '-', 'N', 'e', 't', 0x00},
|
||||||
OpCode: artnet.OpDmx,
|
OpCode: artnet.OpDmx,
|
||||||
ProtVerHi: 0,
|
ProtVerHi: 0,
|
||||||
ProtVerLo: 14,
|
ProtVerLo: 14,
|
||||||
@@ -49,7 +49,6 @@ func TestGoodArtnetPacketEncode(t *testing.T) {
|
|||||||
Physical: 0,
|
Physical: 0,
|
||||||
SubUni: 1,
|
SubUni: 1,
|
||||||
Net: 0,
|
Net: 0,
|
||||||
Length: 512,
|
|
||||||
Data: make([]uint8, 512),
|
Data: make([]uint8, 512),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -105,7 +104,7 @@ func TestBadArtnetPacketEncode(t *testing.T) {
|
|||||||
func BenchmarkArtnetPacketEncode(b *testing.B) {
|
func BenchmarkArtnetPacketEncode(b *testing.B) {
|
||||||
processorInstance := processor.ArtNetPacketEncode{}
|
processorInstance := processor.ArtNetPacketEncode{}
|
||||||
payload := &artnet.ArtDmx{
|
payload := &artnet.ArtDmx{
|
||||||
ID: []byte{'A', 'r', 't', '-', 'N', 'e', 't', 0x00},
|
ID: [8]byte{'A', 'r', 't', '-', 'N', 'e', 't', 0x00},
|
||||||
OpCode: artnet.OpDmx,
|
OpCode: artnet.OpDmx,
|
||||||
ProtVerHi: 0,
|
ProtVerHi: 0,
|
||||||
ProtVerLo: 14,
|
ProtVerLo: 14,
|
||||||
@@ -113,7 +112,6 @@ func BenchmarkArtnetPacketEncode(b *testing.B) {
|
|||||||
Physical: 0,
|
Physical: 0,
|
||||||
SubUni: 1,
|
SubUni: 1,
|
||||||
Net: 0,
|
Net: 0,
|
||||||
Length: 512,
|
|
||||||
Data: make([]uint8, 512),
|
Data: make([]uint8, 512),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user