feat(backend/mobs): clean up ruby templates and final generated code (#851)
This commit is contained in:
parent
2dcdf0a6d8
commit
08b47991aa
9 changed files with 1625 additions and 2998 deletions
|
|
@ -11,4 +11,4 @@ func IsIOSType(id int) bool {
|
|||
|
||||
func IsDOMType(id int) bool {
|
||||
return 0 == id || 4 == id || 5 == id || 6 == id || 7 == id || 8 == id || 9 == id || 10 == id || 11 == id || 12 == id || 13 == id || 14 == id || 15 == id || 16 == id || 18 == id || 19 == id || 20 == id || 37 == id || 38 == id || 49 == id || 54 == id || 55 == id || 57 == id || 58 == id || 59 == id || 60 == id || 61 == id || 67 == id || 69 == id || 70 == id || 71 == id || 72 == id || 73 == id || 74 == id || 75 == id || 76 == id || 77 == id || 90 == id || 93 == id || 96 == id || 100 == id || 102 == id || 103 == id || 105 == id
|
||||
}
|
||||
}
|
||||
|
|
@ -4,7 +4,6 @@ import "fmt"
|
|||
|
||||
type Message interface {
|
||||
Encode() []byte
|
||||
EncodeWithIndex() []byte
|
||||
Decode() Message
|
||||
TypeID() int
|
||||
Meta() *message
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,11 +1,9 @@
|
|||
package messages
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
)
|
||||
|
||||
var (
|
||||
|
|
@ -21,19 +19,6 @@ func ReadByte(reader io.Reader) (byte, error) {
|
|||
return one[0], nil
|
||||
}
|
||||
|
||||
func ReadData(reader io.Reader) ([]byte, error) {
|
||||
n, err := ReadUint(reader)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
p := make([]byte, n)
|
||||
_, err = io.ReadFull(reader, p)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return p, nil
|
||||
}
|
||||
|
||||
func ReadUint(reader io.Reader) (uint64, error) {
|
||||
var x uint64
|
||||
var s uint
|
||||
|
|
@ -55,6 +40,16 @@ func ReadUint(reader io.Reader) (uint64, error) {
|
|||
}
|
||||
}
|
||||
|
||||
func WriteUint(v uint64, buf []byte, p int) int {
|
||||
for v >= 0x80 {
|
||||
buf[p] = byte(v) | 0x80
|
||||
v >>= 7
|
||||
p++
|
||||
}
|
||||
buf[p] = byte(v)
|
||||
return p + 1
|
||||
}
|
||||
|
||||
func ReadInt(reader io.Reader) (int64, error) {
|
||||
ux, err := ReadUint(reader)
|
||||
x := int64(ux >> 1)
|
||||
|
|
@ -67,6 +62,14 @@ func ReadInt(reader io.Reader) (int64, error) {
|
|||
return x, err
|
||||
}
|
||||
|
||||
func WriteInt(v int64, buf []byte, p int) int {
|
||||
uv := uint64(v) << 1
|
||||
if v < 0 {
|
||||
uv = ^uv
|
||||
}
|
||||
return WriteUint(uv, buf, p)
|
||||
}
|
||||
|
||||
func ReadBoolean(reader io.Reader) (bool, error) {
|
||||
p := make([]byte, 1)
|
||||
_, err := io.ReadFull(reader, p)
|
||||
|
|
@ -76,6 +79,15 @@ func ReadBoolean(reader io.Reader) (bool, error) {
|
|||
return p[0] == 1, nil
|
||||
}
|
||||
|
||||
func WriteBoolean(v bool, buf []byte, p int) int {
|
||||
if v {
|
||||
buf[p] = 1
|
||||
} else {
|
||||
buf[p] = 0
|
||||
}
|
||||
return p + 1
|
||||
}
|
||||
|
||||
func ReadString(reader io.Reader) (string, error) {
|
||||
l, err := ReadUint(reader)
|
||||
if err != nil {
|
||||
|
|
@ -92,73 +104,11 @@ func ReadString(reader io.Reader) (string, error) {
|
|||
return string(buf), nil
|
||||
}
|
||||
|
||||
func ReadJson(reader io.Reader) (interface{}, error) {
|
||||
jsonData, err := ReadData(reader)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var v interface{}
|
||||
if err = json.Unmarshal(jsonData, &v); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return v, nil
|
||||
}
|
||||
|
||||
func WriteUint(v uint64, buf []byte, p int) int {
|
||||
for v >= 0x80 {
|
||||
buf[p] = byte(v) | 0x80
|
||||
v >>= 7
|
||||
p++
|
||||
}
|
||||
buf[p] = byte(v)
|
||||
return p + 1
|
||||
}
|
||||
|
||||
func WriteInt(v int64, buf []byte, p int) int {
|
||||
uv := uint64(v) << 1
|
||||
if v < 0 {
|
||||
uv = ^uv
|
||||
}
|
||||
return WriteUint(uv, buf, p)
|
||||
}
|
||||
|
||||
func WriteBoolean(v bool, buf []byte, p int) int {
|
||||
if v {
|
||||
buf[p] = 1
|
||||
} else {
|
||||
buf[p] = 0
|
||||
}
|
||||
return p + 1
|
||||
}
|
||||
|
||||
func WriteString(str string, buf []byte, p int) int {
|
||||
p = WriteUint(uint64(len(str)), buf, p)
|
||||
return p + copy(buf[p:], str)
|
||||
}
|
||||
|
||||
func WriteData(data []byte, buf []byte, p int) int {
|
||||
p = WriteUint(uint64(len(data)), buf, p)
|
||||
return p + copy(buf[p:], data)
|
||||
}
|
||||
|
||||
func WriteJson(v interface{}, buf []byte, p int) int {
|
||||
data, err := json.Marshal(v)
|
||||
if err != nil {
|
||||
log.Printf("JSON encoding error: %v", err)
|
||||
return WriteString("null", buf, p)
|
||||
}
|
||||
return WriteData(data, buf, p)
|
||||
}
|
||||
|
||||
func WriteSize(size uint64, buf []byte, p int) {
|
||||
var m uint64 = 255
|
||||
for i := 0; i < 3; i++ {
|
||||
buf[p+i] = byte(size & m)
|
||||
size = size >> 8
|
||||
}
|
||||
fmt.Println(buf)
|
||||
}
|
||||
|
||||
func ReadSize(reader io.Reader) (uint64, error) {
|
||||
n, err := io.ReadFull(reader, three)
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ package messages
|
|||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/binary"
|
||||
"io"
|
||||
"log"
|
||||
)
|
||||
|
|
@ -46,22 +45,6 @@ func (m *RawMessage) Encode() []byte {
|
|||
return m.data
|
||||
}
|
||||
|
||||
func (m *RawMessage) EncodeWithIndex() []byte {
|
||||
if !m.encoded {
|
||||
if m.Encode() == nil {
|
||||
*m.broken = true
|
||||
return nil
|
||||
}
|
||||
}
|
||||
if IsIOSType(int(m.tp)) {
|
||||
return m.data
|
||||
}
|
||||
data := make([]byte, len(m.data)+8)
|
||||
copy(data[8:], m.data[:])
|
||||
binary.LittleEndian.PutUint64(data[0:], m.Meta().Index)
|
||||
return data
|
||||
}
|
||||
|
||||
func (m *RawMessage) Decode() Message {
|
||||
if !m.encoded {
|
||||
if m.Encode() == nil {
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -2,38 +2,21 @@ package messages
|
|||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
)
|
||||
|
||||
var (
|
||||
one = []byte{0}
|
||||
three = []byte{0, 0, 0}
|
||||
)
|
||||
|
||||
func ReadByte(reader io.Reader) (byte, error) {
|
||||
p := make([]byte, 1)
|
||||
_, err := io.ReadFull(reader, p)
|
||||
_, err := io.ReadFull(reader, one)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return p[0], nil
|
||||
}
|
||||
|
||||
func SkipBytes(reader io.ReadSeeker) error {
|
||||
n, err := ReadUint(reader)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = reader.Seek(int64(n), io.SeekCurrent)
|
||||
return err
|
||||
}
|
||||
|
||||
func ReadData(reader io.Reader) ([]byte, error) {
|
||||
n, err := ReadUint(reader)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
p := make([]byte, n)
|
||||
_, err = io.ReadFull(reader, p)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return p, nil
|
||||
return one[0], nil
|
||||
}
|
||||
|
||||
func ReadUint(reader io.Reader) (uint64, error) {
|
||||
|
|
@ -47,7 +30,7 @@ func ReadUint(reader io.Reader) (uint64, error) {
|
|||
}
|
||||
if b < 0x80 {
|
||||
if i > 9 || i == 9 && b > 1 {
|
||||
return x, errors.New("overflow")
|
||||
return x, errors.New("uint overflow")
|
||||
}
|
||||
return x | uint64(b)<<s, nil
|
||||
}
|
||||
|
|
@ -57,6 +40,16 @@ func ReadUint(reader io.Reader) (uint64, error) {
|
|||
}
|
||||
}
|
||||
|
||||
func WriteUint(v uint64, buf []byte, p int) int {
|
||||
for v >= 0x80 {
|
||||
buf[p] = byte(v) | 0x80
|
||||
v >>= 7
|
||||
p++
|
||||
}
|
||||
buf[p] = byte(v)
|
||||
return p + 1
|
||||
}
|
||||
|
||||
func ReadInt(reader io.Reader) (int64, error) {
|
||||
ux, err := ReadUint(reader)
|
||||
x := int64(ux >> 1)
|
||||
|
|
@ -69,6 +62,14 @@ func ReadInt(reader io.Reader) (int64, error) {
|
|||
return x, err
|
||||
}
|
||||
|
||||
func WriteInt(v int64, buf []byte, p int) int {
|
||||
uv := uint64(v) << 1
|
||||
if v < 0 {
|
||||
uv = ^uv
|
||||
}
|
||||
return WriteUint(uv, buf, p)
|
||||
}
|
||||
|
||||
func ReadBoolean(reader io.Reader) (bool, error) {
|
||||
p := make([]byte, 1)
|
||||
_, err := io.ReadFull(reader, p)
|
||||
|
|
@ -78,37 +79,6 @@ func ReadBoolean(reader io.Reader) (bool, error) {
|
|||
return p[0] == 1, nil
|
||||
}
|
||||
|
||||
func ReadString(reader io.Reader) (string, error) {
|
||||
l, err := ReadUint(reader)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
buf := make([]byte, l)
|
||||
_, err = io.ReadFull(reader, buf)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(buf), nil
|
||||
}
|
||||
|
||||
func WriteUint(v uint64, buf []byte, p int) int {
|
||||
for v >= 0x80 {
|
||||
buf[p] = byte(v) | 0x80
|
||||
v >>= 7
|
||||
p++
|
||||
}
|
||||
buf[p] = byte(v)
|
||||
return p + 1
|
||||
}
|
||||
|
||||
func WriteInt(v int64, buf []byte, p int) int {
|
||||
uv := uint64(v) << 1
|
||||
if v < 0 {
|
||||
uv = ^uv
|
||||
}
|
||||
return WriteUint(uv, buf, p)
|
||||
}
|
||||
|
||||
func WriteBoolean(v bool, buf []byte, p int) int {
|
||||
if v {
|
||||
buf[p] = 1
|
||||
|
|
@ -118,7 +88,38 @@ func WriteBoolean(v bool, buf []byte, p int) int {
|
|||
return p + 1
|
||||
}
|
||||
|
||||
func ReadString(reader io.Reader) (string, error) {
|
||||
l, err := ReadUint(reader)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if l > 10e6 {
|
||||
return "", errors.New("Too long string")
|
||||
}
|
||||
buf := make([]byte, l)
|
||||
_, err = io.ReadFull(reader, buf)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(buf), nil
|
||||
}
|
||||
|
||||
func WriteString(str string, buf []byte, p int) int {
|
||||
p = WriteUint(uint64(len(str)), buf, p)
|
||||
return p + copy(buf[p:], str)
|
||||
}
|
||||
|
||||
func ReadSize(reader io.Reader) (uint64, error) {
|
||||
n, err := io.ReadFull(reader, three)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
if n != 3 {
|
||||
return 0, fmt.Errorf("read only %d of 3 size bytes", n)
|
||||
}
|
||||
var size uint64
|
||||
for i, b := range three {
|
||||
size += uint64(b) << (8 * i)
|
||||
}
|
||||
return size, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,12 +1,8 @@
|
|||
// Auto-generated, do not edit
|
||||
package messages
|
||||
|
||||
import "encoding/binary"
|
||||
|
||||
const (
|
||||
<% $messages.each do |msg| %>
|
||||
Msg<%= msg.name %> = <%= msg.id %>
|
||||
<% end %>
|
||||
const (<% $messages.each do |msg| %>
|
||||
Msg<%= msg.name %> = <%= msg.id %><% end %>
|
||||
)
|
||||
|
||||
<% $messages.each do |msg| %>
|
||||
|
|
@ -25,17 +21,6 @@ func (msg *<%= msg.name %>) Encode() []byte {
|
|||
return buf[:p]
|
||||
}
|
||||
|
||||
func (msg *<%= msg.name %>) EncodeWithIndex() []byte {
|
||||
encoded := msg.Encode()
|
||||
if IsIOSType(msg.TypeID()) {
|
||||
return encoded
|
||||
}
|
||||
data := make([]byte, len(encoded)+8)
|
||||
copy(data[8:], encoded[:])
|
||||
binary.LittleEndian.PutUint64(data[0:], msg.Meta().Index)
|
||||
return data
|
||||
}
|
||||
|
||||
func (msg *<%= msg.name %>) Decode() Message {
|
||||
return msg
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,26 +5,21 @@ import (
|
|||
"fmt"
|
||||
"io"
|
||||
)
|
||||
|
||||
<% $messages.each do |msg| %>
|
||||
func Decode<%= msg.name %>(reader io.Reader) (Message, error) {
|
||||
var err error = nil
|
||||
msg := &<%= msg.name %>{}
|
||||
<%= msg.attributes.map { |attr|
|
||||
" if msg.#{attr.name}, err = Read#{attr.type.to_s.pascal_case}(reader); err != nil {
|
||||
return nil, err
|
||||
}" }.join "\n" %>
|
||||
return msg, err
|
||||
" if msg.#{attr.name}, err = Read#{attr.type.to_s.pascal_case}(reader); err != nil {
|
||||
return nil, err
|
||||
}" }.join "\n" %>
|
||||
return msg, err
|
||||
}
|
||||
|
||||
<% end %>
|
||||
|
||||
func ReadMessage(t uint64, reader io.Reader) (Message, error) {
|
||||
switch t {
|
||||
<% $messages.each do |msg| %>
|
||||
switch t {<% $messages.each do |msg| %>
|
||||
case <%= msg.id %>:
|
||||
return Decode<%= msg.name %>(reader)
|
||||
<% end %>
|
||||
return Decode<%= msg.name %>(reader)<% end %>
|
||||
}
|
||||
return nil, fmt.Errorf("Unknown message code: %v", t)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue