43 lines
		
	
	
		
			782 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			782 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package main
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"github.com/astaxie/beego"
 | |
| 	"github.com/fzzy/sockjs-go/sockjs"
 | |
| 	"strings"
 | |
| )
 | |
| 
 | |
| var users *sockjs.SessionPool = sockjs.NewSessionPool()
 | |
| 
 | |
| func chatHandler(s sockjs.Session) {
 | |
| 	users.Add(s)
 | |
| 	defer users.Remove(s)
 | |
| 
 | |
| 	for {
 | |
| 		m := s.Receive()
 | |
| 		if m == nil {
 | |
| 			break
 | |
| 		}
 | |
| 		fullAddr := s.Info().RemoteAddr
 | |
| 		addr := fullAddr[:strings.LastIndex(fullAddr, ":")]
 | |
| 		m = []byte(fmt.Sprintf("%s: %s", addr, m))
 | |
| 		users.Broadcast(m)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| type MainController struct {
 | |
| 	beego.Controller
 | |
| }
 | |
| 
 | |
| func (m *MainController) Get() {
 | |
| 	m.TplNames = "index.html"
 | |
| }
 | |
| 
 | |
| func main() {
 | |
| 	conf := sockjs.NewConfig()
 | |
| 	sockjshandler := sockjs.NewHandler("/chat", chatHandler, conf)
 | |
| 	beego.Router("/", &MainController{})
 | |
| 	beego.RouterHandler("/chat/:info(.*)", sockjshandler)
 | |
| 	beego.Run()
 | |
| }
 |