提交 452d6cbc 编写于 作者: fxy060608's avatar fxy060608

merge

import {
invoke
} from 'uni-core/service/bridge'
import {
onMethod
} from '../../platform'
function on (method) {
const callbacks = []
onMethod(method, data => {
callbacks.forEach(callbackId => {
invoke(callbackId, data)
})
})
return function (callbackId) {
callbacks.push(callbackId)
}
}
export const onBluetoothDeviceFound = on('onBluetoothDeviceFound')
export const onBluetoothAdapterStateChange = on('onBluetoothAdapterStateChange')
export const onBLEConnectionStateChange = on('onBLEConnectionStateChange')
export const onBLECharacteristicValueChange = on('onBLECharacteristicValueChange')
import {
invoke
} from 'uni-core/service/bridge'
import {
onMethod,
invokeMethod
} from '../../platform'
const callbacks = []
onMethod('onCompassChange', function (res) {
callbacks.forEach(callbackId => {
invoke(callbackId, res)
})
})
let isEnable = false
/**
* 监听加速度
* @param {*} callbackId
*/
export function onCompassChange (callbackId) {
// TODO 当没有 start 时,添加 on 需要主动 start?
callbacks.push(callbackId)
if (!isEnable) {
startCompass()
}
}
export function startCompass ({
interval // TODO
} = {}) {
if (isEnable) {
return
}
isEnable = true
return invokeMethod('enableCompass', {
enable: true
})
}
export function stopCompass () {
isEnable = false
return invokeMethod('enableCompass', {
enable: false
})
}
import {
invoke
} from 'uni-core/service/bridge'
import {
onMethod,
invokeMethod
} from '../../platform'
class DownloadTask {
constructor (downloadTaskId, callbackId) {
this.id = downloadTaskId
this._callbackId = callbackId
this._callbacks = []
}
abort () {
invokeMethod('operateRequestTask', {
downloadTaskId: this.id,
operationType: 'abort'
})
}
onProgressUpdate (callback) {
if (typeof callback !== 'function') {
return
}
this._callbacks.push(callback)
}
onHeadersReceived () {
}
offProgressUpdate (callback) {
const index = this._callbacks.indexOf(callback)
if (index >= 0) {
this._callbacks.splice(index, 1)
}
}
offHeadersReceived () {
}
}
const downloadTasks = Object.create(null)
onMethod('onDownloadTaskStateChange', ({
downloadTaskId,
state,
tempFilePath,
statusCode,
progress,
totalBytesWritten,
totalBytesExpectedToWrite,
errMsg
}) => {
const downloadTask = downloadTasks[downloadTaskId]
const callbackId = downloadTask._callbackId
switch (state) {
case 'progressUpdate':
downloadTask._callbacks.forEach(callback => {
callback({
progress,
totalBytesWritten,
totalBytesExpectedToWrite
})
})
break
case 'success':
invoke(callbackId, {
tempFilePath,
statusCode,
errMsg: 'request:ok'
})
// eslint-disable-next-line no-fallthrough
case 'fail':
invoke(callbackId, {
errMsg: 'request:fail ' + errMsg
})
// eslint-disable-next-line no-fallthrough
default:
// progressUpdate 可能晚于 success
setTimeout(() => {
delete downloadTasks[downloadTaskId]
}, 100)
break
}
})
export function downloadFile (args, callbackId) {
const {
downloadTaskId
} = invokeMethod('createDownloadTask', args)
const task = new DownloadTask(downloadTaskId, callbackId)
downloadTasks[downloadTaskId] = task
return task
}
import {
invoke
} from 'uni-core/service/bridge'
import {
onMethod,
invokeMethod
} from '../../platform'
class SocketTask {
constructor (socketTaskId) {
this.id = socketTaskId
this._callbacks = {
open: [],
close: [],
error: [],
message: []
}
this.CLOSED = 3
this.CLOSING = 2
this.CONNECTING = 0
this.OPEN = 1
this.readyState = this.CLOSED
}
send (args) {
if (this.readyState !== this.OPEN) {
this._callback(args, 'sendSocketMessage:fail WebSocket is not connected')
}
const {
errMsg
} = invokeMethod('operateSocketTask', Object.assign({}, args, {
operationType: 'send',
socketTaskId: this.id
}))
this._callback(args, errMsg.replace('operateSocketTask', 'sendSocketMessage'))
}
close (args) {
this.readyState = this.CLOSING
const {
errMsg
} = invokeMethod('operateSocketTask', Object.assign({}, args, {
operationType: 'close',
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,
fail,
complete
}, errMsg) {
var data = {
errMsg
}
if (/:ok$/.test(errMsg)) {
if (typeof success === 'function') {
success(data)
}
} else {
if (typeof fail === 'function') {
fail(data)
}
}
if (typeof complete === 'function') {
complete(data)
}
}
}
const socketTasks = Object.create(null)
const socketTasksArray = []
const callbacks = Object.create(null)
onMethod('onSocketTaskStateChange', ({
socketTaskId,
state,
data,
errMsg
}) => {
const socketTask = socketTasks[socketTaskId]
if (!socketTask) {
return
}
socketTask._callbacks[state].forEach(callback => {
if (typeof callback === 'function') {
callback(state === 'message' ? {
data
} : {})
}
})
if (state === 'open') {
socketTask.readyState = socketTask.OPEN
}
if (socketTask === socketTasksArray[0] && callbacks[state]) {
invoke(callbacks[state], state === 'message' ? {
data
} : {})
}
if (state === 'error' || state === 'close') {
socketTask.readyState = socketTask.CLOSED
delete socketTasks[socketTaskId]
const index = socketTasksArray.indexOf(socketTask)
if (index >= 0) {
socketTasksArray.splice(index, 1)
}
}
})
export function connectSocket (args, callbackId) {
const {
socketTaskId
} = invokeMethod('createSocketTask', args)
const task = new SocketTask(socketTaskId)
socketTasks[socketTaskId] = task
socketTasksArray.push(task)
setTimeout(() => {
invoke(callbackId, {
errMsg: 'connectSocket:ok'
})
}, 0)
return task
}
export function sendSocketMessage (args, callbackId) {
const socketTask = socketTasksArray[0]
if (!socketTask || socketTask.readyState !== socketTask.OPEN) {
invoke(callbackId, {
errMsg: 'sendSocketMessage:fail WebSocket is not connected'
})
return
}
return invokeMethod('operateSocketTask', Object.assign({}, args, {
operationType: 'send',
socketTaskId: socketTask.id
}))
}
export function closeSocket (args, callbackId) {
const socketTask = socketTasksArray[0]
if (!socketTask) {
invoke(callbackId, {
errMsg: 'closeSocket:fail WebSocket is not connected'
})
return
}
socketTask.readyState = socketTask.CLOSING
return invokeMethod('operateSocketTask', Object.assign({}, args, {
operationType: 'close',
socketTaskId: socketTask.id
}))
}
export function onSocketOpen (callbackId) {
callbacks.open = callbackId
}
export function onSocketError (callbackId) {
callbacks.error = callbackId
}
export function onSocketMessage (callbackId) {
callbacks.message = callbackId
}
export function onSocketClose (callbackId) {
callbacks.close = callbackId
}
export function pack (args) {
return args
}
export function unpack (args) {
return args
}
......
import {
invoke,
publish
publish,
pack,
unpack
} from '../../bridge'
/**
* 执行蓝牙相关方法
*/
function bluetoothExec (method, callbackId, data = {}, beforeSuccess) {
function bluetoothExec (method, callbackId, data = {}) {
var deviceId = data.deviceId
if (deviceId) {
data.deviceId = deviceId.toUpperCase()
......@@ -18,10 +20,7 @@ function bluetoothExec (method, callbackId, data = {}, beforeSuccess) {
plus.bluetooth[method.replace('Changed', 'Change')](Object.assign(data, {
success (data) {
if (typeof beforeSuccess === 'function') {
beforeSuccess(data)
}
invoke(callbackId, Object.assign({}, data, {
invoke(callbackId, Object.assign({}, pack(data), {
errMsg: `${method}:ok`,
code: undefined,
message: undefined
......@@ -38,12 +37,9 @@ function bluetoothExec (method, callbackId, data = {}, beforeSuccess) {
/**
* 监听蓝牙相关事件
*/
function bluetoothOn (method, beforeSuccess) {
function bluetoothOn (method) {
plus.bluetooth[method.replace('Changed', 'Change')](function (data) {
if (typeof beforeSuccess === 'function') {
beforeSuccess(data)
}
publish(method, Object.assign({}, data, {
publish(method, Object.assign({}, pack(data), {
code: undefined,
message: undefined
}))
......@@ -51,16 +47,6 @@ function bluetoothOn (method, beforeSuccess) {
return true
}
function checkDevices (data) {
data.devices = data.devices.map(device => {
var advertisData = device.advertisData
if (advertisData && typeof advertisData !== 'string') {
device.advertisData = wx.arrayBufferToBase64(advertisData)
}
return device
})
}
var onBluetoothAdapterStateChange
var onBluetoothDeviceFound
var onBLEConnectionStateChange
......@@ -81,7 +67,7 @@ export function getBluetoothAdapterState (data, callbackId) {
}
export function startBluetoothDevicesDiscovery (data, callbackId) {
onBluetoothDeviceFound = onBluetoothDeviceFound || bluetoothOn('onBluetoothDeviceFound', checkDevices)
onBluetoothDeviceFound = onBluetoothDeviceFound || bluetoothOn('onBluetoothDeviceFound')
bluetoothExec('startBluetoothDevicesDiscovery', callbackId, data)
}
......@@ -90,7 +76,7 @@ export function stopBluetoothDevicesDiscovery (data, callbackId) {
}
export function getBluetoothDevices (data, callbackId) {
bluetoothExec('getBluetoothDevices', callbackId, {}, checkDevices)
bluetoothExec('getBluetoothDevices', callbackId, {})
}
export function getConnectedBluetoothDevices (data, callbackId) {
......@@ -116,18 +102,12 @@ export function getBLEDeviceCharacteristics (data, callbackId) {
}
export function notifyBLECharacteristicValueChange (data, callbackId) {
onBLECharacteristicValueChange = onBLECharacteristicValueChange || bluetoothOn('onBLECharacteristicValueChange',
data => {
data.value = wx.arrayBufferToBase64(data.value)
})
onBLECharacteristicValueChange = onBLECharacteristicValueChange || bluetoothOn('onBLECharacteristicValueChange')
bluetoothExec('notifyBLECharacteristicValueChange', callbackId, data)
}
export function notifyBLECharacteristicValueChanged (data, callbackId) {
onBLECharacteristicValueChange = onBLECharacteristicValueChange || bluetoothOn('onBLECharacteristicValueChange',
data => {
data.value = wx.arrayBufferToBase64(data.value)
})
onBLECharacteristicValueChange = onBLECharacteristicValueChange || bluetoothOn('onBLECharacteristicValueChange')
bluetoothExec('notifyBLECharacteristicValueChanged', callbackId, data)
}
......@@ -136,6 +116,5 @@ export function readBLECharacteristicValue (data, callbackId) {
}
export function writeBLECharacteristicValue (data, callbackId) {
data.value = wx.base64ToArrayBuffer(data.value)
bluetoothExec('writeBLECharacteristicValue', callbackId, data)
bluetoothExec('writeBLECharacteristicValue', callbackId, unpack(data))
}
......@@ -18,6 +18,12 @@ class DownloadTask {
}
this._callbacks.push(callback)
}
offProgressUpdate (callback) {
const index = this._callbacks.indexOf(callback)
if (index >= 0) {
this._callbacks.splice(index, 1)
}
}
/**
* 停止任务
*/
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册