39 lines
675 B
Go
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)
|
|
}
|
|
}
|