New server framework, an example, and compressed packet fixed.

This commit is contained in:
Tnze
2021-11-27 15:25:55 +08:00
parent b909621c58
commit ab63acbd7e
13 changed files with 2792 additions and 69 deletions

45
server/server.go Normal file
View File

@ -0,0 +1,45 @@
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)
}
}