|
@ -1,15 +1,71 @@ |
|
|
package main |
|
|
package main |
|
|
|
|
|
|
|
|
import "github.com/gofiber/fiber/v2" |
|
|
|
|
|
|
|
|
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 { |
|
|
func setScene(c *fiber.Ctx) error { |
|
|
return c.SendString("OK") |
|
|
|
|
|
|
|
|
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 { |
|
|
func stopScene(c *fiber.Ctx) error { |
|
|
return c.SendString("OK") |
|
|
|
|
|
|
|
|
currentScene = nil |
|
|
|
|
|
return successResponse(c, "Updated successfully.") |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
func getStatus(c *fiber.Ctx) error { |
|
|
func getStatus(c *fiber.Ctx) error { |
|
|
return c.SendString("OK") |
|
|
|
|
|
|
|
|
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 |
|
|
} |
|
|
} |