fix
This commit is contained in:
parent
b4a06dc66f
commit
68ed14b373
|
@ -3,6 +3,7 @@ package logic
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
"fusenapi/constants"
|
"fusenapi/constants"
|
||||||
"fusenapi/initalize"
|
"fusenapi/initalize"
|
||||||
"fusenapi/model/gmodel"
|
"fusenapi/model/gmodel"
|
||||||
|
@ -97,7 +98,7 @@ func (l *DataTransferLogic) DataTransfer(svcCtx *svc.ServiceContext, w http.Resp
|
||||||
)
|
)
|
||||||
isAuth, userInfo = l.checkAuth(svcCtx, r)
|
isAuth, userInfo = l.checkAuth(svcCtx, r)
|
||||||
if !isAuth {
|
if !isAuth {
|
||||||
time.Sleep(time.Second * 2) //兼容下火狐
|
time.Sleep(time.Second * 1) //兼容下火狐
|
||||||
rsp := websocket_data.DataTransferData{
|
rsp := websocket_data.DataTransferData{
|
||||||
T: constants.WEBSOCKET_UNAUTH,
|
T: constants.WEBSOCKET_UNAUTH,
|
||||||
D: nil,
|
D: nil,
|
||||||
|
@ -132,7 +133,7 @@ func (l *DataTransferLogic) setConnPool(conn *websocket.Conn, userInfo auth.User
|
||||||
publicMutex.Lock()
|
publicMutex.Lock()
|
||||||
defer publicMutex.Unlock()
|
defer publicMutex.Unlock()
|
||||||
//生成连接唯一标识
|
//生成连接唯一标识
|
||||||
uniqueId := l.getUniqueId()
|
uniqueId := l.getUniqueId(userInfo)
|
||||||
ws := wsConnectItem{
|
ws := wsConnectItem{
|
||||||
conn: conn,
|
conn: conn,
|
||||||
ctx: l.ctx,
|
ctx: l.ctx,
|
||||||
|
@ -153,21 +154,27 @@ func (l *DataTransferLogic) setConnPool(conn *websocket.Conn, userInfo auth.User
|
||||||
mapConnPool.Store(uniqueId, ws)
|
mapConnPool.Store(uniqueId, ws)
|
||||||
go func() {
|
go func() {
|
||||||
//把连接成功消息发回去
|
//把连接成功消息发回去
|
||||||
time.Sleep(time.Second * 2) //兼容下火狐
|
time.Sleep(time.Second * 1) //兼容下火狐
|
||||||
ws.sendToOutChan(ws.respondDataFormat(constants.WEBSOCKET_CONNECT_SUCCESS, uniqueId))
|
ws.sendToOutChan(ws.respondDataFormat(constants.WEBSOCKET_CONNECT_SUCCESS, uniqueId))
|
||||||
}()
|
}()
|
||||||
return ws
|
return ws
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取唯一id
|
// 获取唯一id
|
||||||
func (l *DataTransferLogic) getUniqueId() string {
|
func (l *DataTransferLogic) getUniqueId(userInfo auth.UserInfo) string {
|
||||||
uniqueId := uuid.New().String() + time.Now().Format("20060102150405")
|
//后面拼接上用户id
|
||||||
|
uniqueId := uuid.New().String() + getUserPart(userInfo.UserId, userInfo.GuestId)
|
||||||
if _, ok := mapConnPool.Load(uniqueId); ok {
|
if _, ok := mapConnPool.Load(uniqueId); ok {
|
||||||
uniqueId = l.getUniqueId()
|
uniqueId = l.getUniqueId(userInfo)
|
||||||
}
|
}
|
||||||
return uniqueId
|
return uniqueId
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 获取用户拼接部分
|
||||||
|
func getUserPart(userId, guestId int64) string {
|
||||||
|
return fmt.Sprintf("_%d_%d", userId, guestId)
|
||||||
|
}
|
||||||
|
|
||||||
// 鉴权
|
// 鉴权
|
||||||
func (l *DataTransferLogic) checkAuth(svcCtx *svc.ServiceContext, r *http.Request) (isAuth bool, userInfo *auth.UserInfo) {
|
func (l *DataTransferLogic) checkAuth(svcCtx *svc.ServiceContext, r *http.Request) (isAuth bool, userInfo *auth.UserInfo) {
|
||||||
// 解析JWT token,并对空用户进行判断
|
// 解析JWT token,并对空用户进行判断
|
||||||
|
|
|
@ -15,11 +15,24 @@ func (w *wsConnectItem) reuseLastConnect(data []byte) {
|
||||||
w.sendToOutChan(w.respondDataFormat(constants.WEBSOCKET_REQUEST_RESUME_LAST_CONNECT_ERR, "invalid format of client id"))
|
w.sendToOutChan(w.respondDataFormat(constants.WEBSOCKET_REQUEST_RESUME_LAST_CONNECT_ERR, "invalid format of client id"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
lenClientId := len(clientId)
|
||||||
//id长度不对
|
//id长度不对
|
||||||
if len(clientId) > 100 {
|
if lenClientId > 100 {
|
||||||
w.sendToOutChan(w.respondDataFormat(constants.WEBSOCKET_REQUEST_RESUME_LAST_CONNECT_ERR, "length of client id is to long"))
|
w.sendToOutChan(w.respondDataFormat(constants.WEBSOCKET_REQUEST_RESUME_LAST_CONNECT_ERR, "length of client id is to long"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
//合成client后缀,不是同个后缀的不能复用
|
||||||
|
userPart := getUserPart(w.userId, w.guestId)
|
||||||
|
lenUserPart := len(userPart)
|
||||||
|
if lenClientId <= lenUserPart {
|
||||||
|
w.sendToOutChan(w.respondDataFormat(constants.WEBSOCKET_REQUEST_RESUME_LAST_CONNECT_ERR, "length of client id is to short"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
//尾部不同不能复用
|
||||||
|
if clientId[lenClientId-lenUserPart:] != userPart {
|
||||||
|
w.sendToOutChan(w.respondDataFormat(constants.WEBSOCKET_REQUEST_RESUME_LAST_CONNECT_ERR, "the client id is not belong you before"))
|
||||||
|
return
|
||||||
|
}
|
||||||
publicMutex.Lock()
|
publicMutex.Lock()
|
||||||
defer publicMutex.Unlock()
|
defer publicMutex.Unlock()
|
||||||
//存在是不能给他申请重新绑定
|
//存在是不能给他申请重新绑定
|
||||||
|
|
Loading…
Reference in New Issue
Block a user