This commit is contained in:
adman
2025-12-24 00:13:18 +01:00
parent d7df6b25ef
commit 57e7ba7cdb
10 changed files with 52 additions and 21877 deletions
+1
View File
@@ -1,2 +1,3 @@
.devres/ .devres/
.idea/ .idea/
.failed_packets/
+1 -2
View File
@@ -17,7 +17,6 @@ var BadPacketTypeError = errors.New("bad packet type")
// UnCodablePacket represents a packet that could not be decoded due to proto_generated not supporting all packets. // UnCodablePacket represents a packet that could not be decoded due to proto_generated not supporting all packets.
type UnCodablePacket struct { type UnCodablePacket struct {
Err error Err error
Partial any
Data []byte Data []byte
} }
@@ -125,7 +124,7 @@ func (c *Conn) Receive() (packet any, err error) {
packetBuff := bytes.NewBuffer(packetBytes) packetBuff := bytes.NewBuffer(packetBytes)
packet, err = proto_generated.DecodePacket(c.Version, c.Actor.ReceiveDirection(), c.State, packetBuff) packet, err = proto_generated.DecodePacket(c.Version, c.Actor.ReceiveDirection(), c.State, packetBuff)
if err != nil { if err != nil {
packet = UnCodablePacket{Err: err, Data: packetBytes, Partial: packet} packet = UnCodablePacket{Err: err, Data: packetBytes}
err = nil err = nil
} }
return return
+15
View File
@@ -13,6 +13,21 @@ const (
ToClient ToClient
) )
func (d Direction) String() string {
switch d {
case ToServer:
return "ToServer"
case ToClient:
return "ToClient"
default:
return "Unknown"
}
}
func (d Direction) Opposite() Direction {
return d ^ 1
}
type State int type State int
const ( const (
File diff suppressed because it is too large Load Diff
+1 -2
View File
@@ -1,10 +1,9 @@
package proto_generated package proto_generated
import ( import (
"io"
"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"
"io"
) )
func PacketIdentifierToType(v string, d proto_base.Direction, s proto_base.State, i string) (t any) { func PacketIdentifierToType(v string, d proto_base.Direction, s proto_base.State, i string) (t any) {
+1
View File
@@ -205,6 +205,7 @@ func (g *Generator) GenerateTypes(prefix string, types Types) error {
if slices.Contains(g.Settings.ReplaceWithTodoNames, k) { if slices.Contains(g.Settings.ReplaceWithTodoNames, k) {
v = "todo" v = "todo"
} }
g.Depth = 0 g.Depth = 0
e, err := g.VisitType(v) e, err := g.VisitType(v)
if errors.Is(err, ToDoError) { if errors.Is(err, ToDoError) {
+1 -1
View File
@@ -9,7 +9,7 @@ import (
"github.com/go-viper/mapstructure/v2" "github.com/go-viper/mapstructure/v2"
) )
func ParseCompareTo(g *Generator, compareTo string) (e ast.Expr, err error) { func (g *Generator) ParseCompareTo(compareTo string) (e ast.Expr, err error) {
parts := strings.Split(compareTo, "/") parts := strings.Split(compareTo, "/")
downPrefixCount := 0 downPrefixCount := 0
for _, part := range parts { for _, part := range parts {
+18 -3
View File
@@ -110,6 +110,7 @@ func OptionDecoder(g *Generator, varToSet ast.Expr, dataRaw any, name string) (s
func ArrayDecoder(g *Generator, varToSet ast.Expr, dataRaw any, name string) (s []ast.Stmt, err error) { func ArrayDecoder(g *Generator, varToSet ast.Expr, dataRaw any, name string) (s []ast.Stmt, err error) {
var data struct { var data struct {
CountType any CountType any
Count string
Type any Type any
} }
lName := "l" + CamelCase(name) lName := "l" + CamelCase(name)
@@ -117,14 +118,28 @@ func ArrayDecoder(g *Generator, varToSet ast.Expr, dataRaw any, name string) (s
if err != nil { if err != nil {
return return
} }
countType, err := g.VisitType(data.CountType) var s2 []ast.Stmt
countType, err := g.VisitNameAndData("varint", nil)
if data.CountType != nil {
countType, err = g.VisitType(data.CountType)
if err != nil { if err != nil {
return return
} }
s2, err := g.VisitDecoder(Ident(lName), data.CountType, name) s2, err = g.VisitDecoder(Ident(lName), data.CountType, name)
if err != nil { if err != nil {
return return
} }
} else {
var n int
n, err = strconv.Atoi(data.Count)
var e ast.Expr
if err == nil {
e = NumLit(n)
} else {
e, err = g.ParseCompareTo(data.Count)
}
s2 = append(s2, Assign121(Ident(lName), e))
}
normalType, err := g.VisitType(data.Type) normalType, err := g.VisitType(data.Type)
if err != nil { if err != nil {
@@ -223,7 +238,7 @@ func SwitchDecoder(g *Generator, varToSet ast.Expr, dataRaw any, name string) (s
if err != nil { if err != nil {
return return
} }
compareToExpr, err := ParseCompareTo(g, data.CompareTo) compareToExpr, err := g.ParseCompareTo(data.CompareTo)
if err != nil { if err != nil {
return return
} }
+5 -6
View File
@@ -1,7 +1,6 @@
package main package main
import ( import (
"errors"
"go/ast" "go/ast"
"go/token" "go/token"
@@ -66,20 +65,20 @@ func SimpleTypeEncoder(_ *Generator, data ast.Expr, _ any, _ string) (s []ast.St
func ArrayEncoder(g *Generator, varToSet ast.Expr, dataRaw any, name string) (s []ast.Stmt, err error) { func ArrayEncoder(g *Generator, varToSet ast.Expr, dataRaw any, name string) (s []ast.Stmt, err error) {
var data struct { var data struct {
CountType any CountType any
Count string
Type any Type any
} }
err = mapstructure.Decode(dataRaw, &data) err = mapstructure.Decode(dataRaw, &data)
if err != nil { if err != nil {
return return
} }
if data.CountType == nil {
data.CountType = "varint"
}
ct, err := g.VisitType(data.CountType) ct, err := g.VisitType(data.CountType)
if err != nil { if err != nil {
return return
} }
_, ok := ct.(*ast.Ident)
if !ok {
err = errors.New("array count type must be simple type otherwise wtf")
}
iName := "i" + name iName := "i" + name
s, err = g.VisitEncoder(varToSet, data.Type, name) s, err = g.VisitEncoder(varToSet, data.Type, name)
s1, err := g.VisitEncoder(Call(ct, Call(Ident("len"), varToSet)), data.CountType, name) s1, err := g.VisitEncoder(Call(ct, Call(Ident("len"), varToSet)), data.CountType, name)
@@ -174,7 +173,7 @@ func SwitchEncoder(g *Generator, varToSet ast.Expr, dataRaw any, name string) (s
if err != nil { if err != nil {
return return
} }
compareToExpr, err := ParseCompareTo(g, data.CompareTo) compareToExpr, err := g.ParseCompareTo(data.CompareTo)
if err != nil { if err != nil {
return return
} }
+1 -1
View File
@@ -51,8 +51,8 @@ func StartServerWithOnConn(listenAddr string, onConn func(c *proto.Conn) (err er
if err != nil { if err != nil {
return return
} }
var cNet net.Conn
for { for {
var cNet net.Conn
cNet, err = l.Accept() cNet, err = l.Accept()
if err != nil { if err != nil {
return return