huangguangrong 7 months ago
parent
commit
a1d2b20a5c

+ 15 - 0
.vscode/launch.json

@@ -0,0 +1,15 @@
+{
+    // 使用 IntelliSense 了解相关属性。 
+    // 悬停以查看现有属性的描述。
+    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
+    "version": "0.2.0",
+    "configurations": [
+        {
+            "name": "Launch Package",
+            "type": "go",
+            "request": "launch",
+            "mode": "auto",
+            "program": "${fileDirname}"
+        }
+    ]
+}

+ 8 - 4
go.mod

@@ -1,16 +1,20 @@
 module slowwildws
 
-go 1.21.13
+go 1.23.6
+
+toolchain go1.23.8
 
 require github.com/zeromicro/go-zero v1.8.1
 
-require github.com/gorilla/websocket v1.5.3
+require (
+	git.banshen.xyz/huangguangrong/slow_wild_queue v0.0.4
+	github.com/gorilla/websocket v1.5.3
+	github.com/zeromicro/go-queue v1.2.2
+)
 
 require (
-	git.banshen.xyz/huangguangrong/slow_wild_queue v0.0.2 // indirect
 	github.com/pierrec/lz4/v4 v4.1.21 // indirect
 	github.com/segmentio/kafka-go v0.4.47 // indirect
-	github.com/zeromicro/go-queue v1.2.2 // indirect
 )
 
 require (

+ 5 - 2
go.sum

@@ -1,5 +1,5 @@
-git.banshen.xyz/huangguangrong/slow_wild_queue v0.0.2 h1:dwT5N0cKAhkXlh/oXz6QZL7yk4OvM5Ir0zIVzlvCUKs=
-git.banshen.xyz/huangguangrong/slow_wild_queue v0.0.2/go.mod h1:qSnhKd5XhF4dBZMiVYiRiCyQdkJ5u6uawSUtYetq0Ys=
+git.banshen.xyz/huangguangrong/slow_wild_queue v0.0.4 h1:FpaSvLDccXD3jQFFbBmZ5YhzBUcQmNP/6QInFbHy3vs=
+git.banshen.xyz/huangguangrong/slow_wild_queue v0.0.4/go.mod h1:5rNoIiZvaamaB9xSOXefuEflTeUbpMfQgrZk8dc0x70=
 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
 github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
 github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
@@ -84,8 +84,11 @@ github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXl
 github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
 github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
 github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
 github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
+github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY=
 github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4=
+github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8=
 github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM=
 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
 github.com/zeromicro/go-queue v1.2.2 h1:3TMhRlI/8lZy13Sj6FBBWWRXlsQhGCchRxY2itfV1Is=

+ 7 - 7
internal/constants/message.go

@@ -4,16 +4,16 @@ package constants
 type MessageFrameType uint8
 
 const (
-	FrameData  MessageFrameType = 0x0
-	FramePing  MessageFrameType = 0x1
-	FrameErr   MessageFrameType = 0x9
-	FrameAck   MessageFrameType = 0x2
-	FrameNoAck MessageFrameType = 0x3
+	FrameData  MessageFrameType = 0x0 // 消息内容
+	FramePing  MessageFrameType = 0x1 // 心跳ping
+	FrameErr   MessageFrameType = 0x9 // 错误信息
+	FrameAck   MessageFrameType = 0x2 // ack确认消息
+	FrameNoAck MessageFrameType = 0x3 // 不需要ack确认的
 )
 
 type ChatType int
 
 const (
-	GroupChatType ChatType = iota + 1
-	SingleChatType
+	GroupChatType  ChatType = iota + 1 // 群聊
+	SingleChatType                     // 私聊
 )

+ 5 - 1
internal/handler/slowwildwshandler.go

@@ -19,7 +19,11 @@ func SlowwildwsHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
 				"Sec-Websocket-Protocol": []string{protocol},
 			}
 		}
-		upgrade := websocket.Upgrader{}
+		upgrade := websocket.Upgrader{
+			CheckOrigin: func(r *http.Request) bool {
+				return true
+			},
+		}
 		conn, err := upgrade.Upgrade(w, r, responseHeader)
 		if err != nil {
 			xhttp.JsonBaseResponseCtx(r.Context(), w, err)

+ 5 - 1
internal/middleware/jwtmiddleware.go

@@ -3,6 +3,7 @@ package middleware
 import (
 	"context"
 	"errors"
+	"fmt"
 	"net/http"
 	"slowwildws/internal/constants"
 
@@ -32,12 +33,13 @@ func (j *JwtMiddleware) Handle(next http.HandlerFunc) http.HandlerFunc {
 		if authToken = r.Header.Get("Sec-Websocket-Protocol"); authToken != "" {
 			r.Header.Set("Authorization", authToken)
 		}
+		fmt.Println("获取到的token参数: ", authToken)
 		parseToken, err := jwt.ParseWithClaims(authToken, &MyCustomClaims{}, func(t *jwt.Token) (interface{}, error) {
 			return []byte(j.Secret), nil
 		})
 		if err != nil {
 			w.WriteHeader(http.StatusUnauthorized)
-			xhttp.JsonBaseResponseCtx(r.Context(), w, errors.New("token invalid"))
+			xhttp.JsonBaseResponseCtx(r.Context(), w, errors.New("token invalid2"))
 			return
 		}
 		if !parseToken.Valid {
@@ -45,6 +47,7 @@ func (j *JwtMiddleware) Handle(next http.HandlerFunc) http.HandlerFunc {
 			xhttp.JsonBaseResponseCtx(r.Context(), w, errors.New("token invalid"))
 			return
 		}
+		fmt.Println("解析token成功 ")
 		claims, ok := parseToken.Claims.(*MyCustomClaims)
 		if !ok {
 			w.WriteHeader(http.StatusUnauthorized)
@@ -52,6 +55,7 @@ func (j *JwtMiddleware) Handle(next http.HandlerFunc) http.HandlerFunc {
 			return
 		}
 		*r = *r.WithContext(context.WithValue(r.Context(), constants.UserID, claims.UserAuthID))
+		fmt.Println("获取到的用户id: ", claims.UserAuthID)
 		next(w, r)
 	}
 }

+ 9 - 9
internal/service/conversation/conversationlogic.go

@@ -3,7 +3,6 @@ package conversation
 import (
 	"context"
 	"slowwildws/internal/types"
-	"slowwildws/internal/utils"
 	"time"
 
 	msgChat "git.banshen.xyz/huangguangrong/slow_wild_queue/types"
@@ -34,12 +33,13 @@ func (l *ConversationLogic) ChatHandler(msg *types.Message, uid int64) (*msgChat
 	data.Msg.MsgID = msg.Id
 	// 设置消息发送时间
 	data.SendTime = time.Now().Unix()
-	switch data.ChatType {
-	case msgChat.SingleChatType:
-		data.ConversationId = utils.CombineUserID(uid, data.RecvID)
-	case msgChat.GroupChatType:
-		data.ConversationId = utils.UserIdToHex(data.RecvID)
-	}
+	// 使用服务端下发的会话id,所以注释这里
+	// switch data.ChatType {
+	// case msgChat.SingleChatType:
+	// 	data.ConversationId = utils.CombineUserID(uid, data.RecvID)
+	// case msgChat.GroupChatType:
+	// 	data.ConversationId = utils.UserIdToHex(data.RecvID)
+	// }
 	msgData := &msgChat.MsgChatTransfer{
 		MsgId:          msg.Id,
 		ConversationId: data.ConversationId,
@@ -47,8 +47,8 @@ func (l *ConversationLogic) ChatHandler(msg *types.Message, uid int64) (*msgChat
 		SendID:         uid,
 		RecvID:         data.RecvID,
 		SendTime:       time.Now().Unix(),
-		MType:          msgChat.MType(data.MType),
-		Content:        data.Content,
+		MType:          msgChat.MType(data.Msg.MType),
+		Content:        data.Msg.Content,
 	}
 	return msgData, nil
 }

+ 1 - 1
slowwildws.go

@@ -23,7 +23,7 @@ func main() {
 	var c config.Config
 	conf.MustLoad(*configFile, &c)
 
-	server := rest.MustNewServer(c.RestConf)
+	server := rest.MustNewServer(c.RestConf, rest.WithCors(), rest.WithCorsHeaders())
 	defer server.Stop()
 
 	ctx := svc.NewServiceContext(c)