github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/gorilla/websocket/examples/echo/server.go (about)

     1  // Copyright 2015 The Gorilla WebSocket Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // +build ignore
     6  
     7  package main
     8  
     9  import (
    10  	"flag"
    11  	"html/template"
    12  	"log"
    13  	"net/http"
    14  
    15  	"github.com/insionng/yougam/libraries/gorilla/websocket"
    16  )
    17  
    18  var addr = flag.String("addr", "localhost:8080", "http service address")
    19  
    20  var upgrader = websocket.Upgrader{} // use default options
    21  
    22  func echo(w http.ResponseWriter, r *http.Request) {
    23  	c, err := upgrader.Upgrade(w, r, nil)
    24  	if err != nil {
    25  		log.Print("upgrade:", err)
    26  		return
    27  	}
    28  	defer c.Close()
    29  	for {
    30  		mt, message, err := c.ReadMessage()
    31  		if err != nil {
    32  			log.Println("read:", err)
    33  			break
    34  		}
    35  		log.Printf("recv: %s", message)
    36  		err = c.WriteMessage(mt, message)
    37  		if err != nil {
    38  			log.Println("write:", err)
    39  			break
    40  		}
    41  	}
    42  }
    43  
    44  func home(w http.ResponseWriter, r *http.Request) {
    45  	homeTemplate.Execute(w, "ws://"+r.Host+"/echo")
    46  }
    47  
    48  func main() {
    49  	flag.Parse()
    50  	log.SetFlags(0)
    51  	http.HandleFunc("/echo", echo)
    52  	http.HandleFunc("/", home)
    53  	log.Fatal(http.ListenAndServe(*addr, nil))
    54  }
    55  
    56  var homeTemplate = template.Must(template.New("").Parse(`
    57  <!DOCTYPE html>
    58  <head>
    59  <meta charset="utf-8">
    60  <script>  
    61  window.addEventListener("load", function(evt) {
    62  
    63      var output = document.getElementById("output");
    64      var input = document.getElementById("input");
    65      var ws;
    66  
    67      var print = function(message) {
    68          var d = document.createElement("div");
    69          d.innerHTML = message;
    70          output.appendChild(d);
    71      };
    72  
    73      document.getElementById("open").onclick = function(evt) {
    74          if (ws) {
    75              return false;
    76          }
    77          ws = new WebSocket("{{.}}");
    78          ws.onopen = function(evt) {
    79              print("OPEN");
    80          }
    81          ws.onclose = function(evt) {
    82              print("CLOSE");
    83              ws = null;
    84          }
    85          ws.onmessage = function(evt) {
    86              print("RESPONSE: " + evt.data);
    87          }
    88          ws.onerror = function(evt) {
    89              print("ERROR: " + evt.data);
    90          }
    91          return false;
    92      };
    93  
    94      document.getElementById("send").onclick = function(evt) {
    95          if (!ws) {
    96              return false;
    97          }
    98          print("SEND: " + input.value);
    99          ws.send(input.value);
   100          return false;
   101      };
   102  
   103      document.getElementById("close").onclick = function(evt) {
   104          if (!ws) {
   105              return false;
   106          }
   107          ws.close();
   108          return false;
   109      };
   110  
   111  });
   112  </script>
   113  </head>
   114  <body>
   115  <table>
   116  <tr><td valign="top" width="50%">
   117  <p>Click "Open" to create a connection to the server, 
   118  "Send" to send a message to the server and "Close" to close the connection. 
   119  You can change the message and send multiple times.
   120  <p>
   121  <form>
   122  <button id="open">Open</button>
   123  <button id="close">Close</button>
   124  <p><input id="input" type="text" value="Hello world!">
   125  <button id="send">Send</button>
   126  </form>
   127  </td><td valign="top" width="50%">
   128  <div id="output"></div>
   129  </td></tr></table>
   130  </body>
   131  </html>
   132  `))