UNPKG

@hprose/rpc-wx

Version:
156 lines 7.75 kB
"use strict"; /*--------------------------------------------------------*\ | | | hprose | | | | Official WebSite: https://hprose.com | | | | HttpTransport.ts | | | | HttpTransport for TypeScript. | | | | LastModified: Dec 30, 2019 | | Author: Ma Bingyao <andot@hprose.com> | | | \*________________________________________________________*/ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; Object.defineProperty(exports, "__esModule", { value: true }); var rpc_core_1 = require("@hprose/rpc-core"); var io_1 = require("@hprose/io"); var HttpTransport = /** @class */ (function () { function HttpTransport() { this.counter = 0; this.requests = Object.create(null); this.httpRequestHeaders = Object.create(null); } HttpTransport.prototype.setRequestHeaders = function (headers, httpRequestHeaders) { for (var name_1 in httpRequestHeaders) { if (!httpRequestHeaders.hasOwnProperty || httpRequestHeaders.hasOwnProperty(name_1)) { var value = httpRequestHeaders[name_1]; if (value !== undefined) { if (Array.isArray(value)) { headers[name_1] = value.join(', '); } else { headers[name_1] = value + ""; } } } } }; HttpTransport.prototype.getRequestHeaders = function (httpRequestHeaders) { var headers = Object.create(null); this.setRequestHeaders(headers, this.httpRequestHeaders); if (httpRequestHeaders) { this.setRequestHeaders(headers, httpRequestHeaders); } return headers; }; HttpTransport.prototype.transport = function (request, context) { return __awaiter(this, void 0, void 0, function () { var result, index, data, bytes, header, timeoutId_1; var _this = this; return __generator(this, function (_a) { result = rpc_core_1.defer(); index = this.counter++; if (request.buffer.slice) { data = request.buffer.slice(request.byteOffset, request.length); } else { bytes = new Uint8Array(request.length); bytes.set(request); data = bytes.buffer; } header = this.getRequestHeaders(context.httpRequestHeaders); this.requests[index] = wx.request({ url: context.uri, data: data, header: header, method: 'POST', dataType: 'arraybuffer', responseType: 'arraybuffer', complete: function (res) { delete _this.requests[index]; context.httpResponseHeaders = res.header; context.httpStatusCode = res.statusCode; if (res.statusCode === undefined) { result.reject(new Error(res.errMsg)); } else if (res.statusCode >= 200 && res.statusCode < 300) { result.resolve(new Uint8Array(res.data)); } else { result.reject(new Error(res.statusCode + ':' + io_1.ByteStream.toString(res.data))); } } }); if (context.timeout > 0) { timeoutId_1 = setTimeout(function () { result.reject(new rpc_core_1.TimeoutError()); }, context.timeout); result.promise.then(function () { clearTimeout(timeoutId_1); }, function () { clearTimeout(timeoutId_1); }); } return [2 /*return*/, result.promise]; }); }); }; HttpTransport.prototype.abort = function () { return __awaiter(this, void 0, void 0, function () { var index, request; return __generator(this, function (_a) { for (index in this.requests) { request = this.requests[index]; delete this.requests[index]; if (request) { request.abort(); } } return [2 /*return*/]; }); }); }; HttpTransport.schemes = ['https']; return HttpTransport; }()); exports.HttpTransport = HttpTransport; rpc_core_1.Client.register('http', HttpTransport); //# sourceMappingURL=HttpTransport.js.map