action.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package server
  2. // import "github.com/beoran/woe/telnet"
  3. import "github.com/beoran/woe/world"
  4. import "github.com/beoran/woe/monolog"
  5. /* Actiondata are the params passed to an Actin, neatly wrapped in
  6. * a struct */
  7. type ActionData struct {
  8. Client * Client
  9. Server * Server
  10. World * world.World
  11. Action * Action
  12. Command string
  13. Argv []string
  14. }
  15. /* A handler for an action. */
  16. type ActionHandler func(data * ActionData) (err error)
  17. /* Actions that a client can perform on a server or in
  18. * the server's world. */
  19. type Action struct {
  20. Name string
  21. Privilege world.Privilege
  22. Handler ActionHandler
  23. }
  24. var ActionMap map[string] Action
  25. func AddAction(name string, privilege world.Privilege, handler ActionHandler) {
  26. monolog.Info("Adding new action %s with privilege %d", name, privilege)
  27. action := Action{name, privilege, handler}
  28. ActionMap[name] = action
  29. }
  30. func doShutdown(data * ActionData) (err error) {
  31. return nil
  32. }
  33. func doRestart(data * ActionData) (err error) {
  34. return nil
  35. }
  36. func doQuit(data * ActionData) (err error) {
  37. return nil
  38. }
  39. func ParseCommand(command string, data * ActionData) {
  40. data.Command = command
  41. }
  42. func init() {
  43. ActionMap = make(map[string] Action)
  44. AddAction("/shutdown" , world.PRIVILEGE_LORD, doShutdown)
  45. AddAction("/restart" , world.PRIVILEGE_LORD, doRestart)
  46. AddAction("/quit" , world.PRIVILEGE_ZERO, doQuit)
  47. }