New server framework, an example, and compressed packet fixed.
This commit is contained in:
45
server/server.go
Normal file
45
server/server.go
Normal 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)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user