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
|
|
}
|