main.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package main
  2. import (
  3. "./lib"
  4. "encoding/json"
  5. "log"
  6. "os"
  7. )
  8. type HmDTC struct {
  9. conf *lib.Config
  10. logger *log.Logger
  11. server *lib.Server
  12. camera *lib.Camera
  13. }
  14. func (hm *HmDTC) init() {
  15. hm.logger = log.New(os.Stderr, "[HM-DTC] ", log.Ldate | log.Ltime | log.Lshortfile | log.Lmsgprefix)
  16. hm.camera = &lib.Camera{}
  17. hm.server = &lib.Server{}
  18. hm.readConfig()
  19. hm.camera.Init(hm.conf.CameraHost, hm.conf.CameraPort, hm.conf.CKA, hm.logger)
  20. hm.server.Init(hm.conf.ServerHost, hm.conf.ServerPort, hm.conf.SKA, hm.logger, hm.conf.CameraID)
  21. }
  22. func (hm *HmDTC) readConfig() {
  23. defaultConfig := lib.Config{
  24. SKA: 60,
  25. CKA: 60,
  26. CameraID: "undefined-device",
  27. CameraHost: "192.168.1.201",
  28. CameraPort: 554,
  29. ServerHost: "192.168.1.6",
  30. ServerPort: 6010,
  31. }
  32. file, err := os.Open(lib.ConfigFile)
  33. if err != nil {
  34. hm.logger.Print("File open error:", err)
  35. hm.conf = &defaultConfig
  36. return
  37. }
  38. defer func() {
  39. err = file.Close()
  40. if err != nil {
  41. hm.logger.Print("Fail to close __config file:", err)
  42. }
  43. }()
  44. decoder := json.NewDecoder(file)
  45. var config lib.Config
  46. err = decoder.Decode(&config)
  47. if err != nil {
  48. hm.logger.Print("Json decode error:", err)
  49. hm.conf = &defaultConfig
  50. return
  51. }
  52. hm.conf = &config
  53. }
  54. func (hm *HmDTC) run() {
  55. defer func() {
  56. hm.server.Stop()
  57. hm.camera.Stop()
  58. }()
  59. upload := make(chan bool)
  60. stream := make(chan []byte)
  61. //hm.camera.Run(stream)
  62. hm.server.Run(upload)
  63. uploading := false
  64. hm.logger.Print("HuiMv Data Transport Center is running...")
  65. for {
  66. select {
  67. case image := <-stream:
  68. if uploading {
  69. go hm.server.Emit("image", image)
  70. }
  71. case uploading = <-upload:
  72. if uploading {
  73. hm.camera.Run(stream)
  74. } else {
  75. hm.camera.Stop()
  76. }
  77. }
  78. }
  79. }
  80. func main() {
  81. hm := HmDTC{}
  82. defer func(hm *HmDTC) {
  83. hm.server.Stop()
  84. hm.camera.Stop()
  85. }(&hm)
  86. hm.init() // TODO: uart
  87. hm.run()
  88. select {}
  89. }