39 lines
675 B
Go

package game
import (
"fmt"
)
// Router processes packets by passing them to the correct handler.
type Router struct {
handlers [256]Handler
}
// Get sets the handler for the given byte code.
func (ph *Router) Get(code byte, handler Handler) {
ph.handlers[code] = handler
}
// handle deals with an incoming packet.
func (ph *Router) handle(p Packet) {
defer func() {
if r := recover(); r != nil {
fmt.Println(p)
fmt.Println(r)
}
}()
handler := ph.handlers[p.Data[0]]
if handler == nil {
fmt.Printf("No callback registered for packet type %d\n", p.Data[0])
return
}
err := handler(p.Data[1:], p.Address)
if err != nil {
fmt.Println(err)
}
}