diff --git a/commands.go b/commands.go index 66b7300..bbf50d3 100644 --- a/commands.go +++ b/commands.go @@ -2,6 +2,7 @@ package main import ( "fmt" + "sort" ) var commandRegistry map[string]*Command @@ -27,6 +28,71 @@ var infoCommand = &Command{ }, } +var nearbyCommand = &Command{ + name: "nearby", + help: "list objects nearby", + handler: func(conn *Connection, args ...string) { + system := conn.System() + neighbors, err := system.Nearby(25) + if err != nil { + log_error("unable to get neighbors: %v", err) + return + } + for _, neighbor := range neighbors { + other := index[neighbor.id] + fmt.Fprintf(conn, "%s: %v\n", other.name, neighbor.distance) + } + }, +} + +var helpCommand = &Command{ + name: "help", + help: "helpful things to help you", + handler: func(conn *Connection, args ...string) { + if len(args) == 0 { + fmt.Fprintln(conn, `use the "commands" command for a list of commands.`) + fmt.Fprintln(conn, `use "help [command-name]" to get info for a specific command.`) + return + } + for _, cmdName := range args { + cmd, ok := commandRegistry[cmdName] + if !ok { + fmt.Fprintf(conn, "no such command: %v\n", cmdName) + continue + } + fmt.Fprintf(conn, "%v: %v\n", cmdName, cmd.help) + } + }, +} + +var commandsCommand = &Command{ + name: "commands", + help: "gives you a handy list of commands", + handler: func(conn *Connection, args ...string) { + names := make([]string, 0, len(commandRegistry)) + for name, _ := range commandRegistry { + names = append(names, name) + } + sort.Strings(names) + for _, name := range names { + fmt.Fprintln(conn, name) + } + }, +} + +// var superscanCommand = &Command{ +// name: "super-scan", +// help: "super duper scan", +// handler: func(conn *Connection, args ...string) { +// for id, _ := range index { +// if id == conn.System().id { +// continue +// } +// +// } +// }, +// } + func isCommand(name string) bool { _, ok := commandRegistry[name] return ok @@ -47,5 +113,8 @@ func registerCommand(c *Command) { func init() { commandRegistry = make(map[string]*Command, 16) + registerCommand(commandsCommand) + registerCommand(helpCommand) registerCommand(infoCommand) + registerCommand(nearbyCommand) } diff --git a/main.go b/main.go index 508686f..588b22f 100644 --- a/main.go +++ b/main.go @@ -101,18 +101,18 @@ func handleConnection(conn *Connection) { }) }(otherSystem) } - case "nearby": - neighbors, err := system.Nearby(25) - fmt.Fprintf(conn, "fetching nearby star systems\n") - if err != nil { - log_error("%v", err) - break - } - fmt.Fprintf(conn, "found %d nearby systems\n", len(neighbors)) - for _, neighbor := range neighbors { - other := index[neighbor.id] - fmt.Fprintf(conn, "%s: %v\n", other.name, neighbor.distance) - } + // case "nearby": + // neighbors, err := system.Nearby(25) + // fmt.Fprintf(conn, "fetching nearby star systems\n") + // if err != nil { + // log_error("%v", err) + // break + // } + // fmt.Fprintf(conn, "found %d nearby systems\n", len(neighbors)) + // for _, neighbor := range neighbors { + // other := index[neighbor.id] + // fmt.Fprintf(conn, "%s: %v\n", other.name, neighbor.distance) + // } case "quit": return default: