提交 0f22bd77 编写于 作者: D DCloud_LXH

feat: socket onClose code&reason

上级 d6269a06
......@@ -21,7 +21,7 @@ class SocketTask {
this.CONNECTING = 0
this.OPEN = 1
this.readyState = this.CLOSED
}
}
send (args) {
if (this.readyState !== this.OPEN) {
......@@ -34,7 +34,7 @@ class SocketTask {
socketTaskId: this.id
}))
this._callback(args, errMsg.replace('operateSocketTask', 'sendSocketMessage'))
}
}
close (args) {
this.readyState = this.CLOSING
......@@ -45,23 +45,23 @@ class SocketTask {
socketTaskId: this.id
}))
this._callback(args, errMsg.replace('operateSocketTask', 'closeSocket'))
}
}
onOpen (callback) {
this._callbacks.open.push(callback)
}
}
onClose (callback) {
this._callbacks.close.push(callback)
}
}
onError (callback) {
this._callbacks.error.push(callback)
}
}
onMessage (callback) {
this._callbacks.message.push(callback)
}
}
_callback ({
success,
......@@ -93,19 +93,24 @@ onMethod('onSocketTaskStateChange', ({
socketTaskId,
state,
data,
code,
reason,
errMsg
}) => {
const socketTask = socketTasks[socketTaskId]
if (!socketTask) {
return
}
const callbackRes = state === 'message'
? { data }
: state === 'close'
? { code, reason }
: {}
if (state === 'open') {
socketTask.readyState = socketTask.OPEN
}
if (socketTask === socketTasksArray[0] && callbacks[state]) {
invoke(callbacks[state], state === 'message' ? {
data
} : {})
invoke(callbacks[state], callbackRes)
}
if (state === 'error' || state === 'close') {
socketTask.readyState = socketTask.CLOSED
......@@ -114,13 +119,11 @@ onMethod('onSocketTaskStateChange', ({
if (index >= 0) {
socketTasksArray.splice(index, 1)
}
}
socketTask._callbacks[state].forEach(callback => {
if (typeof callback === 'function') {
callback(state === 'message' ? {
data
} : {})
}
}
socketTask._callbacks[state].forEach(callback => {
if (typeof callback === 'function') {
callback(callbackRes)
}
})
})
......@@ -182,4 +185,4 @@ export function onSocketMessage (callbackId) {
export function onSocketClose (callbackId) {
callbacks.close = callbackId
}
}
......@@ -41,10 +41,13 @@ function getSocket () {
})
socket.onclose(function (e) {
const socketTaskId = e.id
const { code, reason } = e
delete socketTasks[socketTaskId]
publishStateChange({
socketTaskId,
state: 'close'
state: 'close',
code,
reason
})
})
return socket
......
......@@ -26,9 +26,12 @@ class SocketTask {
eventNames.forEach(name => {
this._callbacks[name] = []
webSocket.addEventListener(name, event => {
const res = name === 'message' ? {
data: event.data
} : {}
const { data, code, reason } = event
const res = name === 'message'
? { data }
: name === 'close'
? { code, reason }
: {}
this._callbacks[name].forEach(callback => {
try {
callback(res)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册