|
@@ -8,21 +8,18 @@ package main
|
|
|
|
|
|
|
|
import (
|
|
import (
|
|
|
"flag"
|
|
"flag"
|
|
|
|
|
+ "html/template"
|
|
|
"log"
|
|
"log"
|
|
|
"net/http"
|
|
"net/http"
|
|
|
|
|
|
|
|
"github.com/gorilla/websocket"
|
|
"github.com/gorilla/websocket"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
-var addr = flag.String("addr", "localhost:8081", "http service address")
|
|
|
|
|
|
|
+var addr = flag.String("addr", "localhost:8080", "http service address")
|
|
|
|
|
|
|
|
var upgrader = websocket.Upgrader{} // use default options
|
|
var upgrader = websocket.Upgrader{} // use default options
|
|
|
|
|
|
|
|
func echo(w http.ResponseWriter, r *http.Request) {
|
|
func echo(w http.ResponseWriter, r *http.Request) {
|
|
|
- if r.URL.Path != "/" {
|
|
|
|
|
- http.Error(w, "Not found", 404)
|
|
|
|
|
- return
|
|
|
|
|
- }
|
|
|
|
|
c, err := upgrader.Upgrade(w, r, nil)
|
|
c, err := upgrader.Upgrade(w, r, nil)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
log.Print("upgrade:", err)
|
|
log.Print("upgrade:", err)
|
|
@@ -44,13 +41,84 @@ func echo(w http.ResponseWriter, r *http.Request) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+func home(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
+ homeTemplate.Execute(w, "ws://"+r.Host+"/echo")
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
func main() {
|
|
func main() {
|
|
|
flag.Parse()
|
|
flag.Parse()
|
|
|
log.SetFlags(0)
|
|
log.SetFlags(0)
|
|
|
-
|
|
|
|
|
- http.HandleFunc("/", echo)
|
|
|
|
|
- err := http.ListenAndServe(*addr, nil)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- log.Fatal("ListenAndServe: ", err)
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ http.HandleFunc("/echo", echo)
|
|
|
|
|
+ http.HandleFunc("/", home)
|
|
|
|
|
+ log.Fatal(http.ListenAndServe(*addr, nil))
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+var homeTemplate = template.Must(template.New("").Parse(`
|
|
|
|
|
+<!DOCTYPE html>
|
|
|
|
|
+<head>
|
|
|
|
|
+<meta charset="utf-8">
|
|
|
|
|
+<script>
|
|
|
|
|
+window.addEventListener("load", function(evt) {
|
|
|
|
|
+
|
|
|
|
|
+ var output = document.getElementById("output");
|
|
|
|
|
+ var input = document.getElementById("input");
|
|
|
|
|
+ var ws;
|
|
|
|
|
+
|
|
|
|
|
+ var print = function(message) {
|
|
|
|
|
+ var p = document.createElement("p");
|
|
|
|
|
+ p.innerHTML = message;
|
|
|
|
|
+ output.appendChild(p);
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ document.getElementById("open").onclick = function(evt) {
|
|
|
|
|
+ if (ws) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ ws = new WebSocket("{{.}}");
|
|
|
|
|
+ ws.onopen = function(evt) {
|
|
|
|
|
+ print("OPEN");
|
|
|
|
|
+ }
|
|
|
|
|
+ ws.onclose = function(evt) {
|
|
|
|
|
+ print("CLOSE");
|
|
|
|
|
+ ws = null;
|
|
|
|
|
+ }
|
|
|
|
|
+ ws.onmessage = function(evt) {
|
|
|
|
|
+ print("RESPONSE: " + evt.data);
|
|
|
|
|
+ }
|
|
|
|
|
+ ws.onerror = function(evt) {
|
|
|
|
|
+ print("ERROR: " + evt.data);
|
|
|
|
|
+ }
|
|
|
|
|
+ return false;
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ document.getElementById("send").onclick = function(evt) {
|
|
|
|
|
+ if (!ws) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ print("SEND: " + input.value);
|
|
|
|
|
+ ws.send(input.value);
|
|
|
|
|
+ return false;
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ document.getElementById("close").onclick = function(evt) {
|
|
|
|
|
+ if (!ws) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ ws.close();
|
|
|
|
|
+ return false;
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+});
|
|
|
|
|
+</script>
|
|
|
|
|
+</head>
|
|
|
|
|
+<body>
|
|
|
|
|
+<form>
|
|
|
|
|
+<button id="open">Open</button>
|
|
|
|
|
+<button id="close">Close</button>
|
|
|
|
|
+<p><input id="input" type="text" value="Hello world!">
|
|
|
|
|
+<button id="send">Send</button>
|
|
|
|
|
+</form>
|
|
|
|
|
+<div id="output"></div>
|
|
|
|
|
+</body>
|
|
|
|
|
+</html>
|
|
|
|
|
+`))
|