Add option for queue (#262)

This commit is contained in:
Maxim Zhuchkov
2023-08-19 06:07:45 +03:00
committed by GitHub
parent fe34dbd8bb
commit d3f53beec7
2 changed files with 15 additions and 6 deletions

View File

@ -49,11 +49,11 @@ type Conn struct {
rerr error
}
func warpConn(c *net.Conn) *Conn {
func warpConn(c *net.Conn, qr, qw queue.Queue[pk.Packet]) *Conn {
wc := Conn{
Conn: c,
send: make(queue.ChannelQueue[pk.Packet], 256),
recv: make(queue.ChannelQueue[pk.Packet], 256),
send: qw,
recv: qr,
rerr: nil,
}
go func() {

View File

@ -16,6 +16,7 @@ import (
"github.com/Tnze/go-mc/data/packetid"
mcnet "github.com/Tnze/go-mc/net"
pk "github.com/Tnze/go-mc/net/packet"
"github.com/Tnze/go-mc/net/queue"
"github.com/Tnze/go-mc/yggdrasil/user"
)
@ -35,6 +36,9 @@ type JoinOptions struct {
// Specify the player PubKey to use.
// If nil, it will be obtained from Mojang when joining
KeyPair *user.KeyPairResp
QueueRead queue.Queue[pk.Packet]
QueueWrite queue.Queue[pk.Packet]
}
// JoinServer connect a Minecraft server for playing the game.
@ -48,8 +52,7 @@ func (c *Client) JoinServer(addr string) (err error) {
// JoinServerWithDialer is similar to JoinServer but using a net.Dialer.
func (c *Client) JoinServerWithDialer(dialer *net.Dialer, addr string) (err error) {
return c.join(addr, JoinOptions{
Context: context.Background(),
return c.JoinServerWithOptions(addr, JoinOptions{
MCDialer: (*mcnet.Dialer)(dialer),
})
}
@ -61,6 +64,12 @@ func (c *Client) JoinServerWithOptions(addr string, options JoinOptions) (err er
if options.Context == nil {
options.Context = context.Background()
}
if options.QueueRead == nil {
options.QueueRead = queue.NewLinkedQueue[pk.Packet]()
}
if options.QueueWrite == nil {
options.QueueWrite = queue.NewLinkedQueue[pk.Packet]()
}
return c.join(addr, options)
}
@ -150,7 +159,7 @@ func (c *Client) join(addr string, options JoinOptions) error {
if err != nil {
return LoginErr{"login success", err}
}
c.Conn = warpConn(conn)
c.Conn = warpConn(conn, options.QueueRead, options.QueueWrite)
return nil
case packetid.LoginCompression: // Set Compression