package handler import ( "github.com/gorilla/websocket" "github.com/loveuer/nf" "github.com/loveuer/nf/nft/log" "github.com/loveuer/nf/nft/resp" "github.com/loveuer/ushare/internal/controller" "net/http" ) func LocalRegister() nf.HandlerFunc { return func(c *nf.Ctx) error { type Req struct { Candidate *controller.RoomCandidate `json:"candidate"` Offer *controller.RoomOffer `json:"offer"` } var ( err error req = new(Req) ip = c.IP(true) ua = c.Get("User-Agent") ) if err = c.BodyParser(req); err != nil { return c.Status(http.StatusBadRequest).JSON(map[string]interface{}{"msg": err.Error()}) } client := controller.RoomController.Register(ip, ua, req.Candidate, req.Offer) return resp.Resp200(c, client) } } func LocalClients() nf.HandlerFunc { return func(c *nf.Ctx) error { room := c.Query("room") if room == "" { return c.Status(http.StatusBadRequest).JSON(map[string]string{"err": "room can't be empty"}) } list := controller.RoomController.List(room) return resp.Resp200(c, list) } } func LocalWS() nf.HandlerFunc { upgrader := websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, CheckOrigin: func(r *http.Request) bool { return true }, } return func(c *nf.Ctx) error { id := c.Query("id") if id == "" { return c.Status(http.StatusBadRequest).JSON(map[string]string{"error": "id is empty"}) } conn, err := upgrader.Upgrade(c.Writer, c.Request, nil) if err != nil { log.Error("LocalWS: failed to upgrade websocket connection, err = %s", err.Error()) return err } controller.RoomController.Enter(conn, id) return nil } } func LocalOffer() nf.HandlerFunc { return func(c *nf.Ctx) error { type Req struct { Room string `json:"room"` Id string `json:"id"` Offer *controller.RoomOffer `json:"offer"` } var ( err error req = new(Req) ) if err = c.BodyParser(req); err != nil { return c.Status(http.StatusBadRequest).JSON(map[string]string{"err": err.Error()}) } controller.RoomController.Offer(req.Room, req.Id, req.Offer) return resp.Resp200(c, req.Offer) } } func LocalAnswer() nf.HandlerFunc { return func(c *nf.Ctx) error { type Req struct { Room string `json:"room"` Id string `json:"id"` Answer *controller.RoomOffer `json:"answer"` } var ( err error req = new(Req) ) if err = c.BodyParser(req); err != nil { return c.Status(http.StatusBadRequest).JSON(map[string]string{"err": err.Error()}) } controller.RoomController.Answer(req.Room, req.Id, req.Answer) return resp.Resp200(c, req) } }