mirror of
https://github.com/onyx-and-iris/xair-cli.git
synced 2026-02-26 00:09:11 +00:00
35 lines
1.1 KiB
Go
35 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
// RawCmd represents the command to send raw OSC messages to the mixer.
|
|
type RawCmd struct {
|
|
Timeout time.Duration `help:"Timeout for the OSC message send operation." default:"200ms" short:"t"`
|
|
Address string `help:"The OSC address to send the message to." arg:""`
|
|
Args []string `help:"The arguments to include in the OSC message." arg:"" optional:""`
|
|
}
|
|
|
|
// Run executes the RawCmd by sending the specified OSC message to the mixer and optionally waiting for a response.
|
|
func (cmd *RawCmd) Run(ctx *context) error {
|
|
params := make([]any, len(cmd.Args))
|
|
for i, arg := range cmd.Args {
|
|
params[i] = arg
|
|
}
|
|
if err := ctx.Client.SendMessage(cmd.Address, params...); err != nil {
|
|
return fmt.Errorf("failed to send raw OSC message: %w", err)
|
|
}
|
|
|
|
msg, err := ctx.Client.ReceiveMessage(cmd.Timeout)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to receive response for raw OSC message: %w", err)
|
|
}
|
|
if msg != nil {
|
|
fmt.Fprintf(ctx.Out, "Received response: %s with args: %v\n", msg.Address, msg.Arguments)
|
|
}
|
|
|
|
return nil
|
|
}
|