Let configuration has it's own Err type

This commit is contained in:
Tnze
2023-11-19 02:34:30 +08:00
parent 006f958f43
commit 2c2f1547be
3 changed files with 40 additions and 19 deletions

View File

@ -1,18 +1,32 @@
package bot package bot
import ( import (
"github.com/Tnze/go-mc/chat"
"github.com/Tnze/go-mc/data/packetid" "github.com/Tnze/go-mc/data/packetid"
"github.com/Tnze/go-mc/nbt" "github.com/Tnze/go-mc/nbt"
"github.com/Tnze/go-mc/net" "github.com/Tnze/go-mc/net"
pk "github.com/Tnze/go-mc/net/packet" pk "github.com/Tnze/go-mc/net/packet"
) )
type ConfigErr struct {
Stage string
Err error
}
func (l ConfigErr) Error() string {
return "bot: configuration error: [" + l.Stage + "] " + l.Err.Error()
}
func (l ConfigErr) Unwrap() error {
return l.Err
}
func (c *Client) joinConfiguration(conn *net.Conn) error { func (c *Client) joinConfiguration(conn *net.Conn) error {
receiving := "config custom payload" receiving := "config custom payload"
for { for {
var p pk.Packet var p pk.Packet
if err := conn.ReadPacket(&p); err != nil { if err := conn.ReadPacket(&p); err != nil {
return LoginErr{receiving, err} return ConfigErr{receiving, err}
} }
switch packetid.ClientboundPacketID(p.ID) { switch packetid.ClientboundPacketID(p.ID) {
@ -21,17 +35,24 @@ func (c *Client) joinConfiguration(conn *net.Conn) error {
var data pk.PluginMessageData var data pk.PluginMessageData
err := p.Scan(&channel, &data) err := p.Scan(&channel, &data)
if err != nil { if err != nil {
return LoginErr{"custom payload", err} return ConfigErr{"custom payload", err}
} }
// TODO: Provide configuration custom data handling interface // TODO: Provide configuration custom data handling interface
case packetid.ClientboundConfigDisconnect: case packetid.ClientboundConfigDisconnect:
var reason chat.Message
err := p.Scan(&reason)
if err != nil {
return ConfigErr{"disconnect", err}
}
return ConfigErr{"disconnect", DisconnectErr(reason)}
case packetid.ClientboundConfigFinishConfiguration: case packetid.ClientboundConfigFinishConfiguration:
err := conn.WritePacket(pk.Marshal( err := conn.WritePacket(pk.Marshal(
packetid.ServerboundConfigFinishConfiguration, packetid.ServerboundConfigFinishConfiguration,
)) ))
if err != nil { if err != nil {
return LoginErr{"finish config", err} return ConfigErr{"finish config", err}
} }
return nil return nil
@ -39,7 +60,7 @@ func (c *Client) joinConfiguration(conn *net.Conn) error {
var keepAliveID pk.Long var keepAliveID pk.Long
err := p.Scan(&keepAliveID) err := p.Scan(&keepAliveID)
if err != nil { if err != nil {
return LoginErr{"keep alive", err} return ConfigErr{"keep alive", err}
} }
// send it back // send it back
err = conn.WritePacket(pk.Marshal( err = conn.WritePacket(pk.Marshal(
@ -47,7 +68,7 @@ func (c *Client) joinConfiguration(conn *net.Conn) error {
keepAliveID, keepAliveID,
)) ))
if err != nil { if err != nil {
return LoginErr{"keep alive", err} return ConfigErr{"keep alive", err}
} }
case packetid.ClientboundConfigPing: case packetid.ClientboundConfigPing:
@ -55,7 +76,7 @@ func (c *Client) joinConfiguration(conn *net.Conn) error {
var registryCodec nbt.RawMessage var registryCodec nbt.RawMessage
err := p.Scan(pk.NBT(&registryCodec)) err := p.Scan(pk.NBT(&registryCodec))
if err != nil { if err != nil {
return LoginErr{"registry data", err} return ConfigErr{"registry data", err}
} }
// TODO: Handle registries // TODO: Handle registries

View File

@ -24,6 +24,19 @@ import (
pk "github.com/Tnze/go-mc/net/packet" pk "github.com/Tnze/go-mc/net/packet"
) )
type LoginErr struct {
Stage string
Err error
}
func (l LoginErr) Error() string {
return "bot: login error: [" + l.Stage + "] " + l.Err.Error()
}
func (l LoginErr) Unwrap() error {
return l.Err
}
func (c *Client) joinLogin(conn *net.Conn) error { func (c *Client) joinLogin(conn *net.Conn) error {
var err error var err error
if c.Auth.UUID != "" { if c.Auth.UUID != "" {

View File

@ -121,19 +121,6 @@ func (c *Client) join(addr string, options JoinOptions) error {
return nil return nil
} }
type LoginErr struct {
Stage string
Err error
}
func (l LoginErr) Error() string {
return "bot: " + l.Stage + " error: " + l.Err.Error()
}
func (l LoginErr) Unwrap() error {
return l.Err
}
type DisconnectErr chat.Message type DisconnectErr chat.Message
func (d DisconnectErr) Error() string { func (d DisconnectErr) Error() string {