1
0
mirror of https://github.com/mainflux/mainflux.git synced 2025-04-27 13:48:49 +08:00
Mainflux.mainflux/coap/adapter.go

59 lines
1.2 KiB
Go
Raw Normal View History

package adapter
import (
"encoding/json"
"log"
"net"
"github.com/dustin/go-coap"
"github.com/mainflux/mainflux/writer"
broker "github.com/nats-io/go-nats"
"go.uber.org/zap"
)
type Observer struct {
conn *net.UDPConn
addr *net.UDPAddr
message *coap.Message
}
type CoAPAdapter struct {
obsMap map[string][]Observer
logger *zap.Logger
}
// NewCoAPAdapter creates new CoAP adapter struct
func NewCoAPAdapter(logger *zap.Logger) *CoAPAdapter {
ca := &CoAPAdapter{
logger: logger,
}
ca.obsMap = make(map[string][]Observer)
return ca
}
// Serve function starts CoAP server
func (ca *CoAPAdapter) Serve(addr string) error {
ca.logger.Info("Starting CoAP server", zap.String("address", addr))
return coap.ListenAndServe("udp", addr, ca.COAPServer())
}
// MsgHandler functions is a handler for messages recieved via NATS
func (ca *CoAPAdapter) MsgHandler(nm *broker.Msg) {
log.Printf("Received a message: %s\n", string(nm.Data))
// And write it into the database
m := writer.RawMessage{}
if len(nm.Data) > 0 {
if err := json.Unmarshal(nm.Data, &m); err != nil {
log.Println("Can not decode adapter msg")
return
}
}
log.Println("Calling obsTransmit()")
log.Println(m.Publisher, m.Protocol, m.Channel, m.Payload)
ca.obsTransmit(m)
}