revamp command structure

pull/5/head
Jordan Orelli 10 years ago
parent 805901a036
commit fd40042ed3

@ -0,0 +1,51 @@
package main
import (
"fmt"
)
var commandRegistry map[string]*Command
type Command struct {
name string
help string
handler func(*Connection, ...string)
}
// var scanCommand = &Command{
// name: "scan",
// help: "scans for resources",
// handler: func(conn *Connection, args ...string) {
// },
// }
var infoCommand = &Command{
name: "info",
help: "gives you some info about your current position",
handler: func(conn *Connection, args ...string) {
fmt.Fprintf(conn, "current planet: %s\n", conn.System().name)
},
}
func isCommand(name string) bool {
_, ok := commandRegistry[name]
return ok
}
func runCommand(conn *Connection, name string, args ...string) {
cmd, ok := commandRegistry[name]
if !ok {
fmt.Fprintf(conn, "no such command: %s\n", name)
return
}
cmd.handler(conn, args...)
}
func registerCommand(c *Command) {
commandRegistry[c.name] = c
}
func init() {
commandRegistry = make(map[string]*Command, 16)
registerCommand(infoCommand)
}

@ -63,6 +63,11 @@ func handleConnection(conn *Connection) {
} }
line = strings.TrimSpace(line) line = strings.TrimSpace(line)
parts := strings.Split(line, " ") parts := strings.Split(line, " ")
if isCommand(parts[0]) {
runCommand(conn, parts[0], parts[1:]...)
continue
}
switch parts[0] { switch parts[0] {
case "scan": case "scan":
for _, otherPlanet := range index { for _, otherPlanet := range index {

@ -11,6 +11,7 @@ type Connection struct {
net.Conn net.Conn
*bufio.Reader *bufio.Reader
player *Player player *Player
location *System
} }
func NewConnection(conn net.Conn) *Connection { func NewConnection(conn net.Conn) *Connection {
@ -52,6 +53,14 @@ func (c *Connection) Login() {
} }
func (c *Connection) SetSystem(s *System) {
c.location = s
}
func (c *Connection) System() *System {
return c.location
}
func (c *Connection) Close() error { func (c *Connection) Close() error {
log_info("player disconnecting: %s", c.PlayerName()) log_info("player disconnecting: %s", c.PlayerName())
return c.Conn.Close() return c.Conn.Close()

@ -21,6 +21,7 @@ type System struct {
} }
func (s *System) Arrive(p *Connection) { func (s *System) Arrive(p *Connection) {
p.SetSystem(s)
log_info("player %s has arrived at system %s", p.PlayerName(), s.name) log_info("player %s has arrived at system %s", p.PlayerName(), s.name)
if s.players == nil { if s.players == nil {
s.players = make(map[*Connection]bool, 8) s.players = make(map[*Connection]bool, 8)

Loading…
Cancel
Save