package api import ( "ArmedPolice/app/handle" "ArmedPolice/app/service" "ArmedPolice/config" "errors" "github.com/gin-gonic/gin" "github.com/gorilla/websocket" "net/http" ) type Websocket struct{} var upGrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { return true }, ReadBufferSize: 1024, WriteBufferSize: 1024, } func (*Websocket) Ws(c *gin.Context) { conn, err := upGrader.Upgrade(c.Writer, c.Request, nil) if err != nil { APIFailure(err)(c) return } token := c.Query(config.APIRequestToken) if token == "" { APIFailure(errors.New("Token异常"))(c) return } session := new(service.Session) if session, err = service.NewAuthToken(token).Auth(); err != nil { APIFailure(err)(c) return } client := service.NewWebsocket(session.UIDToString(), conn) service.HubMessage.RegisterHandle(client) go client.Write() } func (*Websocket) Pong(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"message": "ping"}) } func (*Websocket) Publish(c *gin.Context) { key := c.Query("key") service.HubMessage.EmitHandle(&service.HubEmit{ ID: key, Msg: handle.NewWorkNotice("你有一条待办事项", nil), }) APISuccess()(c) }