mirror of
https://github.com/onyx-and-iris/xair-cli.git
synced 2026-02-03 23:17:47 +00:00
add persistent flag --kind
use it to configure the client
This commit is contained in:
parent
ddbf52430a
commit
d5c88f31e0
@ -11,12 +11,12 @@ import (
|
|||||||
|
|
||||||
type clientKey string
|
type clientKey string
|
||||||
|
|
||||||
func WithContext(ctx context.Context, client *xair.XAirClient) context.Context {
|
func WithContext(ctx context.Context, client *xair.Client) context.Context {
|
||||||
return context.WithValue(ctx, clientKey("oscClient"), client)
|
return context.WithValue(ctx, clientKey("oscClient"), client)
|
||||||
}
|
}
|
||||||
|
|
||||||
func ClientFromContext(ctx context.Context) *xair.XAirClient {
|
func ClientFromContext(ctx context.Context) *xair.Client {
|
||||||
if client, ok := ctx.Value(clientKey("oscClient")).(*xair.XAirClient); ok {
|
if client, ok := ctx.Value(clientKey("oscClient")).(*xair.Client); ok {
|
||||||
return client
|
return client
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
11
cmd/root.go
11
cmd/root.go
@ -28,7 +28,14 @@ various commands to manage mixer settings directly from the terminal.`,
|
|||||||
}
|
}
|
||||||
log.SetLevel(level)
|
log.SetLevel(level)
|
||||||
|
|
||||||
client, err := xair.NewClient(viper.GetString("host"), viper.GetInt("port"))
|
kind := xair.NewMixerKind(viper.GetString("kind"))
|
||||||
|
log.Debugf("Initializing client for mixer kind: %s", kind)
|
||||||
|
|
||||||
|
client, err := xair.NewClient(
|
||||||
|
viper.GetString("host"),
|
||||||
|
viper.GetInt("port"),
|
||||||
|
xair.WithKind(string(kind)),
|
||||||
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -68,6 +75,7 @@ func init() {
|
|||||||
rootCmd.PersistentFlags().IntP("port", "p", 10024, "Port number of the X Air mixer")
|
rootCmd.PersistentFlags().IntP("port", "p", 10024, "Port number of the X Air mixer")
|
||||||
rootCmd.PersistentFlags().
|
rootCmd.PersistentFlags().
|
||||||
StringP("loglevel", "l", "warn", "Log level (debug, info, warn, error, fatal, panic)")
|
StringP("loglevel", "l", "warn", "Log level (debug, info, warn, error, fatal, panic)")
|
||||||
|
rootCmd.PersistentFlags().StringP("kind", "k", "xair", "Kind of mixer (xair, x32)")
|
||||||
|
|
||||||
viper.SetEnvKeyReplacer(strings.NewReplacer("-", "_"))
|
viper.SetEnvKeyReplacer(strings.NewReplacer("-", "_"))
|
||||||
viper.SetEnvPrefix("XAIR_CLI")
|
viper.SetEnvPrefix("XAIR_CLI")
|
||||||
@ -75,4 +83,5 @@ func init() {
|
|||||||
viper.BindPFlag("host", rootCmd.PersistentFlags().Lookup("host"))
|
viper.BindPFlag("host", rootCmd.PersistentFlags().Lookup("host"))
|
||||||
viper.BindPFlag("port", rootCmd.PersistentFlags().Lookup("port"))
|
viper.BindPFlag("port", rootCmd.PersistentFlags().Lookup("port"))
|
||||||
viper.BindPFlag("loglevel", rootCmd.PersistentFlags().Lookup("loglevel"))
|
viper.BindPFlag("loglevel", rootCmd.PersistentFlags().Lookup("loglevel"))
|
||||||
|
viper.BindPFlag("kind", rootCmd.PersistentFlags().Lookup("kind"))
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,3 +7,12 @@ var xairAddressMap = map[string]string{
|
|||||||
var x32AddressMap = map[string]string{
|
var x32AddressMap = map[string]string{
|
||||||
"bus": "/bus/%02d",
|
"bus": "/bus/%02d",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func addressMapForMixerKind(kind MixerKind) map[string]string {
|
||||||
|
switch kind {
|
||||||
|
case KindX32:
|
||||||
|
return x32AddressMap
|
||||||
|
default:
|
||||||
|
return xairAddressMap
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -18,7 +18,7 @@ type parser interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type engine struct {
|
type engine struct {
|
||||||
Kind string
|
Kind MixerKind
|
||||||
conn *net.UDPConn
|
conn *net.UDPConn
|
||||||
mixerAddr *net.UDPAddr
|
mixerAddr *net.UDPAddr
|
||||||
|
|
||||||
@ -54,12 +54,13 @@ func NewClient(mixerIP string, mixerPort int, opts ...Option) (*Client, error) {
|
|||||||
log.Debugf("Local UDP connection: %s ", conn.LocalAddr().String())
|
log.Debugf("Local UDP connection: %s ", conn.LocalAddr().String())
|
||||||
|
|
||||||
e := &engine{
|
e := &engine{
|
||||||
Kind: "xair",
|
Kind: KindXAir,
|
||||||
conn: conn,
|
conn: conn,
|
||||||
mixerAddr: mixerAddr,
|
mixerAddr: mixerAddr,
|
||||||
parser: newParser(),
|
parser: newParser(),
|
||||||
done: make(chan bool),
|
addressMap: addressMapForMixerKind(KindXAir),
|
||||||
respChan: make(chan *osc.Message, 100),
|
done: make(chan bool),
|
||||||
|
respChan: make(chan *osc.Message, 100),
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, opt := range opts {
|
for _, opt := range opts {
|
||||||
|
|||||||
19
internal/xair/kinds.go
Normal file
19
internal/xair/kinds.go
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
package xair
|
||||||
|
|
||||||
|
type MixerKind string
|
||||||
|
|
||||||
|
const (
|
||||||
|
KindXAir MixerKind = "xair"
|
||||||
|
KindX32 MixerKind = "x32"
|
||||||
|
)
|
||||||
|
|
||||||
|
func NewMixerKind(kind string) MixerKind {
|
||||||
|
switch kind {
|
||||||
|
case "xair":
|
||||||
|
return KindXAir
|
||||||
|
case "x32":
|
||||||
|
return KindX32
|
||||||
|
default:
|
||||||
|
return KindXAir
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,18 +1,10 @@
|
|||||||
package xair
|
package xair
|
||||||
|
|
||||||
import "strings"
|
|
||||||
|
|
||||||
type Option func(*engine)
|
type Option func(*engine)
|
||||||
|
|
||||||
func WithKind(kind string) Option {
|
func WithKind(kind string) Option {
|
||||||
if strings.EqualFold(kind, "x32") {
|
return func(e *engine) {
|
||||||
return func(c *engine) {
|
e.Kind = MixerKind(kind)
|
||||||
c.Kind = kind
|
e.addressMap = addressMapForMixerKind(e.Kind)
|
||||||
c.addressMap = x32AddressMap
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return func(c *engine) {
|
|
||||||
c.Kind = "xair"
|
|
||||||
c.addressMap = xairAddressMap
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user