support kicker status
This commit is contained in:
+10
-1
@@ -8,6 +8,8 @@ import (
|
|||||||
"github.com/admin-else/strom/proto_base"
|
"github.com/admin-else/strom/proto_base"
|
||||||
"github.com/admin-else/strom/proto_generated/v1_21_8"
|
"github.com/admin-else/strom/proto_generated/v1_21_8"
|
||||||
"github.com/admin-else/strom/text"
|
"github.com/admin-else/strom/text"
|
||||||
|
|
||||||
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -21,8 +23,15 @@ func Kick(c *proto.Conn, reason *text.Component) (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
switch c.State() {
|
switch c.State() {
|
||||||
case proto_base.Handshaking, proto_base.Status:
|
case proto_base.Handshaking:
|
||||||
err = CantKickInStateErr
|
err = CantKickInStateErr
|
||||||
|
case proto_base.Status:
|
||||||
|
var b []byte
|
||||||
|
b, err = reason.MarshalJSON()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = c.Send(&v1_21_8.StatusToClientPacketServerInfo{Response: fmt.Sprintf("{\"description\":%s}", string(b))})
|
||||||
case proto_base.Login:
|
case proto_base.Login:
|
||||||
var b []byte
|
var b []byte
|
||||||
b, err = reason.MarshalJSON()
|
b, err = reason.MarshalJSON()
|
||||||
|
|||||||
+3
-14
@@ -37,11 +37,7 @@ func ServeClient(cNet net.Conn, factory Factory) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Log.Error("Error while handling client", "error", err, "client", c.Conn.RemoteAddr())
|
|
||||||
err = Kick(c, text.Pretty(err.Error()))
|
err = Kick(c, text.Pretty(err.Error()))
|
||||||
if err != nil {
|
|
||||||
c.Log.Error("Error while kicking client", "error", err, "client", c.Conn.RemoteAddr())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,19 +75,12 @@ func StartServerWithOnConn(listenAddr string, onConn func(c *proto.Conn) (err er
|
|||||||
c := Servee(cNet)
|
c := Servee(cNet)
|
||||||
defer c.Close()
|
defer c.Close()
|
||||||
connErr := onConn(c)
|
connErr := onConn(c)
|
||||||
if connErr != nil {
|
|
||||||
if c.State() == proto_base.Status || c.State() == proto_base.Handshaking {
|
|
||||||
return // we dont care about status packets
|
|
||||||
}
|
|
||||||
c.Log.Error("Error while handling client", "error", connErr, "client", c.Conn.RemoteAddr())
|
|
||||||
connErr = Kick(c, text.Pretty(connErr.Error()))
|
|
||||||
if connErr != nil {
|
|
||||||
c.Log.Error("Error while kicking client", "error", connErr, "client", c.Conn.RemoteAddr())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if errors.Is(connErr, ShutDownServerErr) {
|
if errors.Is(connErr, ShutDownServerErr) {
|
||||||
running = false
|
running = false
|
||||||
}
|
}
|
||||||
|
if connErr != nil {
|
||||||
|
connErr = Kick(c, text.Pretty(connErr.Error()))
|
||||||
|
}
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
err = ShutDownServerErr
|
err = ShutDownServerErr
|
||||||
|
|||||||
Reference in New Issue
Block a user