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 }