package debugger import ( "Wine-Server/utils" "Wine-Server/utils/tables" "github.com/gin-gonic/gin" "github.com/gorilla/websocket" ) func broadcastHandler(ctx *gin.Context) { ctx.JSON(utils.HttpOk, utils.Success(nil)) } func keepAlive(conn *websocket.Conn) { _ = conn.WriteJSON(utils.WsEvent("pon", nil)) } func listDevices(conn *websocket.Conn) { result := utils.JsonType{} for seq, device := range utils.SellerDevices { table := tables.DeviceTable{Id: seq} _ = table.Get() result[seq] = utils.JsonType{ "seq": seq, "online": device.Online, "location": table.Addr, "vpp1": table.Wines[0].Vpp, "vpp2": table.Wines[1].Vpp, "vpp3": table.Wines[2].Vpp, "vpp4": table.Wines[3].Vpp, } } _ = conn.WriteJSON(utils.WsEvent("devices", result)) } func setDebug(conn *websocket.Conn, data any) { var param debugParam err := utils.AnyTrans(data, ¶m) if err != nil { _ = conn.WriteJSON(utils.WsError("params error")) return } if device, exist := utils.SellerDevices[param.Seq]; exist { if device.Online { _ = device.Conn.WriteJSON(utils.WsEvent("setDebug", param.Debug)) return } _ = conn.WriteJSON(utils.WsError("device offline")) return } _ = conn.WriteJSON(utils.WsError("no such device")) } func openGate(conn *websocket.Conn, who string, data any) { var param openParam err := utils.AnyTrans(data, ¶m) if err != nil { _ = conn.WriteJSON(utils.WsError("params error")) return } if device, exist := utils.SellerDevices[param.Seq]; exist { if device.Online { var prefix string if param.Kind == "Changing" { prefix = "Change" } else if param.Kind == "Fixing" { prefix = "Fix" } else { utils.Logger.Printf("unrecognized open type: %s\n", param.Kind) _ = conn.WriteJSON(utils.WsEvent("authCode", utils.Fail("error open type"))) return } key := utils.Format("%s_%s_%s", prefix, param.Seq, who) code, err := utils.Redis.Get(utils.WxPayCli, key).Result() if err != nil { code = utils.RandomString(6, utils.NumberPatten) utils.Redis.Set(utils.WxPayCli, key, code, utils.Duration(30)) } else { utils.Redis.Expire(utils.WxPayCli, key, utils.Duration(30)) } _ = device.Conn.WriteJSON(utils.WsEvent("openGate", utils.JsonType{ "type": param.Kind, "user_type": "debugger", "user_id": who, })) _ = conn.WriteJSON(utils.WsEvent("authCode", utils.Success(code))) return } _ = conn.WriteJSON(utils.WsError("device offline")) return } _ = conn.WriteJSON(utils.WsError("no such device")) } func setLocation(conn *websocket.Conn, data any) { var param locationParam err := utils.AnyTrans(data, ¶m) if err != nil { _ = conn.WriteJSON(utils.WsError("params error")) return } table := tables.DeviceTable{Id: param.Seq} _ = table.Get() err = table.Update(utils.JsonType{"addr": param.Loc}) if err != nil { utils.Logger.Printf("update location failed, device[%s], addr[%s], error: %s\n", param.Seq, param.Loc, err) _ = conn.WriteJSON(utils.WsError("update location failed")) } _ = conn.WriteJSON(utils.WsEvent("locationUpdated", nil)) } func setVpp(conn *websocket.Conn, data any) { var param vppParam err := utils.AnyTrans(data, ¶m) if err != nil { _ = conn.WriteJSON(utils.WsError("params error")) return } table := tables.DeviceTable{Id: param.Seq} _ = table.Get() err = table.Update(utils.JsonType{utils.Format("vpp%d", param.Index+1): param.Value}) if err != nil { utils.Logger.Printf( "update location failed, device[%s], vpp%d[%s], error: %s\n", param.Seq, param.Index, param.Value, err, ) _ = conn.WriteJSON(utils.WsError("update vpp failed")) } if device, exist := utils.SellerDevices[param.Seq]; exist { if device.Online { _ = device.Conn.WriteJSON(utils.WsEvent("vppUpdate", utils.JsonType{ "index": param.Index, "value": param.Value, })) return } _ = conn.WriteJSON(utils.WsError("device offline")) return } _ = conn.WriteJSON(utils.WsError("no such device")) }