-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmqtt.go
More file actions
45 lines (38 loc) · 867 Bytes
/
mqtt.go
File metadata and controls
45 lines (38 loc) · 867 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package fsconvert
import (
"bytes"
"io/fs"
"net"
proto "github.com/huin/mqtt"
"github.com/jeffallen/mqtt"
)
// FromMQTT creates a filesystem, filling it with the values published
// to a MQTT server under a specified topic.
func FromMQTT(address string, topic string) (fs.FS, error) {
var fsys FS
conn, err := net.Dial("tcp", address)
if err != nil {
return nil, err
}
c := mqtt.NewClientConn(conn)
err = c.Connect("", "")
if err != nil {
return nil, err
}
c.Subscribe([]proto.TopicQos{proto.TopicQos{Topic: "#", Qos: proto.QosAtMostOnce}})
/* {
var b bytes.Buffer
m := <-c.Incoming
m.Payload.WritePayload(&b)
fsys.WriteFile(m.TopicName, b.Bytes(), 0444)
} */
go func() {
for {
var b bytes.Buffer
m := <-c.Incoming
m.Payload.WritePayload(&b)
fsys.WriteFile(m.TopicName, b.Bytes(), 0444)
}
}()
return &fsys, nil
}