EDDN/examples/Go/eddn.go
2020-05-05 14:00:08 +02:00

65 lines
1.2 KiB
Go

package main
import (
"bytes"
"compress/zlib"
"encoding/json"
"fmt"
"time"
"gopkg.in/zeromq/goczmq.v4"
)
type EDDN struct {
SchemaRef string `json:"$schemaRef"`
Header EDDNHeader `json:"header"`
Message json.RawMessage `json:"message"`
}
type EDDNHeader struct {
UploaderID string `json:"uploaderID"`
SoftwareName string `json:"softwareName"`
SoftwareVersion string `json:"softwareVersion"`
GatewayTimestamp time.Time `json:"gatewayTimestamp"`
}
func main() {
channel := goczmq.NewSubChanneler("tcp://eddn.edcd.io:9500", "")
defer channel.Destroy()
run := true
for run {
select {
case rawMessage, ok := <-channel.RecvChan:
if !ok {
run = false
continue
}
message, err := decodeMessage(rawMessage[0])
if err != nil {
fmt.Println(err.Error())
run = false
continue
}
fmt.Println(message.SchemaRef, message.Header.SoftwareName)
}
}
}
func decodeMessage(rawMessage []byte) (*EDDN, error) {
r, err := zlib.NewReader(bytes.NewReader(rawMessage))
if err != nil {
return nil, err
}
defer r.Close()
var message EDDN
err = json.NewDecoder(r).Decode(&message)
if err != nil {
return nil, err
}
return &message, nil
}