-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.go
66 lines (57 loc) · 1.3 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package main
import (
"encoding/json"
"fmt"
"log"
"github.com/gorilla/websocket"
)
const URL = "wss://trainmap.pv.lv/ws"
func main() {
handleCliArgs()
log.Printf("Loading static GTFS data from %s\n", config.gtfsPath)
initGtfs(config.gtfsPath)
log.Println("Connecting to API...")
ws, _, err := websocket.DefaultDialer.Dial(URL, nil)
if err != nil {
log.Fatal(err)
}
defer ws.Close()
log.Println("Connected to API websocket")
gtfsRtData := make(chan []byte)
go listenAndServeFeed(gtfsRtData)
for {
var m map[string]interface{}
if err = ws.ReadJSON(&m); err != nil {
log.Fatal(err)
}
handleMessage(m, gtfsRtData)
}
}
func handleMessage(m map[string]interface{}, gtfsRtData chan []byte) {
switch fmt.Sprintf("%s", m["type"]) {
case "message":
{
log.Println("Received message of type \"message\", ignoring as it's always empty")
}
case "active-stops":
{
log.Println("Received message of type \"active-stops\", probably not relevant")
}
case "back-end":
{
b, err := json.Marshal(m["data"])
if err != nil {
log.Fatalf("Failed to marshal back-end data: %s\n", err)
}
data := transformBackEndMsgToGtfsRt(b)
if data != nil {
gtfsRtData <- data
}
}
default:
{
log.Println("Received message of unknown type, dumping:")
log.Println(m)
}
}
}