0.0.4 • Published 5 years ago
packetizr v0.0.4
packetizr 
Intro
packetizr is a non production ready code generation tool for binary serialization based on contracts. Right now it's just being used on a hobby game server project. Any suggestions or advice would be greatly appreciated.
Installation
npm i -g packetizrUsage
packetizr gen -l {language} -o {output directory} [contract file]Examples
packetizr gen -l go contract.yml # generates go source files for "contract.yml"packetizr gen --help # display helpContract Structure
Packets
Should be an array of packet definitions and each definition should have:
header(unsigned numeric value) packet identifier, must be uniquename(string) packet name, must be uniquefields(object) packet model
packets:
- header: 1
name: PositionMessage
fields:
x:
type: float32
y:
type: float32
- header: 2
name: ChatMessage
fields:
userId:
type: char
length: 36
message:
type: varchar
...Fields
type(string) corresponding to any of the supported types requiredlength(unsigned numeric value) used to specify the length of a char type field, required when type is charschema(string) name of a schema defined incomponents.schemas, required when type is objectitems(object) describe the type of each element, should be present when type is array.
...
fields:
age:
type: uint8
name:
type: char
length: 10
address:
type: object
schema: Address
phoneNumbers:
type: array
items:
type: char
length: 10
...Supported Types
| name | size(bytes) | type |
|---|---|---|
| int32 | 4 | basic |
| int16 | 2 | basic |
| int8 | 1 | basic |
| uint32 | 4 | basic |
| uint16 | 2 | basic |
| uint8 | 1 | basic |
| float32 | 4 | basic |
| char | {defined fixed length} | basic |
| varchar | 1+n | basic |
| object | sum({each attributes size}) | complex |
| array | 1 + (n * {each item size}) | complex |
Complex Types - object
Objects should have an schema which describes its attribute types
packets:
- header: 1
name: LoginMessage
fields:
timestamp:
type: uint32
information:
type: object
schema: LoginInformation
components:
schemas:
LoginInformation
username:
type: varchar
password:
type: varcharComplex Types - array
Array items can be described using the following properties:
type(string) any supported types, except forarrayrequiredlength(unsigned numeric value) used to specify the length of a char type field, required when type is charschema(string) name of a schema defined incomponents.schemas, required when type is object
fields:
arrayOfIntegers:
type: array
items:
type: int32
arrayOfObjects:
type: array
items:
type: object
schema: LoginInformationSchemas
Schemas describe specific object structure using the same properties that fields
...
components:
schemas:
LoginInformation
username:
type: varchar
password:
type: varchar
Position:
x:
type: float32
y:
type: float32Example
packets:
- header: 1
name: NumbersMessage
fields:
int32Field:
type: int32
float32Field:
type: float32
int16Field:
type: int16
int8Field:
type: int8
uint32Field:
type: uint32
uint16Field:
type: uint16
uint8Field:
type: uint8
- header: 2
name: StringsMessage
fields:
varcharField:
type: varchar
charField:
type: char
length: 4
- header: 3
name: CustomMessage
fields:
parentField:
type: object
schema: ParentObject
- header: 4
name: ArraysMessage
fields:
customArray:
type: array
items:
type: object
schema: ParentObject
numericArray:
type: array
items:
type: int32
charArray:
type: array
items:
type: char
length: 6
varcharArray:
type: array
items:
type: varchar
singleByteArray:
type: array
items:
type: int8
components:
schemas:
ParentObject:
childField:
type: object
schema: ChildObject
ChildObject:
varcharField:
type: varchar
charField:
type: char
length: 10