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 rerr error
} }
func warpConn(c *net.Conn) *Conn { func warpConn(c *net.Conn, qr, qw queue.Queue[pk.Packet]) *Conn {
wc := Conn{ wc := Conn{
Conn: c, Conn: c,
send: make(queue.ChannelQueue[pk.Packet], 256), send: qw,
recv: make(queue.ChannelQueue[pk.Packet], 256), recv: qr,
rerr: nil, rerr: nil,
} }
go func() { go func() {

View File

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