version compat system start

This commit is contained in:
adman
2026-03-09 21:30:31 +01:00
parent 165075ea02
commit c516cc5283
8 changed files with 213 additions and 99 deletions
+41 -17
View File
@@ -1,21 +1,22 @@
package client
import (
"encoding/json"
"fmt"
"strconv"
"strings"
"time"
"github.com/admin-else/strom/event"
"github.com/admin-else/strom/proto"
"github.com/admin-else/strom/proto_base"
"github.com/admin-else/strom/server"
"github.com/admin-else/strom/data"
"github.com/admin-else/strom/proto_generated/v1_21_8"
)
type StatusClient struct {
*proto.Conn
Status string
Status string
PingSendTime, PingReceiveTime time.Time
}
func (s *StatusClient) Default(event any) (err error) {
@@ -24,21 +25,11 @@ func (s *StatusClient) Default(event any) (err error) {
}
func (s *StatusClient) OnStart(_ event.Start) (err error) {
parts := strings.Split(s.RemoteAddr().String(), ":")
versionData, err := data.LookUpVersionByName(s.Version)
p, err := MakeHandshakePacket(s.Conn, proto_base.Status)
if err != nil {
return
}
port, err := strconv.Atoi(parts[1])
if err != nil {
return
}
err = s.Send(&v1_21_8.HandshakingToServerPacketSetProtocol{
ProtocolVersion: versionData.Version,
ServerHost: parts[0],
ServerPort: uint16(port),
NextState: int32(proto_base.Status),
})
err = s.Send(p)
if err != nil {
return
}
@@ -47,8 +38,41 @@ func (s *StatusClient) OnStart(_ event.Start) (err error) {
return
}
func (s *StatusClient) OnStatus(p v1_21_8.StatusToClientPacketServerInfo) (err error) {
func (s *StatusClient) OnStatus(p *v1_21_8.StatusToClientPacketServerInfo) (err error) {
s.Status = p.Response
s.PingSendTime = time.Now()
err = s.Send(&v1_21_8.StatusToServerPacketPing{Time: s.PingSendTime.UnixMilli()})
return
}
func (s *StatusClient) OnPong(p *v1_21_8.StatusToClientPacketPing) (err error) {
s.PingReceiveTime = time.Now()
err = event.HandlerDoneErr{}
return
}
func StatusRaw(addr string) (s *StatusClient, err error) {
c, err := ConnectVersionLess(addr)
if err != nil {
return
}
err = c.SetVersion("1.21.8")
if err != nil {
return
}
s = &StatusClient{
Conn: c,
}
err = s.Start(s)
defer c.Close()
return
}
func Status(addr string) (status server.StatusResponse, err error) {
s, err := StatusRaw(addr)
if err != nil {
return
}
err = json.Unmarshal([]byte(s.Status), &status)
return
}