Skip to content

Instantly share code, notes, and snippets.

@LemoNode
Last active March 3, 2020 21:27
Show Gist options
  • Save LemoNode/47439b0272660ca86595d4b609e545ed to your computer and use it in GitHub Desktop.
Save LemoNode/47439b0272660ca86595d4b609e545ed to your computer and use it in GitHub Desktop.
Standard localserver websocket
package main
import (
"flag"
"html/template"
"log"
"net/http"
"github.com/gorilla/websocket"
)
type Data struct {
Name string
ID int
}
const index = "index.html"
const port = "localhost:8080"
var upgrader = websocket.Upgrader{}
func echo(w http.ResponseWriter, r *http.Request) {
var test []Data
test = append(test, Data{Name: "Robert", ID: 12})
data := map[string]interface{} {
"Data": test,
}
c, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Print("upgrade:", err)
return
}
defer c.Close()
for {
_, message, err := c.ReadMessage()
if err != nil {
log.Println("read:", err)
break
}
log.Printf("recv: %s", message)
if err = c.WriteJSON(data["Data"]); err != nil {
log.Println(err)
break
}
}
}
func home(w http.ResponseWriter, r *http.Request) {
t := template.Must(template.New("").Parse(`
<head>
<meta charset="utf-8">
</head>
<body>
<script>
var socket = new WebSocket("ws://" + document.location.host + "/echo");
socket.onopen = function(evt) {
console.log("OPEN");
}
socket.onmessage = function(evt) {
console.log(JSON.parse(evt.data))
console.log("RESPONSE: " + evt.data);
}
// ws.send(input.value);
</script>
</body>`))
// t := template.Must(template.ParseGlob(index))
// t.ExecuteTemplate(w, index, nil)
t.Execute(w, index)
}
func main() {
var addr = flag.String("addr", port, "http service address")
flag.Parse()
log.SetFlags(0)
http.HandleFunc("/echo", echo)
http.HandleFunc("/", home)
log.Fatal(http.ListenAndServe(*addr, nil))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment