func (s *Server) Stop() {
	s.destroy()
}
Stop stops the server and disconnects all clients. It invokes no callbacks.
This call could take some time because it waits for goroutines to exit.
package rmnp
import "net"
type Server struct {
	protocolImpl
	ClientConnect ConnectionCallback
	ClientDisconnect ConnectionCallback
	ClientTimeout ConnectionCallback
	ClientValidation ValidationCallback
	PacketHandler PacketCallback
}
func NewServer(address string) *Server {
	s := new(Server)
	s.readFunc = func(conn *net.UDPConn, buffer []byte) (int, *net.UDPAddr, bool) {
		length, addr, err := conn.ReadFromUDP(buffer)
		if err != nil {
			return 0, nil, false
		}
		return length, addr, true
	}
	s.writeFunc = func(conn *net.UDPConn, addr *net.UDPAddr, buffer []byte) {
		conn.WriteToUDP(buffer, addr)
	}
	s.onConnect = func(connection *Connection, packet []byte) {
		if s.ClientConnect != nil {
			s.ClientConnect(connection, packet)
		}
	}
	s.onDisconnect = func(connection *Connection, packet []byte) {
		if s.ClientDisconnect != nil {
			s.ClientDisconnect(connection, packet)
		}
	}
	s.onTimeout = func(connection *Connection, packet []byte) {
		if s.ClientTimeout != nil {
			s.ClientTimeout(connection, packet)
		}
	}
	s.onValidation = func(addr *net.UDPAddr, packet []byte) bool {
		if s.ClientValidation != nil {
			return s.ClientValidation(addr, packet)
		}
		return true
	}
	s.onPacket = func(connection *Connection, packet []byte, channel Channel) {
		if s.PacketHandler != nil {
			s.PacketHandler(connection, packet, channel)
		}
	}
	s.init(address)
	return s
}
func (s *Server) Start() {
	s.setSocket(net.ListenUDP("udp", s.address))
	s.listen()
}