Files
pig-farm-controller/internal/app/service/transport/chirp_stack.go
2025-09-15 23:45:36 +08:00

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")
}