github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/igm/sockjs-go.v2/testserver/server.gon-place (about) 1 package main 2 3 import ( 4 "io" 5 "log" 6 "net/http" 7 "strings" 8 9 "yougam/libraries/x/net/websocket" 10 "yougam/libraries/igm/sockjs-go.v2/sockjs" 11 ) 12 13 type testHandler struct { 14 prefix string 15 handler http.Handler 16 } 17 18 func newSockjsHandler(prefix string, options sockjs.Options, fn func(sockjs.Session)) *testHandler { 19 return &testHandler{prefix, sockjs.NewHandler(prefix, options, fn)} 20 } 21 22 type testHandlers []*testHandler 23 24 func main() { 25 // prepare various options for tests 26 echoOptions := sockjs.DefaultOptions 27 echoOptions.ResponseLimit = 4096 28 29 disabledWebsocketOptions := sockjs.DefaultOptions 30 disabledWebsocketOptions.Websocket = false 31 32 cookieNeededOptions := sockjs.DefaultOptions 33 cookieNeededOptions.JSessionID = sockjs.DefaultJSessionID 34 // register various test handlers 35 var handlers = []*testHandler{ 36 &testHandler{"/echo/websocket", websocket.Handler(echoWsHandler)}, 37 &testHandler{"/close/websocket", websocket.Handler(closeWsHandler)}, 38 newSockjsHandler("/echo", echoOptions, echoHandler), 39 newSockjsHandler("/echo", echoOptions, echoHandler), 40 newSockjsHandler("/cookie_needed_echo", cookieNeededOptions, echoHandler), 41 newSockjsHandler("/close", sockjs.DefaultOptions, closeHandler), 42 newSockjsHandler("/disabled_websocket_echo", disabledWebsocketOptions, echoHandler), 43 } 44 log.Fatal(http.ListenAndServe(":8081", testHandlers(handlers))) 45 } 46 47 func (t testHandlers) ServeHTTP(rw http.ResponseWriter, req *http.Request) { 48 for _, handler := range t { 49 if strings.HasPrefix(req.URL.Path, handler.prefix) { 50 handler.handler.ServeHTTP(rw, req) 51 return 52 } 53 } 54 http.NotFound(rw, req) 55 } 56 57 func closeWsHandler(ws *websocket.Conn) { ws.Close() } 58 func echoWsHandler(ws *websocket.Conn) { io.Copy(ws, ws) } 59 60 func closeHandler(conn sockjs.Session) { conn.Close(3000, "Go away!") } 61 func echoHandler(conn sockjs.Session) { 62 log.Println("New connection created") 63 for { 64 if msg, err := conn.Recv(); err != nil { 65 break 66 } else { 67 if err := conn.Send(msg); err != nil { 68 break 69 } 70 } 71 } 72 log.Println("Sessionection closed") 73 }