1package main 2 3import ( 4 "fmt" 5 "log" 6 "net/http" 7 8 "github.com/gin-gonic/gin" 9 10 socketio "github.com/googollee/go-socket.io" 11) 12 13func main() { 14 router := gin.New() 15 server, err := socketio.NewServer(nil) 16 if err != nil { 17 log.Fatal(err) 18 } 19 server.OnConnect("/", func(s socketio.Conn) error { 20 s.SetContext("") 21 fmt.Println("connected:", s.ID()) 22 return nil 23 }) 24 server.OnEvent("/", "notice", func(s socketio.Conn, msg string) { 25 fmt.Println("notice:", msg) 26 s.Emit("reply", "have "+msg) 27 }) 28 server.OnEvent("/chat", "msg", func(s socketio.Conn, msg string) string { 29 s.SetContext(msg) 30 return "recv " + msg 31 }) 32 server.OnEvent("/", "bye", func(s socketio.Conn) string { 33 last := s.Context().(string) 34 s.Emit("bye", last) 35 s.Close() 36 return last 37 }) 38 server.OnError("/", func(s socketio.Conn, e error) { 39 fmt.Println("meet error:", e) 40 }) 41 server.OnDisconnect("/", func(s socketio.Conn, reason string) { 42 fmt.Println("closed", reason) 43 }) 44 45 go server.Serve() 46 defer server.Close() 47 48 router.GET("/socket.io/*any", gin.WrapH(server)) 49 router.POST("/socket.io/*any", gin.WrapH(server)) 50 router.StaticFS("/public", http.Dir("../asset")) 51 52 router.Run() 53} 54