package server import( "fmt" "ripple/commands" "ripple/session" ) const ( accountSession = 0 userSession = 1 counterpartSession = 2 ) type sessionRouter struct { account *session.AccountSession user *session.UserSession counterpart *session.CounterpartSession } func newSessionRouter( account *session.AccountSession, user *session.UserSession, counterpart *session.CounterpartSession, ) *sessionRouter { return &sessionRouter{ account: account, user: user, counterpart: counterpart, } } func (r *sessionRouter) routeDatagram(dg UdpDatagram) { sessionType := dg.Payload[0] switch sessionType { case accountSession: tx, err := r.account.Receive(dg.Payload, dg.Addr) if err != nil { fmt.Println(err) return } fmt.Printf("%s@%s: %s (%d bytes)\n", tx.Identifier.Username, dg.Addr, commands.TxCommandName(tx.Instruction.Command), len(dg.Payload)) r.account.Dispatch(tx) case userSession: req, err := r.user.Receive(dg.Payload, dg.Addr) if err != nil { fmt.Println(err) return } fmt.Printf("%s: %s (%d bytes)\n", dg.Addr, commands.UserCommandName(req.Instruction.Command), len(dg.Payload)) r.user.Dispatch(req) case counterpartSession: counterpartInstr, err := r.counterpart.Receive(dg.Payload, dg.Addr) if err != nil { fmt.Println(err) return } fmt.Printf("%s: %s (%d bytes)\n", dg.Addr, commands.CptCommandName(counterpartInstr.Command), len(dg.Payload)) r.counterpart.Dispatch(counterpartInstr) default: } }