You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
3.8 KiB
130 lines
3.8 KiB
|
|
"use strict";
|
|
const USE_WEBSOCKET = true
|
|
const httpCookie = require('./http-cookie.js')
|
|
const ApiViewWS = require('./apiviewws.js')
|
|
let app = getApp()
|
|
let apiViewWSs = {}
|
|
const reconnectApiViews = (check_time) => {
|
|
if(!USE_WEBSOCKET){
|
|
return
|
|
}
|
|
for(let i in apiViewWSs){
|
|
apiViewWSs[i].check_and_reconnect(check_time)
|
|
}
|
|
}
|
|
const getApiViewWS = (server, need_connect) => {
|
|
const ws_path = "ws" + server.substring(4) + "/wsapi"
|
|
return new Promise((resolve, reject) => {
|
|
if (!apiViewWSs.hasOwnProperty(ws_path)) {
|
|
apiViewWSs[ws_path] = new ApiViewWS(ws_path)
|
|
}
|
|
if (!need_connect){
|
|
resolve(apiViewWSs[ws_path])
|
|
return
|
|
}
|
|
apiViewWSs[ws_path].connect().then(res => {
|
|
resolve(apiViewWSs[ws_path])
|
|
}).catch(res => {
|
|
reject(res)
|
|
})
|
|
})
|
|
}
|
|
const check_res = function (res, server, path, data, method, header, resolve, reject, check_login) {
|
|
if (app === undefined) {
|
|
app = getApp()
|
|
}
|
|
if (check_login && res.data.code == app.api.ERROR_CODE.ERR_WECHAT_LOGIN) {
|
|
app.login().then(res => {
|
|
req(server, path, data, method, header, resolve, reject, false)
|
|
}).catch(res => {
|
|
resolve(res.data)
|
|
})
|
|
} else if (res.data.code != app.api.ERROR_CODE.SUCCESS) {
|
|
reject(res.data.message)
|
|
} else {
|
|
resolve(res.data.data)
|
|
}
|
|
}
|
|
const ws_request = function (server, path, data, method, header, resolve, reject, check_login) {
|
|
if (!USE_WEBSOCKET || path === '/api/wechat/login') {
|
|
wx_request(server, path, data, method, header, resolve, reject, check_login)
|
|
return
|
|
}
|
|
getApiViewWS(server, true).then(conn => {
|
|
conn.req(path, data, (succ, res) => {
|
|
if (!succ) {
|
|
reject("网络错误")
|
|
} else {
|
|
check_res(res, server, path, data, method, header, resolve, reject, check_login)
|
|
}
|
|
})
|
|
}).catch(res => {
|
|
wx_request(server, path, data, method, header, resolve, reject, check_login)
|
|
})
|
|
}
|
|
const wx_request = function (server, path, data, method, header, resolve, reject, check_login){
|
|
const url = server + path
|
|
header['Cookie'] = httpCookie.getCookieForReq()
|
|
const reqid = "req_" + parseInt(Math.random() * 9000000000 + 1000000000)
|
|
wx.request({
|
|
url: url,
|
|
data: data,
|
|
method: method,
|
|
header: header,
|
|
success(res) {
|
|
httpCookie.setCookieByHead(res.header)
|
|
if(app === undefined){
|
|
app = getApp()
|
|
}
|
|
let server_time = new Date(res.header["Date"])
|
|
if (!isNaN(server_time)){
|
|
app.globalData.timeDifference = server_time.getTime() - new Date().getTime()
|
|
}
|
|
if(USE_WEBSOCKET){
|
|
getApiViewWS(server, false).then(conn => {
|
|
conn.reconnect()
|
|
check_res(res, server, path, data, method, header, resolve, reject, check_login)
|
|
}).catch(res => {
|
|
check_res(res, server, path, data, method, header, resolve, reject, check_login)
|
|
})
|
|
}else{
|
|
check_res(res, server, path, data, method, header, resolve, reject, check_login)
|
|
}
|
|
},
|
|
fail(res) {
|
|
reject("网络错误")
|
|
},
|
|
complete() {
|
|
}
|
|
})
|
|
}
|
|
const req = function (server, path, data, method, header, resolve, reject, check_login){
|
|
return ws_request(server, path, data, method, header, resolve, reject, check_login)
|
|
}
|
|
const request = function({server, path, data, method, header} = {}){
|
|
for (let key in data) {
|
|
if(data[key] === undefined){
|
|
delete data[key]
|
|
}
|
|
}
|
|
return new Promise((resolve, reject) => {
|
|
wx.showNavigationBarLoading()
|
|
let resolve_callback = res => {
|
|
wx.hideNavigationBarLoading()
|
|
resolve(res)
|
|
}
|
|
let reject_callback = res => {
|
|
wx.hideNavigationBarLoading()
|
|
wx.showToast({
|
|
icon: 'none',
|
|
title: res
|
|
})
|
|
reject(res)
|
|
}
|
|
req(server, path, data, method, header, resolve_callback, reject_callback, true)
|
|
})
|
|
}
|
|
module.exports = request
|
|
module.exports.reconnectApiViews = reconnectApiViews
|