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  }