From 2d1b4919b3f5122b92f78697ef988753ee2a8c8d Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Thu, 10 Mar 2016 16:17:47 -0800 Subject: [PATCH] Start of a websocket server. --- sinks/adsb-ws/.gitignore | 2 ++ sinks/adsb-ws/Makefile | 4 ++++ sinks/adsb-ws/main.go | 18 ++++++++++++++++++ sinks/adsb-ws/stream.go | 37 +++++++++++++++++++++++++++++++++++++ 4 files changed, 61 insertions(+) create mode 100644 sinks/adsb-ws/.gitignore create mode 100644 sinks/adsb-ws/Makefile create mode 100644 sinks/adsb-ws/main.go create mode 100644 sinks/adsb-ws/stream.go diff --git a/sinks/adsb-ws/.gitignore b/sinks/adsb-ws/.gitignore new file mode 100644 index 0000000..0c93e28 --- /dev/null +++ b/sinks/adsb-ws/.gitignore @@ -0,0 +1,2 @@ +# Binaries +adsb-ws diff --git a/sinks/adsb-ws/Makefile b/sinks/adsb-ws/Makefile new file mode 100644 index 0000000..8e18409 --- /dev/null +++ b/sinks/adsb-ws/Makefile @@ -0,0 +1,4 @@ +all: adsb-ws + +adsb-ws: *.go + go build diff --git a/sinks/adsb-ws/main.go b/sinks/adsb-ws/main.go new file mode 100644 index 0000000..522f35a --- /dev/null +++ b/sinks/adsb-ws/main.go @@ -0,0 +1,18 @@ +package main + +import ( + "flag" + "log" + "net/http" +) + +var addr = flag.String("addr", ":8080", "http service address") + +func main() { + flag.Parse() + http.HandleFunc("/stream", serveStream) + err := http.ListenAndServe(*addr, nil) + if err != nil { + log.Fatal("ListenAndServe: ", err) + } +} diff --git a/sinks/adsb-ws/stream.go b/sinks/adsb-ws/stream.go new file mode 100644 index 0000000..b785554 --- /dev/null +++ b/sinks/adsb-ws/stream.go @@ -0,0 +1,37 @@ +package main + +import ( + "github.com/gorilla/websocket" + "log" + "net/http" +) + +var upgrader = websocket.Upgrader{ + ReadBufferSize: 1024, + WriteBufferSize: 1024, + CheckOrigin: func(r *http.Request) bool { + return true + }, +} + +func readPump(ws *websocket.Conn) { + for { + msgtype, msg, err := ws.ReadMessage() + if err != nil { + if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway) { + log.Printf("error: %v", err) + } + break + } + log.Println(msgtype, msg) + } +} + +func serveStream(w http.ResponseWriter, r *http.Request) { + ws, err := upgrader.Upgrade(w, r, nil) + if err != nil { + log.Println(err) + return + } + readPump(ws) +}