sport_rec_demo
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

71 lines
1.9 KiB

package main
import (
"errors"
"github.com/gofiber/fiber/v2"
"net/url"
)
var currentScene *SceneCommand
type SceneCommand struct {
Scene string `json:"scene"`
PushUrl string `json:"pushUrl"`
CameraUrls []string `json:"cameraURls"`
}
func validateSceneCmd(cmd SceneCommand) error {
switch cmd.Scene {
case "pullUp", "standJump", "sitUps":
if len(cmd.CameraUrls) < 1 {
return errors.New("cameraUrls can not less than 1")
}
case "race":
if len(cmd.CameraUrls) < 2 {
return errors.New("cameraUrls can not less than 2")
}
default:
return errors.New("unknown scene type:" + cmd.Scene)
}
if u, e := url.Parse(cmd.PushUrl); nil != e {
return errors.New("invalid pushUrl:" + e.Error())
} else if u.Scheme != "http" && u.Scheme != "https" {
return errors.New("can not support pushUrl with " + u.Scheme)
}
return nil
}
func setScene(c *fiber.Ctx) error {
var sceneCmd SceneCommand
if err := c.BodyParser(&sceneCmd); nil != err {
return failureResponse(c, "-1", err.Error(), 400)
} else if nil != currentScene {
return failureResponse(c, "1", "A working scene is started", 400)
} else if err = validateSceneCmd(sceneCmd); nil != err {
return failureResponse(c, "2", err.Error(), 400)
} else {
currentScene = &sceneCmd
return successResponse(c, "Updated successfully.")
}
}
func stopScene(c *fiber.Ctx) error {
currentScene = nil
return successResponse(c, "Updated successfully.")
}
func getStatus(c *fiber.Ctx) error {
var scene = ""
var seq = 0
if nil != currentScene {
scene = currentScene.Scene
}
if nil != currentTest {
seq = currentTest.SequenceId
}
return successResponseEx(c, "success", scene, seq)
}
func init() {
currentScene = nil
}