Skip to content

zishang520/socket.io-go-parser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

socket.io-go-parser

Build Status GoDoc

This is the golang parser for the socket.io protocol encoding, shared by both socket.io-client-go(not ready) and socket.io.

Compatibility table:

Parser version Socket.IO server version Protocol revision
1.x 3.x 5

Parser API

socket.io-parser is the reference implementation of socket.io-protocol. Read the full API here: socket.io-protocol.

Example Usage

Encoding and decoding a packet

package main

import (
  "github.com/zishang520/engine.io/v2/utils"
  "github.com/zishang520/socket.io-go-parser/v2/parser"
)

func main() {
  encoder := parser.NewEncoder()
  id := uint64(13)
  packet := &parser.Packet{
    Type: parser.EVENT,
    Data: []string{"test-packet"},
    Id:   &id,
  }
  encodedPackets := encoder.Encode(packet)
  utils.Log().Default("encode %v", encodedPackets)

  for _, encodedPacket := range encodedPackets {
    decoder := parser.NewDecoder()
    decoder.On("decoded", func(decodedPackets ...any) {
      utils.Log().Default("decode %v", decodedPackets[0])
      // decodedPackets[0].Type == parser.EVENT
      // decodedPackets[0].Data == []string{"test-packet"}
      // decodedPackets[0].Id == 13
    })

    decoder.Add(encodedPacket)
  }
}

Encoding and decoding a packet with binary data

package main

import (
  "github.com/zishang520/engine.io/v2/utils"
  "github.com/zishang520/socket.io-go-parser/v2/parser"
)

func main() {
  encoder := parser.NewEncoder()
  id := uint64(13)
  attachments := uint64(0)
  packet := &parser.Packet{
    Type:        parser.BINARY_EVENT,
    Data:        []any{"test-packet", []byte{1, 2, 3, 4, 5}},
    Id:          &id,
    Attachments: &attachments,
  }
  encodedPackets := encoder.Encode(packet)
  utils.Log().Default("encode %v", encodedPackets)

  for _, encodedPacket := range encodedPackets {
    decoder := parser.NewDecoder()
    decoder.On("decoded", func(decodedPackets ...any) {
      utils.Log().Default("decode %v", decodedPackets[0])
      // decodedPackets[0].Type == parser.BINARY_EVENT
      // decodedPackets[0].Data == []any{"test-packet", []byte{1, 2, 3, 4, 5}}
      // decodedPackets[0].Id == 13
    })

    decoder.Add(encodedPacket)
  }
}

See the test suite for more examples of how socket.io-parser is used.

Tests

Standalone tests can be run with make test which will run the golang tests.

You can run the tests locally using the following command:

make test

Support

issues

Development

To contribute patches, run tests or benchmarks, make sure to clone the repository:

git clone git://github.com/zishang520/socket.io-go-parser.git

Then:

cd socket.io-go-parser
make test

See the Tests section above for how to run tests before submitting any patches.

License

MIT

About

No description, website, or topics provided.

Resources

License

Security policy

Stars

Watchers

Forks

Packages

No packages published