mirror of
https://github.com/EDCD/EDDN.git
synced 2025-04-26 05:02:15 +03:00
65 lines
1.2 KiB
Go
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
|
|
}
|