|
@@ -1,27 +1,74 @@
|
|
|
package main
|
|
|
|
|
|
import (
|
|
|
+ "encoding/hex"
|
|
|
"fmt"
|
|
|
"net"
|
|
|
+ "os"
|
|
|
"sparrow/pkg/coap"
|
|
|
+ "sparrow/pkg/protocol"
|
|
|
+ "sparrow/pkg/tlv"
|
|
|
+ "time"
|
|
|
)
|
|
|
|
|
|
const url = "127.0.0.1:56883"
|
|
|
|
|
|
func main() {
|
|
|
- co, err := net.Dial("udp", url)
|
|
|
+ addr, err := net.ResolveUDPAddr("udp", url)
|
|
|
if err != nil {
|
|
|
- fmt.Printf("dial err %s", err.Error())
|
|
|
+ fmt.Println("Can't resolve address: ", err)
|
|
|
+ os.Exit(1)
|
|
|
+ }
|
|
|
+ conn, err := net.DialUDP("udp", nil, addr)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Can't dial: ", err)
|
|
|
+ os.Exit(1)
|
|
|
+ }
|
|
|
+ defer conn.Close()
|
|
|
+ token, _ := hex.DecodeString("1b00f92489298929")
|
|
|
+ payloadHead := protocol.DataHead{
|
|
|
+ Flag: 0,
|
|
|
+ Timestamp: uint64(time.Now().Unix() * 1000),
|
|
|
+ }
|
|
|
+ param1 := []interface{}{uint32(3), float32(1.2), int64(10)}
|
|
|
+ params1, err := tlv.MakeTLVs(param1)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println(err)
|
|
|
+ }
|
|
|
+ sub1 := protocol.SubData{
|
|
|
+ Head: protocol.SubDataHead{
|
|
|
+ SubDeviceid: uint16(1),
|
|
|
+ PropertyNum: uint16(1),
|
|
|
+ ParamsCount: uint16(len(params1)),
|
|
|
+ },
|
|
|
+ Params: params1,
|
|
|
}
|
|
|
- token := []byte{
|
|
|
- 0x1,
|
|
|
- 0x2,
|
|
|
- 0x3,
|
|
|
- 0x4,
|
|
|
- 0x5,
|
|
|
- 0x6,
|
|
|
- 0x7,
|
|
|
- 0x8,
|
|
|
+ param2 := []interface{}{uint32(4), int64(11)}
|
|
|
+ params2, err := tlv.MakeTLVs(param2)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println(err)
|
|
|
+ }
|
|
|
+ sub2 := protocol.SubData{
|
|
|
+ Head: protocol.SubDataHead{
|
|
|
+ SubDeviceid: uint16(1),
|
|
|
+ PropertyNum: uint16(2),
|
|
|
+ ParamsCount: uint16(len(params2)),
|
|
|
+ },
|
|
|
+ Params: params2,
|
|
|
+ }
|
|
|
+
|
|
|
+ payload := &protocol.Data{
|
|
|
+ Head: payloadHead,
|
|
|
+ SubData: []protocol.SubData{},
|
|
|
+ }
|
|
|
+ payload.SubData = append(payload.SubData, sub1)
|
|
|
+ payload.SubData = append(payload.SubData, sub2)
|
|
|
+
|
|
|
+ buf, err := payload.Marshal()
|
|
|
+ if err != nil {
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println(err)
|
|
|
+ }
|
|
|
}
|
|
|
req := &coap.BaseMessage{
|
|
|
Code: coap.POST,
|
|
@@ -29,12 +76,21 @@ func main() {
|
|
|
MessageID: 2,
|
|
|
//Token: []byte{0, 1, 0x2, 3, 4, 5, 6, 7, 8, 9, 1, 12, 12, 1, 2, 1, 2, 2},
|
|
|
Token: token,
|
|
|
- Payload: []byte("PAYLOAD"),
|
|
|
+ Payload: buf,
|
|
|
}
|
|
|
- //req.AddOption(coap.URIPath, "/topic/s")
|
|
|
+ req.AddOption(coap.URIPath, "/s")
|
|
|
bytes, err := req.Encode()
|
|
|
if err != nil {
|
|
|
fmt.Printf("dial err %s", err.Error())
|
|
|
}
|
|
|
- co.Write(bytes)
|
|
|
+ conn.Write(bytes)
|
|
|
+ msg := make([]byte, 1500)
|
|
|
+
|
|
|
+ _, err = conn.Read(msg)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ fmt.Println("Response:", string(msg))
|
|
|
+
|
|
|
}
|