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