瀏覽代碼

first commit

lijian 2 年之前
父節點
當前提交
369886ada1

+ 1 - 0
pkg/klink/klink.go

@@ -0,0 +1 @@
+package klink

+ 1 - 0
pkg/klink/klink_test.go

@@ -0,0 +1 @@
+package klink

+ 1 - 0
pkg/rpcs/shadowservice.go

@@ -0,0 +1 @@
+package rpcs

+ 0 - 30
pkg/token/token_test.go

@@ -1,30 +0,0 @@
-package token
-
-import (
-	"encoding/hex"
-	"testing"
-)
-
-func TestTokenHelper(t *testing.T) {
-	helper := NewHelper("192.168.175.60:6379")
-
-	testid := uint64(2)
-
-	token, err := helper.GenerateToken(testid)
-	if err != nil {
-		t.Error(err)
-	}
-	encodedStr := hex.EncodeToString(token)
-	de, _ := hex.DecodeString(encodedStr)
-	t.Log(encodedStr, de, token)
-	err = helper.ValidateToken(testid, token)
-	if err != nil {
-		t.Error(err)
-	}
-
-	// err = helper.ClearToken(testid)
-	// if err != nil {
-	// 	t.Error(err)
-	// }
-
-}

+ 0 - 74
services/devicemanager/manager_test.go

@@ -1,74 +0,0 @@
-package main
-
-import (
-	"sparrow/pkg/rpcs"
-	"testing"
-)
-
-func TestDeviceManager(t *testing.T) {
-	mgr := NewDeviceManager("localhost:6379")
-
-	deviceid := uint64(123456)
-
-	args1 := rpcs.ArgsGenerateDeviceAccessToken{
-		Id: deviceid,
-	}
-	reply1 := rpcs.ReplyGenerateDeviceAccessToken{}
-	err := mgr.GenerateDeviceAccessToken(args1, &reply1)
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	token := reply1.AccessToken
-
-	args2 := rpcs.ArgsValidateDeviceAccessToken{
-		Id:          deviceid,
-		AccessToken: token,
-	}
-	reply2 := rpcs.ReplyValidateDeviceAccessToken{}
-	err = mgr.ValidateDeviceAccessToken(args2, &reply2)
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	args3 := rpcs.ArgsGetOnline{
-		Id:                deviceid,
-		ClientIP:          "",
-		AccessRPCHost:     "",
-		HeartbeatInterval: 10,
-	}
-	reply3 := rpcs.ReplyGetOnline{}
-	err = mgr.GetOnline(args3, &reply3)
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	args4 := rpcs.ArgsHeartBeat{
-		Id: deviceid,
-	}
-	reply4 := rpcs.ReplyHeartBeat{}
-	err = mgr.HeartBeat(args4, &reply4)
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	args5 := rpcs.ArgsGetDeviceStatus{
-		Id: deviceid,
-	}
-	reply5 := rpcs.ReplyGetDeviceStatus{}
-	err = mgr.GetDeviceStatus(args5, &reply5)
-	if err != nil {
-		t.Fatal(err)
-	}
-	t.Log(reply5)
-
-	args6 := rpcs.ArgsGetOffline{
-		Id: deviceid,
-	}
-	reply6 := rpcs.ReplyGetOffline{}
-	err = mgr.GetOffline(args6, &reply6)
-	if err != nil {
-		t.Fatal(err)
-	}
-
-}

+ 1 - 0
services/shadowservice/main.go

@@ -0,0 +1 @@
+package shadowservice

+ 10 - 0
services/shadowservice/server.go

@@ -0,0 +1,10 @@
+package shadowservice
+
+import "github.com/gogf/gf/encoding/gjson"
+
+type Server interface {
+	// SaveStatus 存储设备状态
+	SaveStatus(deviceCode string, data *gjson.Json) error
+	// GetStatus 获取设备状态
+	GetStatus(deviceCode string) (*gjson.Json, error)
+}

+ 1 - 0
services/shadowservice/server_test.go

@@ -0,0 +1 @@
+package main

+ 1 - 0
services/shadowservice/shadow_doc.go

@@ -0,0 +1 @@
+package shadowservice

二進制
tests/device/device


+ 56 - 55
tests/device/device.go

@@ -4,10 +4,13 @@ import (
 	"encoding/hex"
 	"encoding/json"
 	"fmt"
+	"github.com/gogf/gf/encoding/gjson"
 	"log"
+	"math/rand"
 	"net"
 	"os"
 	"sparrow/pkg/coap"
+	"sparrow/pkg/klink"
 	"sparrow/pkg/protocol"
 	"sparrow/pkg/server"
 	"sparrow/pkg/tlv"
@@ -167,36 +170,46 @@ func (d *Device) DoLogin() error {
 func (d *Device) reportStatus(client *MQTT.Client) {
 	for {
 		time.Sleep(2 * time.Second)
-		payloadHead := protocol.DataHead{
-			Flag:      0,
-			Timestamp: uint64(time.Now().Unix() * 1000),
+		rand.Seed(time.Now().UnixNano())
+		r := rand.Intn(100)
+		dd := &klink.DevSend{
+			Action:      "devSend",
+			MsgId:       1,
+			SubDeviceId: "1",
+			Timestamp:   time.Now().Unix(),
+			DeviceCode:  "5566",
+			Data: &klink.DevSendData{
+				Cmd:    "powerOn",
+				Params: gjson.New(fmt.Sprintf(`{"power":%d}`, r)),
+			},
 		}
-		param := []interface{}{uint16(1), uint16(2)}
-		params, err := tlv.MakeTLVs(param)
+		payload, err := dd.Marshal()
 		if err != nil {
-			fmt.Println(err)
-			return
-		}
-		sub := protocol.SubData{
-			Head: protocol.SubDataHead{
-				SubDeviceid: uint16(1),
-				PropertyNum: uint16(1),
-				ParamsCount: uint16(len(params)),
-			},
-			Params: params,
+			continue
 		}
+		client.Publish("s", 1, false, payload)
+	}
 
-		status := protocol.Data{
-			Head:    payloadHead,
-			SubData: []protocol.SubData{},
+}
+func (d *Device) reportStatus2(client *MQTT.Client) {
+	for {
+		time.Sleep(2 * time.Second)
+		rand.Seed(time.Now().UnixNano())
+		r := rand.Intn(100)
+		dd := &klink.DevSend{
+			Action:      "devSend",
+			MsgId:       1,
+			SubDeviceId: "1",
+			Timestamp:   time.Now().Unix(),
+			DeviceCode:  "5566",
+			Data: &klink.DevSendData{
+				Cmd:    "status",
+				Params: gjson.New(fmt.Sprintf(`{"fanlevel":%d}`, r)),
+			},
 		}
-
-		status.SubData = append(status.SubData, sub)
-
-		payload, err := status.Marshal()
+		payload, err := dd.Marshal()
 		if err != nil {
-			fmt.Println(err)
-			return
+			continue
 		}
 		client.Publish("s", 1, false, payload)
 	}
@@ -255,29 +268,24 @@ func (d *Device) coapReportStatus(conn *net.UDPConn) {
 
 func (d *Device) reportEvent(client *MQTT.Client) {
 	for {
-		time.Sleep(3 * time.Second)
-
-		event := protocol.Event{}
+		time.Sleep(2 * time.Second)
 
-		params, err := tlv.MakeTLVs([]interface{}{"hello event."})
-		if err != nil {
-			fmt.Println(err)
-			return
+		dd := &klink.DevSend{
+			Action:      "devSend",
+			MsgId:       1,
+			SubDeviceId: "1",
+			Timestamp:   time.Now().Unix(),
+			DeviceCode:  "5566",
+			Data: &klink.DevSendData{
+				Cmd:    "temperatureEvent",
+				Params: gjson.New(`{"temperature":100, "reason": 0}`),
+			},
 		}
-
-		event.Params = params
-		event.Head.No = 1
-		event.Head.SubDeviceid = 1
-		event.Head.ParamsCount = uint16(len(params))
-
-		payload, err := event.Marshal()
+		payload, err := dd.Marshal()
 		if err != nil {
-			fmt.Println(err)
-			return
+			continue
 		}
-
 		client.Publish("e", 1, false, payload)
-
 	}
 }
 
@@ -300,20 +308,11 @@ func (d *Device) statusHandler(client *MQTT.Client, msg MQTT.Message) {
 }
 
 func (d *Device) commandHandler(client *MQTT.Client, msg MQTT.Message) {
-	cmd := protocol.Command{}
-
-	err := cmd.UnMarshal(msg.Payload())
+	j, err := gjson.DecodeToJson(msg.Payload())
 	if err != nil {
-		fmt.Println(err)
-		return
-	}
-
-	switch cmd.Head.No {
-	case commonCmdGetStatus:
-		d.reportStatus(client)
-	default:
-		fmt.Printf("received command : %v: %v", cmd.Head.No, cmd.Params)
+		panic("错误的报文格式")
 	}
+	fmt.Printf("%v", j.MustToJsonString())
 }
 
 func (d *Device) messageHandler(client *MQTT.Client, msg MQTT.Message) {
@@ -389,8 +388,10 @@ func (d *Device) doMQTTAccess() error {
 		}
 	}()
 	go d.reportStatus(c)
+	go d.reportStatus2(c)
+	go d.reportEvent(c)
 	// we just pause here to wait for messages
-	 <-make(chan int)
+	<-make(chan int)
 
 	defer c.Disconnect(250)
 

+ 1 - 1
tests/device/main.go

@@ -6,7 +6,7 @@ import (
 )
 
 var (
-	testURL        = flag.String("url", "http://106.14.63.46:18100", "login url")
+	testURL        = flag.String("url", "http://192.168.0.167:8088", "login url")
 	testProductKey = flag.String("productkey", "958daf8b3a533f0d9516ac8fd17ef0cb06b439e664787a2a89608a10eeee8eb3c35c82c505d19f8a4417e530de0678fd", "product key")
 	testProtocol   = flag.String("protocol", "mqtt", "access protocol")
 )