123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- package main
- import (
- "./lib"
- "encoding/json"
- "log"
- "os"
- )
- type HmDTC struct {
- conf *lib.Config
- logger *log.Logger
- server *lib.Server
- camera *lib.Camera
- }
- func (hm *HmDTC) init() {
- hm.logger = log.New(os.Stderr, "[HM-DTC] ", log.Ldate | log.Ltime | log.Lshortfile | log.Lmsgprefix)
- hm.camera = &lib.Camera{}
- hm.server = &lib.Server{}
- hm.readConfig()
- hm.camera.Init(hm.conf.CameraHost, hm.conf.CameraPort, hm.conf.CKA, hm.logger)
- hm.server.Init(hm.conf.ServerHost, hm.conf.ServerPort, hm.conf.SKA, hm.logger, hm.conf.CameraID)
- }
- func (hm *HmDTC) readConfig() {
- defaultConfig := lib.Config{
- SKA: 60,
- CKA: 60,
- CameraID: "undefined-device",
- CameraHost: "192.168.1.201",
- CameraPort: 554,
- ServerHost: "192.168.1.6",
- ServerPort: 6010,
- }
- file, err := os.Open(lib.ConfigFile)
- if err != nil {
- hm.logger.Print("File open error:", err)
- hm.conf = &defaultConfig
- return
- }
- defer func() {
- err = file.Close()
- if err != nil {
- hm.logger.Print("Fail to close __config file:", err)
- }
- }()
- decoder := json.NewDecoder(file)
- var config lib.Config
- err = decoder.Decode(&config)
- if err != nil {
- hm.logger.Print("Json decode error:", err)
- hm.conf = &defaultConfig
- return
- }
- hm.conf = &config
- }
- func (hm *HmDTC) run() {
- defer func() {
- hm.server.Stop()
- hm.camera.Stop()
- }()
- upload := make(chan bool)
- stream := make(chan []byte)
- //hm.camera.Run(stream)
- hm.server.Run(upload)
- uploading := false
- hm.logger.Print("HuiMv Data Transport Center is running...")
- for {
- select {
- case image := <-stream:
- if uploading {
- go hm.server.Emit("image", image)
- }
- case uploading = <-upload:
- if uploading {
- hm.camera.Run(stream)
- } else {
- hm.camera.Stop()
- }
- }
- }
- }
- func main() {
- hm := HmDTC{}
- defer func(hm *HmDTC) {
- hm.server.Stop()
- hm.camera.Stop()
- }(&hm)
- hm.init() // TODO: uart
- hm.run()
- select {}
- }
|