1. local msg/file share by webrtc fix: 1. meta clean goroutine walk error 2. clean interval to args(--clean)
127 lines
2.6 KiB
Go
127 lines
2.6 KiB
Go
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 {
|
|
var (
|
|
ip = c.IP(true)
|
|
ua = c.Get("User-Agent")
|
|
)
|
|
|
|
client := controller.RoomController.Register(ip, ua)
|
|
|
|
return resp.Resp200(c, client)
|
|
}
|
|
}
|
|
|
|
func LocalClients() nf.HandlerFunc {
|
|
return func(c *nf.Ctx) error {
|
|
list := controller.RoomController.List()
|
|
|
|
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 {
|
|
Id string `json:"id"`
|
|
From string `json:"from"`
|
|
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.Id, req.From, req.Offer)
|
|
|
|
return resp.Resp200(c, req.Offer)
|
|
}
|
|
}
|
|
|
|
func LocalAnswer() nf.HandlerFunc {
|
|
return func(c *nf.Ctx) error {
|
|
type Req struct {
|
|
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.Id, req.Answer)
|
|
|
|
return resp.Resp200(c, req)
|
|
}
|
|
}
|
|
|
|
func LocalCandidate() nf.HandlerFunc {
|
|
return func(c *nf.Ctx) error {
|
|
type Req struct {
|
|
Id string `json:"id"`
|
|
Candidate *controller.RoomCandidate `json:"candidate"`
|
|
}
|
|
|
|
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.Candidate(req.Id, req.Candidate)
|
|
|
|
return resp.Resp200(c, req)
|
|
}
|
|
}
|