46 lines
726 B
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)
|
|
}
|
|
}
|