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 `))