Files
go-mc/server/server.go

46 lines
726 B
Go

package server
import "github.com/Tnze/go-mc/net"
const ProtocolVersion = 756
type Server struct {
ListPingHandler
LoginHandler
GamePlay
}
func (s *Server) Listen(addr string) error {
listener, err := net.ListenMC(addr)
if err != nil {
return err
}
for {
conn, err := listener.Accept()
if err != nil {
return err
}
go s.acceptConn(&conn)
}
}
func (s *Server) acceptConn(conn *net.Conn) {
defer conn.Close()
protocol, intention, err := s.handshake(conn)
if err != nil {
return
}
switch intention {
case 1: // list ping
s.acceptListPing(conn)
case 2: // login
name, id, err := s.AcceptLogin(conn, protocol)
if err != nil {
return
}
s.AcceptPlayer(name, id, protocol, conn)
}
}