This commit is contained in:
@@ -1,123 +0,0 @@
|
||||
package device
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"net"
|
||||
"net/http"
|
||||
"strings"
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"github.com/gorilla/websocket"
|
||||
)
|
||||
|
||||
func TestDevice(t *testing.T) {
|
||||
t.Skip("skip test")
|
||||
/* deviceManager := NewDeviceManager(10, 3)
|
||||
|
||||
deviceManager.OnDeviceOnline = func(userID int64, deviceID, session string) {
|
||||
fmt.Printf("✅ 设备 %s (用户 %d) 上线\n", deviceID, userID)
|
||||
}
|
||||
|
||||
deviceManager.OnDeviceOffline = func(userID int64, deviceID, session string) {
|
||||
fmt.Printf("❌ 设备 %s (用户 %d) 下线\n", deviceID, userID)
|
||||
}
|
||||
|
||||
deviceManager.OnDeviceKicked = func(userID int64, deviceID, session string, operator Operator) {
|
||||
fmt.Printf("⚠️ 设备 %s (用户 %d) 被踢下线\n", deviceID, userID)
|
||||
}
|
||||
deviceManager.OnMessage = func(userID int64, deviceID, session string, message string) {
|
||||
log.Printf("✅收到消息: 设备 %s (用户 %d) 内容: %s,sesion: %s\n", deviceID, userID, message, session)
|
||||
}
|
||||
engine := gin.Default()
|
||||
engine.GET("/ws/:userid/:device_number", func(c *gin.Context) {
|
||||
//根据Authorization获取session
|
||||
authorization := c.GetHeader("Authorization")
|
||||
userid, err := strconv.ParseInt(c.Param("userid"), 10, 64)
|
||||
if err != nil {
|
||||
t.Errorf("get user id err:%v", err)
|
||||
return
|
||||
}
|
||||
deviceNumber := c.Param("device_number")
|
||||
deviceManager.AddDevice(c, authorization, userid, deviceNumber, 3)
|
||||
return
|
||||
})
|
||||
go func() {
|
||||
err := http.ListenAndServe(":8081", engine)
|
||||
if err != nil {
|
||||
t.Fatalf("engine start failed: %v", err)
|
||||
}
|
||||
}()
|
||||
*/
|
||||
h := http.Header{}
|
||||
h.Add("Authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJTZXNzaW9uSWQiOiIwMTk0Y2ZiNy1hYjY0LTdjYjMtODUzYi03ZGU5YTAzNWRlZTgiLCJVc2VySWQiOjI5LCJleHAiOjE3MzkyNTY1MDgsImlhdCI6MTczODY1MTcwOH0.BGKT5-hongJPZrA_yAb6cf6go5iDR8T9uu1ZxUg8HDw")
|
||||
|
||||
mutex := sync.Mutex{}
|
||||
serverURL := fmt.Sprintf("ws://localhost:8080/v1/app/ws/%d/%s", 29, "15502502051") // 假设 userID 为 1001,设备ID 为 deviceA
|
||||
|
||||
// 建立 WebSocket 连接
|
||||
conn, resp, err := websocket.DefaultDialer.Dial(serverURL, h)
|
||||
if err != nil {
|
||||
all, err := io.ReadAll(resp.Body)
|
||||
t.Fatalf("websocket dial failed: %v:%s", err, string(all))
|
||||
}
|
||||
// 启动一个 goroutine 来读取服务器消息
|
||||
go func() {
|
||||
for {
|
||||
_, msg, err := conn.ReadMessage()
|
||||
if err != nil {
|
||||
if errors.Is(err, net.ErrClosed) || strings.Contains(err.Error(), "use of closed network connection") {
|
||||
log.Println("连接已关闭")
|
||||
return
|
||||
}
|
||||
log.Printf("接收消息失败: %v", err)
|
||||
return
|
||||
}
|
||||
fmt.Printf("收到来自服务器的消息: %s\n", msg)
|
||||
}
|
||||
}()
|
||||
|
||||
//发送心跳
|
||||
go func() {
|
||||
ticker := time.NewTicker(time.Second * 5)
|
||||
defer ticker.Stop()
|
||||
|
||||
for range ticker.C {
|
||||
mutex.Lock()
|
||||
err := conn.WriteMessage(websocket.TextMessage, []byte("ping"))
|
||||
mutex.Unlock()
|
||||
|
||||
if err != nil {
|
||||
if strings.Contains(err.Error(), "use of closed network connection") {
|
||||
log.Println("连接已关闭")
|
||||
return
|
||||
}
|
||||
t.Errorf("websocket 写入失败: %v", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
updateSubscribe, _ := json.Marshal(map[string]interface{}{
|
||||
"method": "test_method",
|
||||
})
|
||||
|
||||
//发送一条消息
|
||||
mutex.Lock()
|
||||
err = conn.WriteMessage(websocket.TextMessage, updateSubscribe)
|
||||
mutex.Unlock()
|
||||
if err != nil {
|
||||
t.Errorf("websocket write failed: %v", err)
|
||||
}
|
||||
|
||||
time.Sleep(time.Second * 20)
|
||||
conn.Close()
|
||||
time.Sleep(time.Second * 5)
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user