diff --git a/.gitignore b/.gitignore index 9f11b75..4df69a3 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .idea/ +*.exe diff --git a/helper.go b/helper.go new file mode 100644 index 0000000..b8c3ce1 --- /dev/null +++ b/helper.go @@ -0,0 +1,40 @@ +package main + +import ( + "github.com/gofiber/fiber/v2" + "time" +) + +type StatusResult struct { + Code string `json:"code"` + Message string `json:"msg"` + Scene string `json:"scene,omitempty"` + SequenceId int `json:"sequenceId,omitempty"` + Timestamp int64 `json:"timestamp"` +} + +func failureResponse(ctx *fiber.Ctx, code string, msg string, stat int) error { + ctx.Response().SetStatusCode(stat) + var ret = make(map[string]interface{}) + ret["status"] = StatusResult{Code: code, Message: msg, Timestamp: time.Now().Unix()} + return ctx.JSON(ret) +} + +func successResponse(ctx *fiber.Ctx, msg string) error { + var ret = make(map[string]interface{}) + ret["status"] = StatusResult{Code: "0", Message: msg, Timestamp: time.Now().Unix()} + return ctx.JSON(ret) +} + +func successResponseEx(ctx *fiber.Ctx, msg string, scene string, seq int) error { + var ret = make(map[string]interface{}) + ret["status"] = StatusResult{ + Code: "0", + Message: msg, + Timestamp: time.Now().Unix(), + SequenceId: seq, + Scene: scene, + } + + return ctx.JSON(ret) +} diff --git a/main.go b/main.go index 25ac8d8..c3dbaa7 100644 --- a/main.go +++ b/main.go @@ -19,7 +19,7 @@ var rootCmd = &cobra.Command{ func init() { cobra.OnInitialize(initConfig) rootCmd.PersistentFlags().StringVarP(&listenAddr, "listen", "L", ":3000", "Service listen address") - rootCmd.AddCommand(serveCmd, helpCmd) + rootCmd.AddCommand(serveCmd) } func initConfig() { @@ -46,14 +46,6 @@ var serveCmd = &cobra.Command{ }, } -var helpCmd = &cobra.Command{ - Use: "help", - Short: "Show help message", - Run: func(cmd *cobra.Command, args []string) { - fmt.Println("==================== HELP =========================") - }, -} - func main() { if err := rootCmd.Execute(); err != nil { fmt.Println(err) diff --git a/recog.go b/recog.go index f95593c..c31289a 100644 --- a/recog.go +++ b/recog.go @@ -1,7 +1,28 @@ package main -import "github.com/gofiber/fiber/v2" +import ( + "github.com/gofiber/fiber/v2" +) + +type TestCommand struct { + Command string `json:"cmd"` + SequenceId int `json:"sequenceId"` +} + +var currentTest *TestCommand func setTestCmd(c *fiber.Ctx) error { - return c.SendString("OK") + var testCmd TestCommand + if err := c.BodyParser(&testCmd); nil != err { + return failureResponse(c, "-1", err.Error(), 400) + } else if nil == currentScene { + return failureResponse(c, "1", "not in a working scene", 400) + } else { + currentTest = &testCmd + return successResponse(c, "Updated successfully.") + } +} + +func init() { + currentTest = nil } diff --git a/scene.go b/scene.go index 096f047..8a95879 100644 --- a/scene.go +++ b/scene.go @@ -1,15 +1,71 @@ 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 { - 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 { - return c.SendString("OK") + currentScene = nil + return successResponse(c, "Updated successfully.") } 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 }