package main import ( "log" "net" "os" "strconv" "time" "github.com/robfig/cron" ) var err error var bs = []byte(` kind: Namespace metadata: #这是注释 name: test list: - {id: 1,name: 张三,age: 12} - {id: 2,name: 李四,age: 13} data: - ["男厕位", 1] - ["男厕位", 2] --- kind: bbb name: aaa`) /* Out put {"kind":"Namespace","metadata":{"name":"test"}} {"kind":"bbb","name":"aaa"} */ // func example() { // reader := bytes.NewReader(bs) // ext := runtime.RawExtension{} // d := yaml.NewYAMLOrJSONDecoder(reader, 4096) // //循环解析 yaml中---是分隔的意思,既一个yaml文件包含多个不同发json对象 // // for { // if err := d.Decode(&ext); err != nil { // if err == io.EOF { // return // } // log.Println("parse err:",err) // return // } // log.Println(string(ext.Raw)) // // } // } func main() { // example() // configfile, err := os.Open("gateway.yaml") // check(err) // defer configfile.Close() // configData,err := ioutil.ReadAll(configfile) // check(err) // reader := bytes.NewReader(configData) // ext := runtime.RawExtension{} // d := yaml.NewYAMLOrJSONDecoder(reader, 4096) // if err := d.Decode(&conf); err != nil { // if err == io.EOF { // return // } // log.Println("parse err:",err) // return // } // log.Println(string(ext.Raw)) // err = json.NewDecoder(string(ext.Raw)).Decode(&conf) // check(err) // log.Println(conf.OPENTCPSETVER) go gw_router() go serial_run() c := cron.New() //获取数据防抖处理时间配置 if conf.SYNEXTENSIONTIME { go getConf() } //有线方案,发送全部数据,包括gateway配置 if conf.PROCATEGORY == PRO_CATEGORY_WIRED { go send_data(CODE1001) } //一分钟一次 同步数据 c.AddFunc("0, *, *, *, *, *", func() { if conf.SYNDATA { if conf.PROCATEGORY == PRO_CATEGORY_WIRED { send_data(CODE1001) } else if conf.PROCATEGORY == PRO_CATEGORY_WIRELESS { yunhorn_hb_dpark_v1() } } }) // c.AddFunc("*/10, *, *, *, *, *", func() { // devices := []Device{} // log.Println(string(build_data(1001,devices))) // }) c.AddFunc("*/30, *, *, *, *, *", func() { //dpark客户需要拉取api获取数据防抖时间配置 if conf.SYNEXTENSIONTIME { getConf() } }) c.AddFunc("0, */10, *, *, *, *", savedata_cron) c.AddFunc("0, 0, 0, *, *, *", insertdata) c.AddFunc("0, 0, *, *, *, *", get_weather) //定时更新today字段,当前日期 c.AddFunc("0, *, *, *, *, *", func() { t := time.Now() today = t.Format("2006-01-02") }) c.Start() if conf.OPENTCPSETVER { go record_log_channel() tcp_port := strconv.Itoa(conf.TCPPORT) listener, err := net.Listen("tcp", "0.0.0.0:"+tcp_port) if err != nil { log.Printf("listen fail, err: %v\n", err) return } for { conn, err := listener.Accept() loragwMap.Store(conn.RemoteAddr().String(), conn) if err != nil { log.Printf("accept fail, err: %v\n", err) continue } // go process(conn) go handleConn(conn) } } else { //如果不启动tcpserver,则需要执行这里 让程序不退出 select {} } } func check(err error) { if err != nil { log.Println(err) os.Exit(1) } }