github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/igm/sockjs-go.v2/examples/webchat/webchat.gon-place (about) 1 package main 2 3 import ( 4 "log" 5 "net/http" 6 7 "yougam/libraries/igm/sockjs-go.v2/sockjs" 8 "yougam/modules/jsock/pubsub" 9 ) 10 11 var chat pubsub.Publisher 12 13 func main() { 14 http.Handle("/echo/", sockjs.NewHandler("/echo", sockjs.DefaultOptions, echoHandler)) 15 http.Handle("/", http.FileServer(http.Dir("web/"))) 16 log.Println("Server started on port: 8080") 17 log.Fatal(http.ListenAndServe(":8080", nil)) 18 } 19 20 func echoHandler(session sockjs.Session) { 21 log.Println("new sockjs session established") 22 var closedSession = make(chan struct{}) 23 chat.Publish("[info] new participant joined chat") 24 defer chat.Publish("[info] participant left chat") 25 go func() { 26 reader, _ := chat.SubChannel(nil) 27 for { 28 select { 29 case <-closedSession: 30 return 31 case msg := <-reader: 32 if err := session.Send(msg.(string)); err != nil { 33 return 34 } 35 } 36 37 } 38 }() 39 for { 40 if msg, err := session.Recv(); err == nil { 41 chat.Publish(msg) 42 continue 43 } 44 break 45 } 46 close(closedSession) 47 log.Println("sockjs session closed") 48 }