123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- // Copyright 2015 The Gorilla WebSocket Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- // +build ignore
- package main
- import (
- "flag"
- "html/template"
- "log"
- "net/http"
- "github.com/gorilla/websocket"
- )
- var addr = flag.String("addr", "localhost:8080", "http service address")
- var upgrader = websocket.Upgrader{} // use default options
- func echo(w http.ResponseWriter, r *http.Request) {
- c, err := upgrader.Upgrade(w, r, nil)
- if err != nil {
- log.Print("upgrade:", err)
- return
- }
- defer c.Close()
- for {
- mt, message, err := c.ReadMessage()
- if err != nil {
- log.Println("read:", err)
- break
- }
- log.Printf("recv: %s", message)
- err = c.WriteMessage(mt, message)
- if err != nil {
- log.Println("write:", err)
- break
- }
- }
- }
- func home(w http.ResponseWriter, r *http.Request) {
- homeTemplate.Execute(w, "ws://"+r.Host+"/echo")
- }
- func main() {
- flag.Parse()
- log.SetFlags(0)
- http.HandleFunc("/echo", echo)
- http.HandleFunc("/", home)
- log.Fatal(http.ListenAndServe(*addr, nil))
- }
- var homeTemplate = template.Must(template.New("").Parse(`
- <!DOCTYPE html>
- <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 d = document.createElement("div");
- d.innerHTML = message;
- output.appendChild(d);
- };
- 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>
- <table>
- <tr><td valign="top" width="50%">
- <p>Click "Open" to create a connection to the server,
- "Send" to send a message to the server and "Close" to close the connection.
- You can change the message and send multiple times.
- <p>
- <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>
- </td><td valign="top" width="50%">
- <div id="output"></div>
- </td></tr></table>
- </body>
- </html>
- `))
|