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  }