Close listener after calling StartRoutine()

This change prevents the listener from closing itself before
establishing the websocket session with the client.
This commit is contained in:
Iwasaki Yudai 2015-08-24 12:15:24 -07:00
parent 6d1a19b1d5
commit d4475579ff
2 changed files with 6 additions and 9 deletions

View File

@ -122,7 +122,6 @@ func (app *App) Run() error {
if app.options.Once { if app.options.Once {
log.Printf("Once option is provided, accepting only one client") log.Printf("Once option is provided, accepting only one client")
wsHandler = wrapOnce(wsHandler, app)
} }
var siteMux = http.NewServeMux() var siteMux = http.NewServeMux()
@ -272,14 +271,6 @@ func wrapBasicAuth(handler http.Handler, credential string) http.Handler {
}) })
} }
func wrapOnce(handler http.HandlerFunc, app *App) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
log.Printf("Last client accepted, closing the listener.")
app.server.Close()
handler.ServeHTTP(w, r)
})
}
func generateRandomString(length int) string { func generateRandomString(length int) string {
const base = 36 const base = 36
size := big.NewInt(base) size := big.NewInt(base)

View File

@ -62,6 +62,12 @@ func (context *clientContext) goHandleClient() {
}() }()
context.app.server.StartRoutine() context.app.server.StartRoutine()
if context.app.options.Once {
log.Printf("Last client accepted, closing the listener.")
context.app.server.Close()
}
go func() { go func() {
defer context.app.server.FinishRoutine() defer context.app.server.FinishRoutine()