commands work

pull/5/head
Jordan Orelli 10 years ago
parent 71be4f2582
commit 8a5bbcd658

@ -2,6 +2,7 @@ package main
import ( import (
"fmt" "fmt"
"sort"
) )
var commandRegistry map[string]*Command 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 { func isCommand(name string) bool {
_, ok := commandRegistry[name] _, ok := commandRegistry[name]
return ok return ok
@ -47,5 +113,8 @@ func registerCommand(c *Command) {
func init() { func init() {
commandRegistry = make(map[string]*Command, 16) commandRegistry = make(map[string]*Command, 16)
registerCommand(commandsCommand)
registerCommand(helpCommand)
registerCommand(infoCommand) registerCommand(infoCommand)
registerCommand(nearbyCommand)
} }

@ -101,18 +101,18 @@ func handleConnection(conn *Connection) {
}) })
}(otherSystem) }(otherSystem)
} }
case "nearby": // case "nearby":
neighbors, err := system.Nearby(25) // neighbors, err := system.Nearby(25)
fmt.Fprintf(conn, "fetching nearby star systems\n") // fmt.Fprintf(conn, "fetching nearby star systems\n")
if err != nil { // if err != nil {
log_error("%v", err) // log_error("%v", err)
break // break
} // }
fmt.Fprintf(conn, "found %d nearby systems\n", len(neighbors)) // fmt.Fprintf(conn, "found %d nearby systems\n", len(neighbors))
for _, neighbor := range neighbors { // for _, neighbor := range neighbors {
other := index[neighbor.id] // other := index[neighbor.id]
fmt.Fprintf(conn, "%s: %v\n", other.name, neighbor.distance) // fmt.Fprintf(conn, "%s: %v\n", other.name, neighbor.distance)
} // }
case "quit": case "quit":
return return
default: default:

Loading…
Cancel
Save