fix
This commit is contained in:
parent
b68da2e68a
commit
500611236e
|
@ -6,6 +6,8 @@ type Websocket string
|
||||||
const (
|
const (
|
||||||
//鉴权失败
|
//鉴权失败
|
||||||
WEBSOCKET_UNAUTH Websocket = "WEBSOCKET_UNAUTH"
|
WEBSOCKET_UNAUTH Websocket = "WEBSOCKET_UNAUTH"
|
||||||
|
//获取ws连接标识错误
|
||||||
|
WEBSOCKET_GEN_UNIQUE_ID_ERR Websocket = "WEBSOCKET_GEN_UNIQUE_ID_ERR"
|
||||||
//ws连接成功
|
//ws连接成功
|
||||||
WEBSOCKET_CONNECT_SUCCESS Websocket = "WEBSOCKET_CONNECT_SUCCESS"
|
WEBSOCKET_CONNECT_SUCCESS Websocket = "WEBSOCKET_CONNECT_SUCCESS"
|
||||||
//请求恢复为上次连接的标识
|
//请求恢复为上次连接的标识
|
||||||
|
|
|
@ -106,7 +106,10 @@ func (l *DataTransferLogic) DataTransfer(w http.ResponseWriter, r *http.Request)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
//设置连接
|
//设置连接
|
||||||
ws := l.setConnPool(conn, *userInfo)
|
ws, err := l.setConnPool(conn, *userInfo)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
defer ws.close()
|
defer ws.close()
|
||||||
//循环读客户端信息
|
//循环读客户端信息
|
||||||
go ws.readLoop()
|
go ws.readLoop()
|
||||||
|
@ -123,11 +126,16 @@ func (l *DataTransferLogic) DataTransfer(w http.ResponseWriter, r *http.Request)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置连接
|
// 设置连接
|
||||||
func (l *DataTransferLogic) setConnPool(conn *websocket.Conn, userInfo auth.UserInfo) wsConnectItem {
|
func (l *DataTransferLogic) setConnPool(conn *websocket.Conn, userInfo auth.UserInfo) (wsConnectItem, error) {
|
||||||
publicMutex.Lock()
|
publicMutex.Lock()
|
||||||
defer publicMutex.Unlock()
|
defer publicMutex.Unlock()
|
||||||
//生成连接唯一标识
|
//生成连接唯一标识
|
||||||
uniqueId := l.getUniqueId(userInfo)
|
uniqueId, err := l.getUniqueId(userInfo)
|
||||||
|
if err != nil {
|
||||||
|
//发送获取唯一标识失败的消息
|
||||||
|
l.sendGetUniqueIdErrResponse(conn)
|
||||||
|
return wsConnectItem{}, err
|
||||||
|
}
|
||||||
ws := wsConnectItem{
|
ws := wsConnectItem{
|
||||||
conn: conn,
|
conn: conn,
|
||||||
logic: l,
|
logic: l,
|
||||||
|
@ -155,7 +163,7 @@ func (l *DataTransferLogic) setConnPool(conn *websocket.Conn, userInfo auth.User
|
||||||
time.Sleep(time.Second * 1) //兼容下火狐(直接发回去收不到第一条消息:有待研究)
|
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, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取唯一id
|
// 获取唯一id
|
||||||
|
@ -214,8 +222,20 @@ func (l *DataTransferLogic) unAuthResponse(conn *websocket.Conn) {
|
||||||
_ = conn.WriteMessage(websocket.TextMessage, b)
|
_ = conn.WriteMessage(websocket.TextMessage, b)
|
||||||
//发送关闭信息
|
//发送关闭信息
|
||||||
_ = conn.WriteMessage(websocket.CloseMessage, nil)
|
_ = conn.WriteMessage(websocket.CloseMessage, nil)
|
||||||
//关闭连接
|
}
|
||||||
conn.Close()
|
|
||||||
|
// 获取唯一标识失败通知
|
||||||
|
func (l *DataTransferLogic) sendGetUniqueIdErrResponse(conn *websocket.Conn) {
|
||||||
|
time.Sleep(time.Second * 1) //兼容下火狐(直接发回去收不到第一条消息:有待研究)
|
||||||
|
rsp := websocket_data.DataTransferData{
|
||||||
|
T: constants.WEBSOCKET_GEN_UNIQUE_ID_ERR,
|
||||||
|
D: "err to gen unique id ",
|
||||||
|
}
|
||||||
|
b, _ := json.Marshal(rsp)
|
||||||
|
//先发一条正常信息
|
||||||
|
_ = conn.WriteMessage(websocket.TextMessage, b)
|
||||||
|
//发送关闭信息
|
||||||
|
_ = conn.WriteMessage(websocket.CloseMessage, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 心跳检测
|
// 心跳检测
|
||||||
|
|
Loading…
Reference in New Issue
Block a user