121 lines
2.4 KiB
Go
121 lines
2.4 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"encoding/json"
|
||
|
"etrismartfarmpoccontroller/constants"
|
||
|
"etrismartfarmpoccontroller/devicemanager"
|
||
|
"etrismartfarmpoccontroller/router"
|
||
|
"fmt"
|
||
|
"io/ioutil"
|
||
|
"net/http"
|
||
|
)
|
||
|
|
||
|
// func runBootstrap() {
|
||
|
// l, err := net.NewListenUDP("udp4", "", net.WithHeartBeat(time.Second*5))
|
||
|
// if err != nil {
|
||
|
// log.Println(err)
|
||
|
// return
|
||
|
// }
|
||
|
// defer l.Close()
|
||
|
|
||
|
// init := false
|
||
|
// minTimeout := time.Second * 5
|
||
|
// timeout := minTimeout
|
||
|
|
||
|
// d := func() {
|
||
|
// s := udp.NewServer(udp.WithTransmission(time.Second, timeout/2, 2))
|
||
|
// var wg sync.WaitGroup
|
||
|
// defer wg.Wait()
|
||
|
// defer s.Stop()
|
||
|
// wg.Add(1)
|
||
|
// go func() {
|
||
|
// defer wg.Done()
|
||
|
// s.Serve(l)
|
||
|
// }()
|
||
|
|
||
|
// ctx, cancel := context.WithTimeout(context.Background(), timeout)
|
||
|
// defer cancel()
|
||
|
|
||
|
// req, err := client.NewGetRequest(ctx, "/bs") /* msg.Option{
|
||
|
// ID: msg.URIQuery,
|
||
|
// Value: []byte("rt=oic.wk.d"),
|
||
|
// }*/
|
||
|
// if err != nil {
|
||
|
// panic(fmt.Errorf("cannot create discover request: %w", err))
|
||
|
// }
|
||
|
|
||
|
// req.SetMessageID(udpmessage.GetMID())
|
||
|
// req.SetType(udpmessage.NonConfirmable)
|
||
|
// defer pool.ReleaseMessage(req)
|
||
|
|
||
|
// err = s.DiscoveryRequest(req, bootstrapAddr, func(cc *client.ClientConn, resp *pool.Message) {
|
||
|
// b, err := ioutil.ReadAll(resp.Body())
|
||
|
// if err != nil {
|
||
|
// panic(err)
|
||
|
// }
|
||
|
// fmt.Println(string(b))
|
||
|
// init = true
|
||
|
// })
|
||
|
// if err != nil {
|
||
|
// panic(err)
|
||
|
// }
|
||
|
// }
|
||
|
// for {
|
||
|
// d()
|
||
|
// if init {
|
||
|
// break
|
||
|
// }
|
||
|
// }
|
||
|
// }
|
||
|
|
||
|
func register() error {
|
||
|
// Controller 이름을 읽어옴
|
||
|
payload := map[string]string{}
|
||
|
payload["cname"] = constants.Config["cname"]
|
||
|
fmt.Println(constants.Config["cname"])
|
||
|
b, err := json.Marshal(payload)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// Controller 등록 메시지 송신
|
||
|
resp, err := http.Post(
|
||
|
fmt.Sprintf("http://%s/%s", constants.Config["serverAddr"], "controllers"),
|
||
|
"application/json",
|
||
|
bytes.NewReader(b),
|
||
|
)
|
||
|
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// 응답 메시지 수신
|
||
|
b, err = ioutil.ReadAll(resp.Body)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
json.Unmarshal(b, &payload)
|
||
|
|
||
|
// 등록 후 생성된 Controller ID 저장
|
||
|
constants.Set("cid", payload["cid"])
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func main() {
|
||
|
|
||
|
if constants.Config["cid"] == "" {
|
||
|
err := register()
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
run, _ := devicemanager.NewManager()
|
||
|
run()
|
||
|
|
||
|
http.ListenAndServe(":4000", router.NewRouter())
|
||
|
}
|