Update command line client to allow specifying command number

This commit is contained in:
Marc Di Luzio 2020-07-26 17:31:09 +01:00
parent 1514603517
commit c0d4a809c9
2 changed files with 33 additions and 14 deletions

View file

@ -8,6 +8,7 @@ import (
"os" "os"
"path" "path"
"path/filepath" "path/filepath"
"strconv"
"time" "time"
"github.com/mdiluz/rove/cmd/rove/internal" "github.com/mdiluz/rove/cmd/rove/internal"
@ -32,7 +33,7 @@ func printUsage() {
fmt.Fprintln(os.Stderr, "\tregister NAME registers an account and spawns a rover") fmt.Fprintln(os.Stderr, "\tregister NAME registers an account and spawns a rover")
fmt.Fprintln(os.Stderr, "\tradar prints radar data in ASCII form") fmt.Fprintln(os.Stderr, "\tradar prints radar data in ASCII form")
fmt.Fprintln(os.Stderr, "\tstatus gets rover status") fmt.Fprintln(os.Stderr, "\tstatus gets rover status")
fmt.Fprintln(os.Stderr, "\tcommand CMD [VAL...] queues commands, accepts multiple, see below") fmt.Fprintln(os.Stderr, "\tcommand [NUM] CMD [VAL...] queues commands, accepts multiple, see below")
fmt.Fprintf(os.Stderr, "\n") fmt.Fprintf(os.Stderr, "\n")
fmt.Fprintln(os.Stderr, "Rover commands:") fmt.Fprintln(os.Stderr, "Rover commands:")
fmt.Fprintln(os.Stderr, "\ttoggle toggles the current sail mode") fmt.Fprintln(os.Stderr, "\ttoggle toggles the current sail mode")
@ -41,6 +42,7 @@ func printUsage() {
fmt.Fprintln(os.Stderr, "\tbroadcast MSG broadcast a simple ASCII triplet to nearby rovers") fmt.Fprintln(os.Stderr, "\tbroadcast MSG broadcast a simple ASCII triplet to nearby rovers")
fmt.Fprintln(os.Stderr, "\tsalvage salvages a dormant rover for parts") fmt.Fprintln(os.Stderr, "\tsalvage salvages a dormant rover for parts")
fmt.Fprintln(os.Stderr, "\ttransfer transfer's control into a dormant rover") fmt.Fprintln(os.Stderr, "\ttransfer transfer's control into a dormant rover")
fmt.Fprintln(os.Stderr, "\twait waits before performing the next command")
fmt.Fprintf(os.Stderr, "\n") fmt.Fprintf(os.Stderr, "\n")
fmt.Fprintln(os.Stderr, "Environment") fmt.Fprintln(os.Stderr, "Environment")
fmt.Fprintln(os.Stderr, "\tROVE_USER_DATA path to user data, defaults to "+defaultDataPath) fmt.Fprintln(os.Stderr, "\tROVE_USER_DATA path to user data, defaults to "+defaultDataPath)
@ -236,6 +238,16 @@ func InnerMain(command string, args ...string) error {
// Iterate through each command // Iterate through each command
var commands []*roveapi.Command var commands []*roveapi.Command
for i := 0; i < len(args); i++ { for i := 0; i < len(args); i++ {
number := 0
num, err := strconv.Atoi(args[i])
if err == nil {
number = num
i++
if i >= len(args) {
return fmt.Errorf("must pass command after number")
}
}
switch args[i] { switch args[i] {
case "turn": case "turn":
i++ i++
@ -250,6 +262,7 @@ func InnerMain(command string, args ...string) error {
&roveapi.Command{ &roveapi.Command{
Command: roveapi.CommandType_turn, Command: roveapi.CommandType_turn,
Bearing: b, Bearing: b,
Number: int32(number),
}, },
) )
case "broadcast": case "broadcast":
@ -263,6 +276,7 @@ func InnerMain(command string, args ...string) error {
&roveapi.Command{ &roveapi.Command{
Command: roveapi.CommandType_broadcast, Command: roveapi.CommandType_broadcast,
Data: []byte(args[i]), Data: []byte(args[i]),
Number: int32(number),
}, },
) )
default: default:
@ -270,6 +284,7 @@ func InnerMain(command string, args ...string) error {
commands = append(commands, commands = append(commands,
&roveapi.Command{ &roveapi.Command{
Command: roveapi.CommandType(roveapi.CommandType_value[args[i]]), Command: roveapi.CommandType(roveapi.CommandType_value[args[i]]),
Number: int32(number),
}, },
) )
} }

View file

@ -54,8 +54,12 @@ func Test_InnerMain(t *testing.T) {
assert.NoError(t, InnerMain("command", "stash")) assert.NoError(t, InnerMain("command", "stash"))
assert.NoError(t, InnerMain("command", "repair")) assert.NoError(t, InnerMain("command", "repair"))
assert.NoError(t, InnerMain("command", "broadcast", "abc")) assert.NoError(t, InnerMain("command", "broadcast", "abc"))
assert.NoError(t, InnerMain("command", "10", "wait"))
assert.NoError(t, InnerMain("command", "1", "wait", "turn", "NW", "toggle", "broadcast", "zyx"))
// Give it malformed commands // Give it malformed commands
assert.Error(t, InnerMain("command", "unknown")) assert.Error(t, InnerMain("command", "unknown"))
assert.Error(t, InnerMain("command", "broadcast")) assert.Error(t, InnerMain("command", "broadcast"))
assert.Error(t, InnerMain("command", "0", "wait"))
assert.Error(t, InnerMain("command", "1"))
} }