yess
This commit is contained in:
@@ -1,2 +1,3 @@
|
|||||||
.devres/
|
.devres/
|
||||||
.idea/
|
.idea/
|
||||||
|
.failed_packets/
|
||||||
+1
-2
@@ -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
|
||||||
|
|||||||
@@ -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,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) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user