| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- package callback
- import (
- "bet24.com/servers/micros/audioroom/handler/manager"
- "encoding/hex"
- "encoding/json"
- "net/http"
- "sort"
- "strconv"
- "strings"
- "bet24.com/log"
- "bet24.com/public"
- "bet24.com/servers/micros/audioroom/config"
- pb "bet24.com/servers/micros/audioroom/proto"
- "github.com/gin-gonic/gin"
- )
- // 创建房间(房间第1个人进来时创建的房间流)
- func CreateRoom(c *gin.Context) {
- var req Request_CreateRoom
- if err := c.ShouldBind(&req); err != nil {
- log.Error("callback.CreateRoom params err %v", err)
- return
- }
- log.Debug("controller.CreateRoom %+v", req)
- // 处理业务逻辑
- if !checkSign(req.Signature, req.Timestamp, req.Nonce) {
- log.Error("controller.CreateRoom 校验失败 %+v", req)
- return
- }
- roomId, err := strconv.Atoi(req.Room_id)
- if err != nil {
- log.Error("controller.CreateRoom room_id strconv.Atoi err %v", err)
- return
- }
- // 获取房间信息
- buf, _ := json.Marshal(struct {
- RoomId int
- }{
- RoomId: roomId,
- })
- pb.OnAudioRoomMsg(0, "getAudioRoom", string(buf))
- c.String(http.StatusOK, "success")
- return
- }
- // 登录房间
- func LoginRoom(c *gin.Context) {
- var req Request_LoginRoom
- if err := c.ShouldBind(&req); err != nil {
- log.Error("callback.LoginRoom params err %v", err)
- return
- }
- log.Debug("controller.LoginRoom %+v", req)
- // 处理业务逻辑
- if !checkSign(req.Signature, req.Timestamp, req.Nonce) {
- log.Error("controller.LoginRoom 校验失败 %+v", req)
- return
- }
- userId, err := strconv.Atoi(req.User_account)
- if err != nil {
- log.Error("controller.LoginRoom user_account strconv.Atoi err %v", err)
- return
- }
- roomId, err := strconv.Atoi(req.Room_id)
- if err != nil {
- log.Error("controller.LoginRoom room_id strconv.Atoi err %v", err)
- return
- }
- // 进入房间
- buf, _ := json.Marshal(struct {
- RoomId int
- }{
- roomId,
- })
- pb.OnAudioRoomMsg(userId, "enterAudioRoom", string(buf))
- c.String(http.StatusOK, "success")
- return
- }
- // 退出房间
- func LogoutRoom(c *gin.Context) {
- var req Request_LogoutRoom
- if err := c.ShouldBind(&req); err != nil {
- log.Error("callback.logoutRoom params err %v", err)
- return
- }
- log.Debug("controller.LogoutRoom %+v", req)
- // 处理业务逻辑
- if !checkSign(req.Signature, req.Timestamp, req.Nonce) {
- log.Error("controller.LogoutRoom 校验失败 %+v", req)
- return
- }
- userId, err := strconv.Atoi(req.User_account)
- if err != nil {
- log.Error("controller.LogoutRoom user_account strconv.Atoi err %v", err)
- return
- }
- roomId, err := strconv.Atoi(req.Room_id)
- if err != nil {
- log.Error("controller.LogoutRoom room_id strconv.Atoi err %v", err)
- return
- }
- // 离开房间
- manager.ExitRoomNotify(userId, roomId)
- c.String(http.StatusOK, "success")
- return
- }
- // 流创建回调
- func StreamCreate(c *gin.Context) {
- var req Request_StreamCreate
- if err := c.ShouldBind(&req); err != nil {
- log.Error("callback.StreamCreate params err %v", err)
- return
- }
- log.Debug("controller.StreamCreate %+v", req)
- // 处理业务逻辑
- if !checkSign(req.Signature, req.Timestamp, req.Nonce) {
- log.Error("controller.StreamCreate 校验失败 %+v", req)
- return
- }
- userId, err := strconv.Atoi(req.User_id)
- if err != nil {
- log.Error("controller.StreamCreate user_id strconv.Atoi err %v", err)
- return
- }
- roomId, err := strconv.Atoi(req.Room_id)
- if err != nil {
- log.Error("controller.StreamCreate room_id strconv.Atoi err %v", err)
- return
- }
- // 上麦通知
- manager.OnTheMicNotify(userId, roomId, req.Stream_id)
- c.String(http.StatusOK, "success")
- return
- }
- // 流关闭回调
- func StreamClose(c *gin.Context) {
- var req Request_StreamClose
- if err := c.ShouldBind(&req); err != nil {
- log.Error("callback.StreamClose params err %v", err)
- return
- }
- log.Debug("controller.StreamClose %+v", req)
- // 处理业务逻辑
- if !checkSign(req.Signature, req.Timestamp, req.Nonce) {
- log.Error("controller.StreamClose 校验失败 %+v", req)
- return
- }
- userId, err := strconv.Atoi(req.User_id)
- if err != nil {
- log.Error("controller.StreamClose user_id strconv.Atoi err %v", err)
- return
- }
- roomId, err := strconv.Atoi(req.Room_id)
- if err != nil {
- log.Error("controller.StreamClose room_id strconv.Atoi err %v", err)
- return
- }
- if userId < 0 {
- userId *= -1
- }
- // 下麦
- manager.OffTheMicNotify(userId, roomId, req.Stream_id)
- c.String(http.StatusOK, "success")
- return
- }
- // 校验
- func checkSign(signature, timestamp, nonce string) bool {
- var list = []string{config.Server.Zego.Callbacksecret, nonce, timestamp}
- // 参数值按字典降序排序
- sort.SliceStable(list, func(i, j int) bool {
- return list[i] < list[j]
- })
- data := strings.Join(list, "")
- sign := hex.EncodeToString(public.Sha1([]byte(data)))
- // log.Debug("controller.checkSign data=%s sign=%s signature=%s", data, sign, signature)
- return sign == signature
- }
|