53 lines
1.1 KiB
Go
53 lines
1.1 KiB
Go
package transport
|
|
|
|
import (
|
|
"io"
|
|
"net/http"
|
|
|
|
"git.huangwc.com/pig/pig-farm-controller/internal/infra/logs"
|
|
)
|
|
|
|
// ChirpStackListener 是一个监听器, 用于监听ChirpStack反馈的设备上行事件
|
|
type ChirpStackListener struct {
|
|
logger *logs.Logger
|
|
}
|
|
|
|
func NewChirpStackListener(logger *logs.Logger) *ChirpStackListener {
|
|
return &ChirpStackListener{
|
|
logger: logger,
|
|
}
|
|
}
|
|
|
|
func (c *ChirpStackListener) Handler() http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
b, err := io.ReadAll(r.Body)
|
|
if err != nil {
|
|
c.logger.Errorf("读取请求体失败: %v", err)
|
|
|
|
// TODO 直接崩溃不太合适
|
|
panic(err)
|
|
}
|
|
|
|
event := r.URL.Query().Get("event")
|
|
|
|
switch event {
|
|
case "up": // 链路上行事件
|
|
err = c.up(b)
|
|
if err != nil {
|
|
c.logger.Errorf("处理链路上行事件失败: %v", err)
|
|
|
|
// TODO 直接崩溃不太合适
|
|
panic(err)
|
|
}
|
|
default:
|
|
c.logger.Errorf("未知的ChirpStack事件: %s", event)
|
|
}
|
|
}
|
|
}
|
|
|
|
// up 处理链路上行事件
|
|
func (c *ChirpStackListener) up(data []byte) error {
|
|
// TODO implement me
|
|
panic("implement me")
|
|
}
|