diff --git a/package-lock.json b/package-lock.json index 7b7dbef..43a4c54 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "@types/lodash": "^4.17.16", "@vueuse/core": "^13.5.0", "async-mutex": "^0.5.0", + "axios": "^1.11.0", "echarts": "^5.6.0", "highlight.js": "^11.11.1", "konva": "^9.3.20", @@ -2357,6 +2358,12 @@ "tslib": "^2.4.0" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, "node_modules/autoprefixer": { "version": "10.4.21", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", @@ -2395,6 +2402,17 @@ "postcss": "^8.1.0" } }, + "node_modules/axios": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", + "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -2496,6 +2514,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001715", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001715.tgz", @@ -2542,6 +2573,18 @@ "fsevents": "~2.3.2" } }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/complex.js": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.4.2.tgz", @@ -2735,6 +2778,15 @@ "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", "license": "MIT" }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/detect-libc": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", @@ -2755,6 +2807,20 @@ "node": ">=0.3.1" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/echarts": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.6.0.tgz", @@ -2814,6 +2880,51 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/esbuild": { "version": "0.25.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", @@ -2979,6 +3090,42 @@ "node": ">=8" } }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/formdata-polyfill": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", @@ -3036,6 +3183,15 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -3046,6 +3202,43 @@ "node": ">=6.9.0" } }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", @@ -3099,6 +3292,18 @@ "node": ">=4" } }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -3106,6 +3311,45 @@ "dev": true, "license": "ISC" }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -3723,6 +3967,15 @@ "node": ">= 18" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mathjs": { "version": "14.4.0", "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-14.4.0.tgz", @@ -3768,6 +4021,27 @@ "node": ">= 0.10.0" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -4195,6 +4469,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, "node_modules/quansync": { "version": "0.2.10", "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.10.tgz", diff --git a/package.json b/package.json index bcb73c6..cc6a14a 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "@types/lodash": "^4.17.16", "@vueuse/core": "^13.5.0", "async-mutex": "^0.5.0", + "axios": "^1.11.0", "echarts": "^5.6.0", "highlight.js": "^11.11.1", "konva": "^9.3.20", diff --git a/scripts/GenerateWebAPI.ts b/scripts/GenerateWebAPI.ts index 9cdaf81..01a2ab7 100644 --- a/scripts/GenerateWebAPI.ts +++ b/scripts/GenerateWebAPI.ts @@ -279,10 +279,18 @@ async function postProcessApiClient(): Promise { async function generateApiClient(): Promise { console.log('Generating API client...'); try { - const npxCommand = getCommand('npx'); - await execAsync(`${npxCommand} nswag openapi2tsclient /input:http://localhost:5000/swagger/v1/swagger.json /output:src/APIClient.ts`); - console.log('✓ API client generated successfully'); - + const url = 'http://127.0.0.1:5000/GetAPIClientCode'; + const response = await fetch(url); + if (!response.ok) { + throw new Error(`Failed to fetch API client code: ${response.status} ${response.statusText}`); + } + const code = await response.text(); + + // 写入 APIClient.ts + const filePath = 'src/APIClient.ts'; + fs.writeFileSync(filePath, code, 'utf8'); + console.log('✓ API client code fetched and written successfully'); + // 添加后处理步骤 await postProcessApiClient(); } catch (error) { diff --git a/server/Program.cs b/server/Program.cs index d5d04e1..71d2027 100644 --- a/server/Program.cs +++ b/server/Program.cs @@ -5,8 +5,11 @@ using Microsoft.AspNetCore.Http.Features; using Microsoft.Extensions.FileProviders; using Microsoft.IdentityModel.Tokens; using Newtonsoft.Json; +using NJsonSchema.CodeGeneration.TypeScript; using NLog; using NLog.Web; +using NSwag; +using NSwag.CodeGeneration.TypeScript; using NSwag.Generation.Processors.Security; using server.Services; @@ -191,6 +194,34 @@ try // Setup Program MsgBus.Init(); + // Generate API Client + app.MapGet("GetAPIClientCode", async (HttpContext context) => + { + try + { + var document = await OpenApiDocument.FromUrlAsync($"http://{Global.localhost}:5000/swagger/v1/swagger.json"); + + var settings = new TypeScriptClientGeneratorSettings + { + ClassName = "{controller}Client", + UseAbortSignal = false, + Template = TypeScriptTemplate.Axios, + TypeScriptGeneratorSettings = { + }, + }; + + var generator = new TypeScriptClientGenerator(document, settings); + var code = generator.GenerateFile(); + + return Results.Text(code, "text/plain; charset=utf-8", Encoding.UTF8); + } + catch (Exception err) + { + logger.Error(err); + return Results.Problem(err.ToString()); + } + }); + app.Run(); } catch (Exception exception) diff --git a/server/server.csproj b/server/server.csproj index f138d5c..5c82a95 100644 --- a/server/server.csproj +++ b/server/server.csproj @@ -26,6 +26,7 @@ + diff --git a/server/src/Controllers/DebuggerController.cs b/server/src/Controllers/DebuggerController.cs index 5f120fb..cfbac50 100644 --- a/server/src/Controllers/DebuggerController.cs +++ b/server/src/Controllers/DebuggerController.cs @@ -6,7 +6,7 @@ using Peripherals.DebuggerClient; namespace server.Controllers; /// -/// FPGA调试器控制器 +/// FPGA调试器控制器,提供信号捕获、触发、数据读取等调试相关API /// [ApiController] [Route("api/[controller]")] @@ -15,8 +15,81 @@ public class DebuggerController : ControllerBase { private static readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); + /// + /// 表示单个信号通道的配置信息 + /// + public class ChannelConfig + { + /// + /// 通道名称 + /// + required public string name; + /// + /// 通道显示颜色(如前端波形显示用) + /// + required public string color; + /// + /// 通道信号线宽度(位数) + /// + required public UInt32 wireWidth; + /// + /// 信号线在父端口中的起始索引(bit) + /// + required public UInt32 wireStartIndex; + /// + /// 父端口编号 + /// + required public UInt32 parentPort; + /// + /// 捕获模式(如上升沿、下降沿等) + /// + required public CaptureMode mode; + } + + /// + /// 调试器整体配置信息 + /// + public class DebuggerConfig + { + /// + /// 时钟频率 + /// + required public UInt32 clkFreq; + /// + /// 总端口数量 + /// + required public UInt32 totalPortNum; + /// + /// 捕获深度(采样点数) + /// + required public UInt32 captureDepth; + /// + /// 触发器数量 + /// + required public UInt32 triggerNum; + /// + /// 所有信号通道的配置信息 + /// + required public ChannelConfig[] channelConfigs; + } + + /// + /// 单个通道的捕获数据 + /// + public class ChannelCaptureData + { + /// + /// 通道名称 + /// + required public string name; + /// + /// 通道捕获到的数据(Base64编码的UInt32数组) + /// + required public string data; + } + /// - /// 获取调试器实例 + /// 获取当前用户绑定的调试器实例 /// private DebuggerClient? GetDebugger() { @@ -50,19 +123,21 @@ public class DebuggerController : ControllerBase } /// - /// 设置捕获模式 + /// 设置指定信号线的捕获模式 /// + /// 信号线编号(0~511) + /// 捕获模式 [HttpPost("SetMode")] [EnableCors("Users")] [ProducesResponseType(typeof(bool), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] - public async Task SetMode(int channelNum, CaptureMode mode) + public async Task SetMode(UInt32 wireNum, CaptureMode mode) { - if (channelNum > 0x0F) + if (wireNum > 512) { - return BadRequest($"最多只能建立16个通道"); + return BadRequest($"最多只能建立512位信号线"); } try @@ -71,7 +146,7 @@ public class DebuggerController : ControllerBase if (debugger == null) return BadRequest("用户未绑定有效的实验板"); - var result = await debugger.SetMode((byte)channelNum, mode); + var result = await debugger.SetMode(wireNum, mode); if (!result.IsSuccessful) { logger.Error($"设置捕获模式失败: {result.Error}"); @@ -88,7 +163,58 @@ public class DebuggerController : ControllerBase } /// - /// 启动触发器 + /// 为每个通道中的每根线设置捕获模式 + /// + /// 调试器配置信息,包含所有通道的捕获模式设置 + [HttpPost("SetChannelsMode")] + [EnableCors("Users")] + [ProducesResponseType(typeof(bool), StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status400BadRequest)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesResponseType(StatusCodes.Status401Unauthorized)] + public async Task SetChannelsMode([FromBody] DebuggerConfig config) + { + if (config == null || config.channelConfigs == null) + return BadRequest("配置无效"); + + try + { + var debugger = GetDebugger(); + if (debugger == null) + return BadRequest("用户未绑定有效的实验板"); + + foreach (var channel in config.channelConfigs) + { + // 检查每个通道的配置 + if (channel.wireWidth > 32 || + channel.wireStartIndex > 32 || + channel.wireStartIndex + channel.wireWidth > 32) + { + return BadRequest($"通道 {channel.name} 配置错误"); + } + + for (uint i = 0; i < channel.wireWidth; i++) + { + var result = await debugger.SetMode(channel.wireStartIndex * (channel.parentPort * 32) + i, channel.mode); + if (!result.IsSuccessful) + { + logger.Error($"设置通道 {channel.name} 第 {i} 根线捕获模式失败: {result.Error}"); + return StatusCode(StatusCodes.Status500InternalServerError, $"设置通道 {channel.name} 第 {i} 根线捕获模式失败"); + } + } + } + + return Ok(true); + } + catch (Exception ex) + { + logger.Error(ex, "为每个通道中的每根线设置捕获模式时发生异常"); + return StatusCode(StatusCodes.Status500InternalServerError, "操作失败,请稍后重试"); + } + } + + /// + /// 启动触发器,开始信号捕获 /// [HttpPost("StartTrigger")] [EnableCors("Users")] @@ -120,6 +246,46 @@ public class DebuggerController : ControllerBase } } + /// + /// 重新开始触发(刷新后再启动触发器) + /// + [HttpPost("RestartTrigger")] + [EnableCors("Users")] + [ProducesResponseType(typeof(bool), StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status400BadRequest)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesResponseType(StatusCodes.Status401Unauthorized)] + public async Task RestartTrigger() + { + try + { + var debugger = GetDebugger(); + if (debugger == null) + return BadRequest("用户未绑定有效的实验板"); + + var refreshResult = await debugger.Refresh(); + if (!refreshResult.IsSuccessful) + { + logger.Error($"刷新调试器状态失败: {refreshResult.Error}"); + return StatusCode(StatusCodes.Status500InternalServerError, "刷新调试器状态失败"); + } + + var startResult = await debugger.StartTrigger(); + if (!startResult.IsSuccessful) + { + logger.Error($"启动触发器失败: {startResult.Error}"); + return StatusCode(StatusCodes.Status500InternalServerError, "启动触发器失败"); + } + + return Ok(startResult.Value); + } + catch (Exception ex) + { + logger.Error(ex, "重新开始触发时发生异常"); + return StatusCode(StatusCodes.Status500InternalServerError, "操作失败,请稍后重试"); + } + } + /// /// 读取触发器状态标志 /// @@ -187,32 +353,105 @@ public class DebuggerController : ControllerBase } /// - /// 读取捕获数据 + /// 读取捕获数据(等待触发完成后返回各通道采样数据) /// + /// 调试器配置信息,包含采样深度、端口数、通道配置等 + /// 取消操作的令牌 [HttpGet("ReadData")] [EnableCors("Users")] - [ProducesResponseType(typeof(string), StatusCodes.Status200OK)] + [ProducesResponseType(typeof(ChannelCaptureData[]), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] - public async Task ReadData([FromQuery] ushort offset = 0) + public async Task ReadData([FromBody] DebuggerConfig config, CancellationToken cancellationToken) { + // 检查每个通道的配置 + foreach (var channel in config.channelConfigs) + { + if (channel.wireWidth > 32 || + channel.wireStartIndex > 32 || + channel.wireStartIndex + channel.wireWidth > 32) + { + return BadRequest($"通道 {channel.name} 配置错误"); + } + } + try { var debugger = GetDebugger(); if (debugger == null) return BadRequest("用户未绑定有效的实验板"); - var result = await debugger.ReadData(offset); - if (!result.IsSuccessful) + // 等待捕获标志位 + while (true) { - logger.Error($"读取捕获数据失败: {result.Error}"); + cancellationToken.ThrowIfCancellationRequested(); + var flagResult = await debugger.ReadFlag(); + if (!flagResult.IsSuccessful) + { + logger.Error($"读取捕获标志失败: {flagResult.Error}"); + return StatusCode(StatusCodes.Status500InternalServerError, "读取捕获标志失败"); + } + if (flagResult.Value == 1) + { + var clearResult = await debugger.ClearFlag(); + if (!clearResult.IsSuccessful) + { + logger.Error($"清除捕获标志失败: {clearResult.Error}"); + return StatusCode(StatusCodes.Status500InternalServerError, "清除捕获标志失败"); + } + break; + } + await Task.Delay(500, cancellationToken); + } + + var dataResult = await debugger.ReadData(config.totalPortNum); + if (!dataResult.IsSuccessful) + { + logger.Error($"读取捕获数据失败: {dataResult.Error}"); return StatusCode(StatusCodes.Status500InternalServerError, "读取捕获数据失败"); } - // 返回Base64编码 - var base64Data = Convert.ToBase64String(result.Value); - return Ok(base64Data); + var rawData = dataResult.Value; + int depth = (int)config.captureDepth; + int portDataLen = 4 * depth; + int portNum = (int)config.totalPortNum; + var channelDataList = new List(); + + foreach (var channel in config.channelConfigs) + { + int port = (int)channel.parentPort; + int wireStart = (int)channel.wireStartIndex; + int wireWidth = (int)channel.wireWidth; + + // 每个port的数据长度 + int portOffset = port * portDataLen; + + var channelUintArr = new UInt32[depth]; + for (int i = 0; i < depth; i++) + { + // 取出该port的第i个采样点的4字节 + int sampleOffset = portOffset + i * 4; + if (sampleOffset + 4 > rawData.Length) + { + logger.Error($"数据越界: port {port}, sample {i}"); + return StatusCode(StatusCodes.Status500InternalServerError, "数据越界"); + } + UInt32 sample = BitConverter.ToUInt32(rawData, sampleOffset); + // 提取wireWidth位 + UInt32 mask = (wireWidth == 32) ? 0xFFFFFFFF : ((1u << wireWidth) - 1u); + channelUintArr[i] = (sample >> wireStart) & mask; + } + var base64 = Convert.ToBase64String(channelUintArr.SelectMany(BitConverter.GetBytes).ToArray()); + channelDataList.Add(new ChannelCaptureData { name = channel.name, data = base64 }); + } + + return Ok(channelDataList.ToArray()); + } + catch (OperationCanceledException) + { + logger.Info("读取捕获数据请求被取消"); + return StatusCode(StatusCodes.Status499ClientClosedRequest, "客户端已取消请求"); } catch (Exception ex) { @@ -222,7 +461,7 @@ public class DebuggerController : ControllerBase } /// - /// 刷新调试器状态 + /// 刷新调试器状态(重置采集状态等) /// [HttpPost("Refresh")] [EnableCors("Users")] diff --git a/server/src/Peripherals/DebuggerClient.cs b/server/src/Peripherals/DebuggerClient.cs index b9f6be2..26a19ef 100644 --- a/server/src/Peripherals/DebuggerClient.cs +++ b/server/src/Peripherals/DebuggerClient.cs @@ -119,18 +119,18 @@ public class DebuggerClient /// /// 设置信号捕获模式 /// - /// 要设置的通道 + /// 要设置的线 /// 要设置的捕获模式 /// 操作结果,成功返回true,失败返回错误信息 - public async ValueTask> SetMode(byte channelNum, CaptureMode mode) + public async ValueTask> SetMode(UInt32 wireNum, CaptureMode mode) { - if (channelNum > 0x0F) + if (wireNum > 512) { - return new(new ArgumentException($"Channel Num can't be over 16, but receive num: {channelNum}")); + return new(new ArgumentException($"Wire Num can't be over 512, but receive num: {wireNum}")); } UInt32 data = ((UInt32)mode); - var ret = await UDPClientPool.WriteAddr(this.ep, this.taskID, DebuggerAddr.Mode + channelNum, data, this.timeout); + var ret = await UDPClientPool.WriteAddr(this.ep, this.taskID, DebuggerAddr.Mode + wireNum, data, this.timeout); if (!ret.IsSuccessful) { logger.Error($"Failed to set mode: {ret.Error}"); @@ -181,7 +181,7 @@ public class DebuggerClient logger.Error("ReadAddr returned invalid data for flag"); return new(new Exception("Failed to read flag")); } - return ret.Value.Options.Data[0]; + return ret.Value.Options.Data[3]; } /// @@ -207,30 +207,26 @@ public class DebuggerClient /// /// 从指定偏移地址读取捕获的数据 /// - /// 数据读取的偏移地址 - /// 操作结果,成功返回32KB的捕获数据,失败返回错误信息 - public async ValueTask> ReadData(UInt16 offset) + /// Port数量 + /// 操作结果,成功返回捕获数据,失败返回错误信息 + public async ValueTask> ReadData(UInt32 portNum) { - var captureData = new byte[1024 * 32]; + var captureData = new byte[1024 * 4 * portNum]; { - var ret = await UDPClientPool.ReadAddr4BytesAsync(this.ep, this.taskID, this.captureDataAddr + offset, 512, this.timeout); + var ret = await UDPClientPool.ReadAddr4BytesAsync(this.ep, this.taskID, this.captureDataAddr, captureData.Length, this.timeout); if (!ret.IsSuccessful) { logger.Error($"Failed to read data: {ret.Error}"); return new(ret.Error); } - Buffer.BlockCopy(ret.Value, 0, captureData, 0, 512 * 4); - } - { - var ret = await UDPClientPool.ReadAddr4BytesAsync(this.ep, this.taskID, this.captureDataAddr + offset + 512, 512, this.timeout); - if (!ret.IsSuccessful) + if (ret.Value.Length != captureData.Length) { - logger.Error($"Failed to read data: {ret.Error}"); - return new(ret.Error); + logger.Error($"Receive capture data length should be {captureData.Length} instead of {ret.Value.Length}"); + return new(new Exception($"Receive capture data length should be {captureData.Length} instead of {ret.Value.Length}")); } - Buffer.BlockCopy(ret.Value, 0, captureData, 512 * 4, 512 * 4); + Buffer.BlockCopy(ret.Value, 0, captureData, 0, captureData.Length); } return captureData; diff --git a/src/APIClient.ts b/src/APIClient.ts index 8bd346c..f712998 100644 --- a/src/APIClient.ts +++ b/src/APIClient.ts @@ -1,6 +1,6 @@ //---------------------- // -// Generated using the NSwag toolchain v14.3.0.0 (NJsonSchema v11.2.0.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org) +// Generated using the NSwag toolchain v14.4.0.0 (NJsonSchema v11.3.2.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org) // //---------------------- @@ -8,58 +8,135 @@ /* eslint-disable */ // ReSharper disable InconsistentNaming -export class VideoStreamClient { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; +import axios, { AxiosError, type AxiosInstance, type AxiosRequestConfig, type AxiosResponse, type CancelToken } from 'axios'; + +export class Client { + protected instance: AxiosInstance; + protected baseUrl: string; protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - this.http = http ? http : window as any; + constructor(baseUrl?: string, instance?: AxiosInstance) { + + this.instance = instance || axios.create(); + this.baseUrl = baseUrl ?? "http://127.0.0.1:5000"; + + } + + getGetAPIClientCode( cancelToken?: CancelToken): Promise { + let url_ = this.baseUrl + "/GetAPIClientCode"; + url_ = url_.replace(/[?&]$/, ""); + + let options_: AxiosRequestConfig = { + method: "GET", + url: url_, + headers: { + }, + cancelToken + }; + + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { + return this.processGetGetAPIClientCode(_response); + }); + } + + protected processGetGetAPIClientCode(response: AxiosResponse): Promise { + const status = response.status; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } + if (status === 200) { + const _responseText = response.data; + return Promise.resolve(null as any); + + } else if (status !== 200 && status !== 204) { + const _responseText = response.data; + return throwException("An unexpected server error occurred.", status, _responseText, _headers); + } + return Promise.resolve(null as any); + } +} + +export class VideoStreamClient { + protected instance: AxiosInstance; + protected baseUrl: string; + protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; + + constructor(baseUrl?: string, instance?: AxiosInstance) { + + this.instance = instance || axios.create(); + + this.baseUrl = baseUrl ?? "http://127.0.0.1:5000"; + } /** * 获取 HTTP 视频流服务状态 * @return 服务状态信息 */ - getStatus(): Promise { + getStatus( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/VideoStream/Status"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processGetStatus(_response); }); } - protected processGetStatus(response: Response): Promise { + protected processGetStatus(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = Exception.fromJS(resultData500); return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -68,43 +145,57 @@ export class VideoStreamClient { * 获取 HTTP 视频流信息 * @return 流信息 */ - getStreamInfo(): Promise { + getStreamInfo( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/VideoStream/StreamInfo"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processGetStreamInfo(_response); }); } - protected processGetStreamInfo(response: Response): Promise { + protected processGetStreamInfo(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = StreamInfoResult.fromJS(resultData200); - return result200; - }); + return Promise.resolve(result200); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = Exception.fromJS(resultData500); return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -114,56 +205,70 @@ export class VideoStreamClient { * @param config 摄像头配置 * @return 配置结果 */ - configureCamera(config: CameraConfigRequest): Promise { + configureCamera(config: CameraConfigRequest, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/VideoStream/ConfigureCamera"; url_ = url_.replace(/[?&]$/, ""); const content_ = JSON.stringify(config); - let options_: RequestInit = { - body: content_, + let options_: AxiosRequestConfig = { + data: content_, method: "POST", + url: url_, headers: { "Content-Type": "application/json", "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processConfigureCamera(_response); }); } - protected processConfigureCamera(response: Response): Promise { + protected processConfigureCamera(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = resultData400 !== undefined ? resultData400 : null; return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = Exception.fromJS(resultData500); return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -172,44 +277,58 @@ export class VideoStreamClient { * 获取当前摄像头配置 * @return 摄像头配置信息 */ - getCameraConfig(): Promise { + getCameraConfig( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/VideoStream/CameraConfig"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processGetCameraConfig(_response); }); } - protected processGetCameraConfig(response: Response): Promise { + protected processGetCameraConfig(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = Exception.fromJS(resultData500); return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -219,7 +338,7 @@ export class VideoStreamClient { * @param enabled (optional) 是否启用服务 * @return 操作结果 */ - setEnabled(enabled: boolean | undefined): Promise { + setEnabled(enabled: boolean | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/VideoStream/SetEnabled?"; if (enabled === null) throw new Error("The parameter 'enabled' cannot be null."); @@ -227,40 +346,54 @@ export class VideoStreamClient { url_ += "enabled=" + encodeURIComponent("" + enabled) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processSetEnabled(_response); }); } - protected processSetEnabled(response: Response): Promise { + protected processSetEnabled(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = Exception.fromJS(resultData500); return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -269,44 +402,58 @@ export class VideoStreamClient { * 测试 HTTP 视频流连接 * @return 连接测试结果 */ - testConnection(): Promise { + testConnection( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/VideoStream/TestConnection"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processTestConnection(_response); }); } - protected processTestConnection(response: Response): Promise { + protected processTestConnection(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = Exception.fromJS(resultData500); return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -316,57 +463,71 @@ export class VideoStreamClient { * @param request 分辨率配置请求 * @return 设置结果 */ - setResolution(request: ResolutionConfigRequest): Promise { + setResolution(request: ResolutionConfigRequest, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/VideoStream/Resolution"; url_ = url_.replace(/[?&]$/, ""); const content_ = JSON.stringify(request); - let options_: RequestInit = { - body: content_, + let options_: AxiosRequestConfig = { + data: content_, method: "POST", + url: url_, headers: { "Content-Type": "application/json", "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processSetResolution(_response); }); } - protected processSetResolution(response: Response): Promise { + protected processSetResolution(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = resultData400 !== undefined ? resultData400 : null; return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = resultData500 !== undefined ? resultData500 : null; return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -375,45 +536,59 @@ export class VideoStreamClient { * 获取当前分辨率 * @return 当前分辨率信息 */ - getCurrentResolution(): Promise { + getCurrentResolution( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/VideoStream/Resolution"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processGetCurrentResolution(_response); }); } - protected processGetCurrentResolution(response: Response): Promise { + protected processGetCurrentResolution(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = resultData500 !== undefined ? resultData500 : null; return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -422,45 +597,59 @@ export class VideoStreamClient { * 获取支持的分辨率列表 * @return 支持的分辨率列表 */ - getSupportedResolutions(): Promise { + getSupportedResolutions( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/VideoStream/SupportedResolutions"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processGetSupportedResolutions(_response); }); } - protected processGetSupportedResolutions(response: Response): Promise { + protected processGetSupportedResolutions(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = resultData500 !== undefined ? resultData500 : null; return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -469,53 +658,67 @@ export class VideoStreamClient { * 初始化摄像头自动对焦功能 * @return 初始化结果 */ - initAutoFocus(): Promise { + initAutoFocus( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/VideoStream/InitAutoFocus"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processInitAutoFocus(_response); }); } - protected processInitAutoFocus(response: Response): Promise { + protected processInitAutoFocus(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = resultData400 !== undefined ? resultData400 : null; return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = resultData500 !== undefined ? resultData500 : null; return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -524,53 +727,67 @@ export class VideoStreamClient { * 执行自动对焦 * @return 对焦结果 */ - autoFocus(): Promise { + autoFocus( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/VideoStream/AutoFocus"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processAutoFocus(_response); }); } - protected processAutoFocus(response: Response): Promise { + protected processAutoFocus(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = resultData400 !== undefined ? resultData400 : null; return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = resultData500 !== undefined ? resultData500 : null; return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -579,93 +796,126 @@ export class VideoStreamClient { * 执行一次自动对焦 (GET方式) * @return 对焦结果 */ - focus(): Promise { + focus( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/VideoStream/Focus"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processFocus(_response); }); } - protected processFocus(response: Response): Promise { + protected processFocus(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = resultData400 !== undefined ? resultData400 : null; return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = resultData500 !== undefined ? resultData500 : null; return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } } export class BsdlParserClient { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; + protected instance: AxiosInstance; + protected baseUrl: string; protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - this.http = http ? http : window as any; + constructor(baseUrl?: string, instance?: AxiosInstance) { + + this.instance = instance || axios.create(); + this.baseUrl = baseUrl ?? "http://127.0.0.1:5000"; + } /** * [TODO:description] * @return [TODO:return] */ - getBoundaryLogicalPorts(): Promise { + getBoundaryLogicalPorts( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/BsdlParser/GetBoundaryLogicalPorts"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { + responseType: "blob", method: "GET", + url: url_, headers: { "Accept": "application/octet-stream" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processGetBoundaryLogicalPorts(_response); }); } - protected processGetBoundaryLogicalPorts(response: Response): Promise { + protected processGetBoundaryLogicalPorts(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200 || status === 206) { - const contentDisposition = response.headers ? response.headers.get("content-disposition") : undefined; + const contentDisposition = response.headers ? response.headers["content-disposition"] : undefined; let fileNameMatch = contentDisposition ? /filename\*=(?:(\\?['"])(.*?)\1|(?:[^\s]+'.*?')?([^;\n]*))/g.exec(contentDisposition) : undefined; let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined; if (fileName) { @@ -674,24 +924,26 @@ export class BsdlParserClient { fileNameMatch = contentDisposition ? /filename="?([^"]*?)"?(;|$)/g.exec(contentDisposition) : undefined; fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined; } - return response.blob().then(blob => { return { fileName: fileName, data: blob, status: status, headers: _headers }; }); + return Promise.resolve({ fileName: fileName, status: status, data: new Blob([response.data], { type: response.headers["content-type"] }), headers: _headers }); } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } } export class DataClient { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; + protected instance: AxiosInstance; + protected baseUrl: string; protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - this.http = http ? http : window as any; + constructor(baseUrl?: string, instance?: AxiosInstance) { + + this.instance = instance || axios.create(); + this.baseUrl = baseUrl ?? "http://127.0.0.1:5000"; + } /** @@ -700,7 +952,7 @@ export class DataClient { * @param password (optional) 用户密码 * @return JWT 令牌字符串 */ - login(name: string | undefined, password: string | undefined): Promise { + login(name: string | undefined, password: string | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Data/Login?"; if (name === null) throw new Error("The parameter 'name' cannot be null."); @@ -712,44 +964,58 @@ export class DataClient { url_ += "password=" + encodeURIComponent("" + password) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processLogin(_response); }); } - protected processLogin(response: Response): Promise { + protected processLogin(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -758,44 +1024,58 @@ export class DataClient { * 测试用户认证,需携带有效 JWT * @return 认证成功信息 */ - testAuth(): Promise { + testAuth( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Data/TestAuth"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processTestAuth(_response); }); } - protected processTestAuth(response: Response): Promise { + protected processTestAuth(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -804,44 +1084,58 @@ export class DataClient { * 测试管理员用户认证,需携带有效 JWT * @return 认证成功信息 */ - testAdminAuth(): Promise { + testAdminAuth( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Data/TestAdminAuth"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processTestAdminAuth(_response); }); } - protected processTestAdminAuth(response: Response): Promise { + protected processTestAdminAuth(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -850,54 +1144,68 @@ export class DataClient { * 获取当前用户信息 * @return 用户信息,包括ID、用户名、邮箱和板卡ID */ - getUserInfo(): Promise { + getUserInfo( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Data/GetUserInfo"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processGetUserInfo(_response); }); } - protected processGetUserInfo(response: Response): Promise { + protected processGetUserInfo(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = UserInfo.fromJS(resultData200); - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -909,7 +1217,7 @@ export class DataClient { * @param password (optional) 用户密码 * @return 操作结果,成功返回 true,失败返回错误信息 */ - signUpUser(name: string | undefined, email: string | undefined, password: string | undefined): Promise { + signUpUser(name: string | undefined, email: string | undefined, password: string | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Data/SignUpUser?"; if (name === null) throw new Error("The parameter 'name' cannot be null."); @@ -925,44 +1233,58 @@ export class DataClient { url_ += "password=" + encodeURIComponent("" + password) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processSignUpUser(_response); }); } - protected processSignUpUser(response: Response): Promise { + protected processSignUpUser(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -971,7 +1293,7 @@ export class DataClient { * 获取一个空闲的实验板(普通用户权限) * @param durationHours (optional) 绑定持续时间(小时),默认为1小时 */ - getAvailableBoard(durationHours: number | undefined): Promise { + getAvailableBoard(durationHours: number | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Data/GetAvailableBoard?"; if (durationHours === null) throw new Error("The parameter 'durationHours' cannot be null."); @@ -979,43 +1301,57 @@ export class DataClient { url_ += "durationHours=" + encodeURIComponent("" + durationHours) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processGetAvailableBoard(_response); }); } - protected processGetAvailableBoard(response: Response): Promise { + protected processGetAvailableBoard(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = Board.fromJS(resultData200); - return result200; - }); + return Promise.resolve(result200); + } else if (status === 404) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result404: any = null; - let resultData404 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData404 = _responseText; result404 = ProblemDetails.fromJS(resultData404); return throwException("A server side error occurred.", status, _responseText, _headers, result404); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -1023,48 +1359,62 @@ export class DataClient { /** * 解除当前用户绑定的实验板(普通用户权限) */ - unbindBoard(): Promise { + unbindBoard( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Data/UnbindBoard"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processUnbindBoard(_response); }); } - protected processUnbindBoard(response: Response): Promise { + protected processUnbindBoard(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -1073,7 +1423,7 @@ export class DataClient { * 用户根据实验板ID获取实验板信息(普通用户权限) * @param id (optional) */ - getBoardByID(id: string | undefined): Promise { + getBoardByID(id: string | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Data/GetBoardByID?"; if (id === null) throw new Error("The parameter 'id' cannot be null."); @@ -1081,43 +1431,57 @@ export class DataClient { url_ += "id=" + encodeURIComponent("" + id) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processGetBoardByID(_response); }); } - protected processGetBoardByID(response: Response): Promise { + protected processGetBoardByID(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = Board.fromJS(resultData200); - return result200; - }); + return Promise.resolve(result200); + } else if (status === 404) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result404: any = null; - let resultData404 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData404 = _responseText; result404 = ProblemDetails.fromJS(resultData404); return throwException("A server side error occurred.", status, _responseText, _headers, result404); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -1126,7 +1490,7 @@ export class DataClient { * 新增板子(管理员权限) * @param name (optional) */ - addBoard(name: string | undefined): Promise { + addBoard(name: string | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Data/AddBoard?"; if (name === null) throw new Error("The parameter 'name' cannot be null."); @@ -1134,44 +1498,58 @@ export class DataClient { url_ += "name=" + encodeURIComponent("" + name) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processAddBoard(_response); }); } - protected processAddBoard(response: Response): Promise { + protected processAddBoard(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -1180,7 +1558,7 @@ export class DataClient { * 删除板子(管理员权限) * @param id (optional) */ - deleteBoard(id: string | undefined): Promise { + deleteBoard(id: string | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Data/DeleteBoard?"; if (id === null) throw new Error("The parameter 'id' cannot be null."); @@ -1188,44 +1566,58 @@ export class DataClient { url_ += "id=" + encodeURIComponent("" + id) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "DELETE", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processDeleteBoard(_response); }); } - protected processDeleteBoard(response: Response): Promise { + protected processDeleteBoard(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -1233,29 +1625,44 @@ export class DataClient { /** * 获取全部板子(管理员权限) */ - getAllBoards(): Promise { + getAllBoards( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Data/GetAllBoards"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processGetAllBoards(_response); }); } - protected processGetAllBoards(response: Response): Promise { + protected processGetAllBoards(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; if (Array.isArray(resultData200)) { result200 = [] as any; for (let item of resultData200) @@ -1264,16 +1671,15 @@ export class DataClient { else { result200 = null; } - return result200; - }); + return Promise.resolve(result200); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -1283,7 +1689,7 @@ export class DataClient { * @param boardId (optional) * @param newName (optional) */ - updateBoardName(boardId: string | undefined, newName: string | undefined): Promise { + updateBoardName(boardId: string | undefined, newName: string | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Data/UpdateBoardName?"; if (boardId === null) throw new Error("The parameter 'boardId' cannot be null."); @@ -1295,44 +1701,58 @@ export class DataClient { url_ += "newName=" + encodeURIComponent("" + newName) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processUpdateBoardName(_response); }); } - protected processUpdateBoardName(response: Response): Promise { + protected processUpdateBoardName(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -1342,7 +1762,7 @@ export class DataClient { * @param boardId (optional) * @param newStatus (optional) */ - updateBoardStatus(boardId: string | undefined, newStatus: BoardStatus | undefined): Promise { + updateBoardStatus(boardId: string | undefined, newStatus: BoardStatus | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Data/UpdateBoardStatus?"; if (boardId === null) throw new Error("The parameter 'boardId' cannot be null."); @@ -1354,57 +1774,74 @@ export class DataClient { url_ += "newStatus=" + encodeURIComponent("" + newStatus) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processUpdateBoardStatus(_response); }); } - protected processUpdateBoardStatus(response: Response): Promise { + protected processUpdateBoardStatus(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } } export class DDSClient { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; + protected instance: AxiosInstance; + protected baseUrl: string; protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - this.http = http ? http : window as any; + constructor(baseUrl?: string, instance?: AxiosInstance) { + + this.instance = instance || axios.create(); + this.baseUrl = baseUrl ?? "http://127.0.0.1:5000"; + } /** @@ -1415,7 +1852,7 @@ export class DDSClient { * @param waveNum (optional) [TODO:parameter] * @return [TODO:return] */ - setWaveNum(address: string | undefined, port: number | undefined, channelNum: number | undefined, waveNum: number | undefined): Promise { + setWaveNum(address: string | undefined, port: number | undefined, channelNum: number | undefined, waveNum: number | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/DDS/SetWaveNum?"; if (address === null) throw new Error("The parameter 'address' cannot be null."); @@ -1435,47 +1872,61 @@ export class DDSClient { url_ += "waveNum=" + encodeURIComponent("" + waveNum) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processSetWaveNum(_response); }); } - protected processSetWaveNum(response: Response): Promise { + protected processSetWaveNum(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ArgumentException.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = Exception.fromJS(resultData500); return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -1489,7 +1940,7 @@ export class DDSClient { * @param step (optional) [TODO:parameter] * @return [TODO:return] */ - setFreq(address: string | undefined, port: number | undefined, channelNum: number | undefined, waveNum: number | undefined, step: number | undefined): Promise { + setFreq(address: string | undefined, port: number | undefined, channelNum: number | undefined, waveNum: number | undefined, step: number | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/DDS/SetFreq?"; if (address === null) throw new Error("The parameter 'address' cannot be null."); @@ -1513,47 +1964,61 @@ export class DDSClient { url_ += "step=" + encodeURIComponent("" + step) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processSetFreq(_response); }); } - protected processSetFreq(response: Response): Promise { + protected processSetFreq(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ArgumentException.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = Exception.fromJS(resultData500); return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -1567,7 +2032,7 @@ export class DDSClient { * @param phase (optional) [TODO:parameter] * @return [TODO:return] */ - setPhase(address: string | undefined, port: number | undefined, channelNum: number | undefined, waveNum: number | undefined, phase: number | undefined): Promise { + setPhase(address: string | undefined, port: number | undefined, channelNum: number | undefined, waveNum: number | undefined, phase: number | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/DDS/SetPhase?"; if (address === null) throw new Error("The parameter 'address' cannot be null."); @@ -1591,180 +2056,370 @@ export class DDSClient { url_ += "phase=" + encodeURIComponent("" + phase) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processSetPhase(_response); }); } - protected processSetPhase(response: Response): Promise { + protected processSetPhase(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ArgumentException.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = Exception.fromJS(resultData500); return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } } export class DebuggerClient { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; + protected instance: AxiosInstance; + protected baseUrl: string; protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - this.http = http ? http : window as any; + constructor(baseUrl?: string, instance?: AxiosInstance) { + + this.instance = instance || axios.create(); + this.baseUrl = baseUrl ?? "http://127.0.0.1:5000"; + } /** - * 设置捕获模式 - * @param channelNum (optional) - * @param mode (optional) + * 设置指定信号线的捕获模式 + * @param wireNum (optional) 信号线编号(0~511) + * @param mode (optional) 捕获模式 */ - setMode(channelNum: number | undefined, mode: CaptureMode | undefined): Promise { + setMode(wireNum: number | undefined, mode: CaptureMode | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Debugger/SetMode?"; - if (channelNum === null) - throw new Error("The parameter 'channelNum' cannot be null."); - else if (channelNum !== undefined) - url_ += "channelNum=" + encodeURIComponent("" + channelNum) + "&"; + if (wireNum === null) + throw new Error("The parameter 'wireNum' cannot be null."); + else if (wireNum !== undefined) + url_ += "wireNum=" + encodeURIComponent("" + wireNum) + "&"; if (mode === null) throw new Error("The parameter 'mode' cannot be null."); else if (mode !== undefined) url_ += "mode=" + encodeURIComponent("" + mode) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processSetMode(_response); }); } - protected processSetMode(response: Response): Promise { + protected processSetMode(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } /** - * 启动触发器 + * 为每个通道中的每根线设置捕获模式 + * @param config 调试器配置信息,包含所有通道的捕获模式设置 */ - startTrigger(): Promise { + setChannelsMode(config: DebuggerConfig, cancelToken?: CancelToken): Promise { + let url_ = this.baseUrl + "/api/Debugger/SetChannelsMode"; + url_ = url_.replace(/[?&]$/, ""); + + const content_ = JSON.stringify(config); + + let options_: AxiosRequestConfig = { + data: content_, + method: "POST", + url: url_, + headers: { + "Content-Type": "application/json", + "Accept": "application/json" + }, + cancelToken + }; + + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { + return this.processSetChannelsMode(_response); + }); + } + + protected processSetChannelsMode(response: AxiosResponse): Promise { + const status = response.status; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } + if (status === 200) { + const _responseText = response.data; + let result200: any = null; + let resultData200 = _responseText; + result200 = resultData200 !== undefined ? resultData200 : null; + + return Promise.resolve(result200); + + } else if (status === 400) { + const _responseText = response.data; + let result400: any = null; + let resultData400 = _responseText; + result400 = ProblemDetails.fromJS(resultData400); + return throwException("A server side error occurred.", status, _responseText, _headers, result400); + + } else if (status === 500) { + const _responseText = response.data; + return throwException("A server side error occurred.", status, _responseText, _headers); + + } else if (status === 401) { + const _responseText = response.data; + let result401: any = null; + let resultData401 = _responseText; + result401 = ProblemDetails.fromJS(resultData401); + return throwException("A server side error occurred.", status, _responseText, _headers, result401); + + } else if (status !== 200 && status !== 204) { + const _responseText = response.data; + return throwException("An unexpected server error occurred.", status, _responseText, _headers); + } + return Promise.resolve(null as any); + } + + /** + * 启动触发器,开始信号捕获 + */ + startTrigger( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Debugger/StartTrigger"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processStartTrigger(_response); }); } - protected processStartTrigger(response: Response): Promise { + protected processStartTrigger(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; + return throwException("An unexpected server error occurred.", status, _responseText, _headers); + } + return Promise.resolve(null as any); + } + + /** + * 重新开始触发(刷新后再启动触发器) + */ + restartTrigger( cancelToken?: CancelToken): Promise { + let url_ = this.baseUrl + "/api/Debugger/RestartTrigger"; + url_ = url_.replace(/[?&]$/, ""); + + let options_: AxiosRequestConfig = { + method: "POST", + url: url_, + headers: { + "Accept": "application/json" + }, + cancelToken + }; + + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { + return this.processRestartTrigger(_response); + }); + } + + protected processRestartTrigger(response: AxiosResponse): Promise { + const status = response.status; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } + if (status === 200) { + const _responseText = response.data; + let result200: any = null; + let resultData200 = _responseText; + result200 = resultData200 !== undefined ? resultData200 : null; + + return Promise.resolve(result200); + + } else if (status === 400) { + const _responseText = response.data; + let result400: any = null; + let resultData400 = _responseText; + result400 = ProblemDetails.fromJS(resultData400); + return throwException("A server side error occurred.", status, _responseText, _headers, result400); + + } else if (status === 500) { + const _responseText = response.data; + return throwException("A server side error occurred.", status, _responseText, _headers); + + } else if (status === 401) { + const _responseText = response.data; + let result401: any = null; + let resultData401 = _responseText; + result401 = ProblemDetails.fromJS(resultData401); + return throwException("A server side error occurred.", status, _responseText, _headers, result401); + + } else if (status !== 200 && status !== 204) { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -1772,55 +2427,69 @@ export class DebuggerClient { /** * 读取触发器状态标志 */ - readFlag(): Promise { + readFlag( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Debugger/ReadFlag"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processReadFlag(_response); }); } - protected processReadFlag(response: Response): Promise { + protected processReadFlag(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -1828,222 +2497,287 @@ export class DebuggerClient { /** * 清除触发器状态标志 */ - clearFlag(): Promise { + clearFlag( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Debugger/ClearFlag"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processClearFlag(_response); }); } - protected processClearFlag(response: Response): Promise { + protected processClearFlag(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } /** - * 读取捕获数据 - * @param offset (optional) + * 读取捕获数据(等待触发完成后返回各通道采样数据) + * @param config 调试器配置信息,包含采样深度、端口数、通道配置等 */ - readData(offset: number | undefined): Promise { - let url_ = this.baseUrl + "/api/Debugger/ReadData?"; - if (offset === null) - throw new Error("The parameter 'offset' cannot be null."); - else if (offset !== undefined) - url_ += "offset=" + encodeURIComponent("" + offset) + "&"; + readData(config: DebuggerConfig, cancelToken?: CancelToken): Promise { + let url_ = this.baseUrl + "/api/Debugger/ReadData"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + const content_ = JSON.stringify(config); + + let options_: AxiosRequestConfig = { + data: content_, method: "GET", + url: url_, headers: { + "Content-Type": "application/json", "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processReadData(_response); }); } - protected processReadData(response: Response): Promise { + protected processReadData(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); - result200 = resultData200 !== undefined ? resultData200 : null; - - return result200; - }); + let resultData200 = _responseText; + if (Array.isArray(resultData200)) { + result200 = [] as any; + for (let item of resultData200) + result200!.push(ChannelCaptureData.fromJS(item)); + } + else { + result200 = null; + } + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } - return Promise.resolve(null as any); + return Promise.resolve(null as any); } /** - * 刷新调试器状态 + * 刷新调试器状态(重置采集状态等) */ - refresh(): Promise { + refresh( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Debugger/Refresh"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processRefresh(_response); }); } - protected processRefresh(response: Response): Promise { + protected processRefresh(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } } export class JtagClient { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; + protected instance: AxiosInstance; + protected baseUrl: string; protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - this.http = http ? http : window as any; + constructor(baseUrl?: string, instance?: AxiosInstance) { + + this.instance = instance || axios.create(); + this.baseUrl = baseUrl ?? "http://127.0.0.1:5000"; + } /** * 控制器首页信息 * @return 控制器描述信息 */ - index(): Promise { + index( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Jtag"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processIndex(_response); }); } - protected processIndex(response: Response): Promise { + protected processIndex(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -2054,7 +2788,7 @@ export class JtagClient { * @param port (optional) JTAG 设备端口 * @return 设备的 ID Code */ - getDeviceIDCode(address: string | undefined, port: number | undefined): Promise { + getDeviceIDCode(address: string | undefined, port: number | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Jtag/GetDeviceIDCode?"; if (address === null) throw new Error("The parameter 'address' cannot be null."); @@ -2066,47 +2800,61 @@ export class JtagClient { url_ += "port=" + encodeURIComponent("" + port) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processGetDeviceIDCode(_response); }); } - protected processGetDeviceIDCode(response: Response): Promise { + protected processGetDeviceIDCode(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = Exception.fromJS(resultData500); return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -2117,7 +2865,7 @@ export class JtagClient { * @param port (optional) JTAG 设备端口 * @return 状态寄存器的原始值、二进制表示和解码值 */ - readStatusReg(address: string | undefined, port: number | undefined): Promise { + readStatusReg(address: string | undefined, port: number | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Jtag/ReadStatusReg?"; if (address === null) throw new Error("The parameter 'address' cannot be null."); @@ -2129,39 +2877,53 @@ export class JtagClient { url_ += "port=" + encodeURIComponent("" + port) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processReadStatusReg(_response); }); } - protected processReadStatusReg(response: Response): Promise { + protected processReadStatusReg(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { - return; - }); + const _responseText = response.data; + return Promise.resolve(null as any); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -2172,7 +2934,7 @@ export class JtagClient { * @param file (optional) 比特流文件 * @return 上传结果 */ - uploadBitstream(address: string | undefined, file: FileParameter | undefined): Promise { + uploadBitstream(address: string | undefined, file: FileParameter | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Jtag/UploadBitstream?"; if (address === null) throw new Error("The parameter 'address' cannot be null."); @@ -2186,53 +2948,67 @@ export class JtagClient { else content_.append("file", file.data, file.fileName ? file.fileName : "file"); - let options_: RequestInit = { - body: content_, + let options_: AxiosRequestConfig = { + data: content_, method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processUploadBitstream(_response); }); } - protected processUploadBitstream(response: Response): Promise { + protected processUploadBitstream(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = resultData400 !== undefined ? resultData400 : null; return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -2243,7 +3019,7 @@ export class JtagClient { * @param port (optional) JTAG 设备端口 * @return 下载结果 */ - downloadBitstream(address: string | undefined, port: number | undefined): Promise { + downloadBitstream(address: string | undefined, port: number | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Jtag/DownloadBitstream?"; if (address === null) throw new Error("The parameter 'address' cannot be null."); @@ -2255,55 +3031,69 @@ export class JtagClient { url_ += "port=" + encodeURIComponent("" + port) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processDownloadBitstream(_response); }); } - protected processDownloadBitstream(response: Response): Promise { + protected processDownloadBitstream(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = resultData400 !== undefined ? resultData400 : null; return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = Exception.fromJS(resultData500); return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -2314,7 +3104,7 @@ export class JtagClient { * @param port (optional) JTAG 设备端口 * @return 边界扫描结果 */ - boundaryScanAllPorts(address: string | undefined, port: number | undefined): Promise { + boundaryScanAllPorts(address: string | undefined, port: number | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Jtag/BoundaryScanAllPorts?"; if (address === null) throw new Error("The parameter 'address' cannot be null."); @@ -2326,55 +3116,69 @@ export class JtagClient { url_ += "port=" + encodeURIComponent("" + port) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processBoundaryScanAllPorts(_response); }); } - protected processBoundaryScanAllPorts(response: Response): Promise { + protected processBoundaryScanAllPorts(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = resultData400 !== undefined ? resultData400 : null; return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = Exception.fromJS(resultData500); return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -2385,7 +3189,7 @@ export class JtagClient { * @param port (optional) JTAG 设备端口 * @return 逻辑端口状态字典 */ - boundaryScanLogicalPorts(address: string | undefined, port: number | undefined): Promise<{ [key: string]: boolean; }> { + boundaryScanLogicalPorts(address: string | undefined, port: number | undefined, cancelToken?: CancelToken): Promise<{ [key: string]: boolean; }> { let url_ = this.baseUrl + "/api/Jtag/BoundaryScanLogicalPorts?"; if (address === null) throw new Error("The parameter 'address' cannot be null."); @@ -2397,25 +3201,40 @@ export class JtagClient { url_ += "port=" + encodeURIComponent("" + port) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processBoundaryScanLogicalPorts(_response); }); } - protected processBoundaryScanLogicalPorts(response: Response): Promise<{ [key: string]: boolean; }> { + protected processBoundaryScanLogicalPorts(response: AxiosResponse): Promise<{ [key: string]: boolean; }> { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; if (resultData200) { result200 = {} as any; for (let key in resultData200) { @@ -2426,26 +3245,25 @@ export class JtagClient { else { result200 = null; } - return result200; - }); + return Promise.resolve<{ [key: string]: boolean; }>(result200); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = Exception.fromJS(resultData500); return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve<{ [key: string]: boolean; }>(null as any); } @@ -2457,7 +3275,7 @@ export class JtagClient { * @param speed (optional) 时钟速度 (Hz) * @return 设置结果 */ - setSpeed(address: string | undefined, port: number | undefined, speed: number | undefined): Promise { + setSpeed(address: string | undefined, port: number | undefined, speed: number | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Jtag/SetSpeed?"; if (address === null) throw new Error("The parameter 'address' cannot be null."); @@ -2473,60 +3291,77 @@ export class JtagClient { url_ += "speed=" + encodeURIComponent("" + speed) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processSetSpeed(_response); }); } - protected processSetSpeed(response: Response): Promise { + protected processSetSpeed(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = Exception.fromJS(resultData500); return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } } export class LogicAnalyzerClient { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; + protected instance: AxiosInstance; + protected baseUrl: string; protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - this.http = http ? http : window as any; + constructor(baseUrl?: string, instance?: AxiosInstance) { + + this.instance = instance || axios.create(); + this.baseUrl = baseUrl ?? "http://127.0.0.1:5000"; + } /** @@ -2535,7 +3370,7 @@ export class LogicAnalyzerClient { * @param force (optional) 是否强制捕获 * @return 操作结果 */ - setCaptureMode(captureOn: boolean | undefined, force: boolean | undefined): Promise { + setCaptureMode(captureOn: boolean | undefined, force: boolean | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/LogicAnalyzer/SetCaptureMode?"; if (captureOn === null) throw new Error("The parameter 'captureOn' cannot be null."); @@ -2547,51 +3382,65 @@ export class LogicAnalyzerClient { url_ += "force=" + encodeURIComponent("" + force) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processSetCaptureMode(_response); }); } - protected processSetCaptureMode(response: Response): Promise { + protected processSetCaptureMode(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -2600,55 +3449,69 @@ export class LogicAnalyzerClient { * 读取捕获状态 * @return 捕获状态 */ - getCaptureStatus(): Promise { + getCaptureStatus( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/LogicAnalyzer/GetCaptureStatus"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processGetCaptureStatus(_response); }); } - protected processGetCaptureStatus(response: Response): Promise { + protected processGetCaptureStatus(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -2658,7 +3521,7 @@ export class LogicAnalyzerClient { * @param mode (optional) 全局触发模式 * @return 操作结果 */ - setGlobalTrigMode(mode: GlobalCaptureMode | undefined): Promise { + setGlobalTrigMode(mode: GlobalCaptureMode | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/LogicAnalyzer/SetGlobalTrigMode?"; if (mode === null) throw new Error("The parameter 'mode' cannot be null."); @@ -2666,51 +3529,65 @@ export class LogicAnalyzerClient { url_ += "mode=" + encodeURIComponent("" + mode) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processSetGlobalTrigMode(_response); }); } - protected processSetGlobalTrigMode(response: Response): Promise { + protected processSetGlobalTrigMode(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -2722,7 +3599,7 @@ export class LogicAnalyzerClient { * @param val (optional) 信号值 * @return 操作结果 */ - setSignalTrigMode(signalIndex: number | undefined, op: SignalOperator | undefined, val: SignalValue | undefined): Promise { + setSignalTrigMode(signalIndex: number | undefined, op: SignalOperator | undefined, val: SignalValue | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/LogicAnalyzer/SetSignalTrigMode?"; if (signalIndex === null) throw new Error("The parameter 'signalIndex' cannot be null."); @@ -2738,51 +3615,65 @@ export class LogicAnalyzerClient { url_ += "val=" + encodeURIComponent("" + val) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processSetSignalTrigMode(_response); }); } - protected processSetSignalTrigMode(response: Response): Promise { + protected processSetSignalTrigMode(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -2792,59 +3683,73 @@ export class LogicAnalyzerClient { * @param config 捕获配置 * @return 操作结果 */ - configureCapture(config: CaptureConfig): Promise { + configureCapture(config: CaptureConfig, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/LogicAnalyzer/ConfigureCapture"; url_ = url_.replace(/[?&]$/, ""); const content_ = JSON.stringify(config); - let options_: RequestInit = { - body: content_, + let options_: AxiosRequestConfig = { + data: content_, method: "POST", + url: url_, headers: { "Content-Type": "application/json", "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processConfigureCapture(_response); }); } - protected processConfigureCapture(response: Response): Promise { + protected processConfigureCapture(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -2853,55 +3758,69 @@ export class LogicAnalyzerClient { * 强制捕获 * @return 操作结果 */ - forceCapture(): Promise { + forceCapture( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/LogicAnalyzer/ForceCapture"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processForceCapture(_response); }); } - protected processForceCapture(response: Response): Promise { + protected processForceCapture(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -2910,68 +3829,85 @@ export class LogicAnalyzerClient { * 读取捕获数据 * @return 捕获的波形数据(Base64编码) */ - getCaptureData(): Promise { + getCaptureData( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/LogicAnalyzer/GetCaptureData"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processGetCaptureData(_response); }); } - protected processGetCaptureData(response: Response): Promise { + protected processGetCaptureData(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } } export class MatrixKeyClient { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; + protected instance: AxiosInstance; + protected baseUrl: string; protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - this.http = http ? http : window as any; + constructor(baseUrl?: string, instance?: AxiosInstance) { + + this.instance = instance || axios.create(); + this.baseUrl = baseUrl ?? "http://127.0.0.1:5000"; + } /** @@ -2980,7 +3916,7 @@ export class MatrixKeyClient { * @param port (optional) 设备的端口号 * @return 返回操作结果的状态码 */ - enabelMatrixKey(address: string | undefined, port: number | undefined): Promise { + enabelMatrixKey(address: string | undefined, port: number | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/MatrixKey/EnabelMatrixKey?"; if (address === null) throw new Error("The parameter 'address' cannot be null."); @@ -2992,40 +3928,54 @@ export class MatrixKeyClient { url_ += "port=" + encodeURIComponent("" + port) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processEnabelMatrixKey(_response); }); } - protected processEnabelMatrixKey(response: Response): Promise { + protected processEnabelMatrixKey(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = Exception.fromJS(resultData500); return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -3036,7 +3986,7 @@ export class MatrixKeyClient { * @param port (optional) 设备的端口号 * @return 返回操作结果的状态码 */ - disableMatrixKey(address: string | undefined, port: number | undefined): Promise { + disableMatrixKey(address: string | undefined, port: number | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/MatrixKey/DisableMatrixKey?"; if (address === null) throw new Error("The parameter 'address' cannot be null."); @@ -3048,40 +3998,54 @@ export class MatrixKeyClient { url_ += "port=" + encodeURIComponent("" + port) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processDisableMatrixKey(_response); }); } - protected processDisableMatrixKey(response: Response): Promise { + protected processDisableMatrixKey(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = Exception.fromJS(resultData500); return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -3093,7 +4057,7 @@ export class MatrixKeyClient { * @param keyStates 矩阵键的状态数组,长度应为16 * @return 返回操作结果的状态码 */ - setMatrixKeyStatus(address: string | undefined, port: number | undefined, keyStates: boolean[]): Promise { + setMatrixKeyStatus(address: string | undefined, port: number | undefined, keyStates: boolean[], cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/MatrixKey/SetMatrixKeyStatus?"; if (address === null) throw new Error("The parameter 'address' cannot be null."); @@ -3107,96 +4071,127 @@ export class MatrixKeyClient { const content_ = JSON.stringify(keyStates); - let options_: RequestInit = { - body: content_, + let options_: AxiosRequestConfig = { + data: content_, method: "POST", + url: url_, headers: { "Content-Type": "application/json", "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processSetMatrixKeyStatus(_response); }); } - protected processSetMatrixKeyStatus(response: Response): Promise { + protected processSetMatrixKeyStatus(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = Exception.fromJS(resultData500); return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } } export class NetConfigClient { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; + protected instance: AxiosInstance; + protected baseUrl: string; protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - this.http = http ? http : window as any; + constructor(baseUrl?: string, instance?: AxiosInstance) { + + this.instance = instance || axios.create(); + this.baseUrl = baseUrl ?? "http://127.0.0.1:5000"; + } /** * 获取主机IP地址 * @return 主机IP地址 */ - getHostIP(): Promise { + getHostIP( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/NetConfig/GetHostIP"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processGetHostIP(_response); }); } - protected processGetHostIP(response: Response): Promise { + protected processGetHostIP(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -3205,41 +4200,55 @@ export class NetConfigClient { * 获取板卡IP地址 * @return 板卡IP地址 */ - getBoardIP(): Promise { + getBoardIP( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/NetConfig/GetBoardIP"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processGetBoardIP(_response); }); } - protected processGetBoardIP(response: Response): Promise { + protected processGetBoardIP(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -3248,41 +4257,55 @@ export class NetConfigClient { * 获取主机MAC地址 * @return 主机MAC地址 */ - getHostMAC(): Promise { + getHostMAC( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/NetConfig/GetHostMAC"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processGetHostMAC(_response); }); } - protected processGetHostMAC(response: Response): Promise { + protected processGetHostMAC(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -3291,41 +4314,55 @@ export class NetConfigClient { * 获取板卡MAC地址 * @return 板卡MAC地址 */ - getBoardMAC(): Promise { + getBoardMAC( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/NetConfig/GetBoardMAC"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processGetBoardMAC(_response); }); } - protected processGetBoardMAC(response: Response): Promise { + protected processGetBoardMAC(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -3334,40 +4371,54 @@ export class NetConfigClient { * 获取所有网络配置信息 * @return 网络配置信息 */ - getNetworkConfig(): Promise { + getNetworkConfig( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/NetConfig/GetNetworkConfig"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processGetNetworkConfig(_response); }); } - protected processGetNetworkConfig(response: Response): Promise { + protected processGetNetworkConfig(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = NetworkConfigDto.fromJS(resultData200); - return result200; - }); + return Promise.resolve(result200); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -3376,29 +4427,44 @@ export class NetConfigClient { * 获取本机所有网络接口信息 * @return 网络接口信息列表 */ - getLocalNetworkInterfaces(): Promise { + getLocalNetworkInterfaces( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/NetConfig/GetLocalNetworkInterfaces"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processGetLocalNetworkInterfaces(_response); }); } - protected processGetLocalNetworkInterfaces(response: Response): Promise { + protected processGetLocalNetworkInterfaces(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; if (Array.isArray(resultData200)) { result200 = [] as any; for (let item of resultData200) @@ -3407,16 +4473,15 @@ export class NetConfigClient { else { result200 = null; } - return result200; - }); + return Promise.resolve(result200); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -3426,7 +4491,7 @@ export class NetConfigClient { * @param hostIp (optional) 主机IP地址 * @return 操作结果 */ - setHostIP(hostIp: string | undefined): Promise { + setHostIP(hostIp: string | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/NetConfig/SetHostIP?"; if (hostIp === null) throw new Error("The parameter 'hostIp' cannot be null."); @@ -3434,44 +4499,58 @@ export class NetConfigClient { url_ += "hostIp=" + encodeURIComponent("" + hostIp) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processSetHostIP(_response); }); } - protected processSetHostIP(response: Response): Promise { + protected processSetHostIP(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -3481,7 +4560,7 @@ export class NetConfigClient { * @param newBoardIp (optional) 新的板卡IP地址 * @return 操作结果 */ - setBoardIP(newBoardIp: string | undefined): Promise { + setBoardIP(newBoardIp: string | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/NetConfig/SetBoardIP?"; if (newBoardIp === null) throw new Error("The parameter 'newBoardIp' cannot be null."); @@ -3489,44 +4568,58 @@ export class NetConfigClient { url_ += "newBoardIp=" + encodeURIComponent("" + newBoardIp) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processSetBoardIP(_response); }); } - protected processSetBoardIP(response: Response): Promise { + protected processSetBoardIP(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -3536,7 +4629,7 @@ export class NetConfigClient { * @param boardMac (optional) 板卡MAC地址(格式:AA:BB:CC:DD:EE:FF) * @return 操作结果 */ - setBoardMAC(boardMac: string | undefined): Promise { + setBoardMAC(boardMac: string | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/NetConfig/SetBoardMAC?"; if (boardMac === null) throw new Error("The parameter 'boardMac' cannot be null."); @@ -3544,44 +4637,58 @@ export class NetConfigClient { url_ += "boardMac=" + encodeURIComponent("" + boardMac) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processSetBoardMAC(_response); }); } - protected processSetBoardMAC(response: Response): Promise { + protected processSetBoardMAC(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -3591,7 +4698,7 @@ export class NetConfigClient { * @param hostMac (optional) 主机MAC地址(格式:AA:BB:CC:DD:EE:FF) * @return 操作结果 */ - setHostMAC(hostMac: string | undefined): Promise { + setHostMAC(hostMac: string | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/NetConfig/SetHostMAC?"; if (hostMac === null) throw new Error("The parameter 'hostMac' cannot be null."); @@ -3599,44 +4706,58 @@ export class NetConfigClient { url_ += "hostMac=" + encodeURIComponent("" + hostMac) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processSetHostMAC(_response); }); } - protected processSetHostMAC(response: Response): Promise { + protected processSetHostMAC(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -3645,41 +4766,55 @@ export class NetConfigClient { * 自动获取本机IP地址并设置为实验板主机IP * @return 操作结果 */ - updateHostIP(): Promise { + updateHostIP( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/NetConfig/UpdateHostIP"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processUpdateHostIP(_response); }); } - protected processUpdateHostIP(response: Response): Promise { + protected processUpdateHostIP(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -3688,48 +4823,62 @@ export class NetConfigClient { * 更新主机MAC地址 * @return 操作结果 */ - updateHostMAC(): Promise { + updateHostMAC( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/NetConfig/UpdateHostMAC"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processUpdateHostMAC(_response); }); } - protected processUpdateHostMAC(response: Response): Promise { + protected processUpdateHostMAC(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -3738,50 +4887,67 @@ export class NetConfigClient { * 获取本机网络信息 * @return 本机网络信息 */ - getLocalNetworkInfo(): Promise { + getLocalNetworkInfo( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/NetConfig/GetLocalNetworkInfo"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processGetLocalNetworkInfo(_response); }); } - protected processGetLocalNetworkInfo(response: Response): Promise { + protected processGetLocalNetworkInfo(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } } export class OscilloscopeApiClient { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; + protected instance: AxiosInstance; + protected baseUrl: string; protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - this.http = http ? http : window as any; + constructor(baseUrl?: string, instance?: AxiosInstance) { + + this.instance = instance || axios.create(); + this.baseUrl = baseUrl ?? "http://127.0.0.1:5000"; + } /** @@ -3789,59 +4955,73 @@ export class OscilloscopeApiClient { * @param config 示波器配置 * @return 操作结果 */ - initialize(config: OscilloscopeFullConfig): Promise { + initialize(config: OscilloscopeFullConfig, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/OscilloscopeApi/Initialize"; url_ = url_.replace(/[?&]$/, ""); const content_ = JSON.stringify(config); - let options_: RequestInit = { - body: content_, + let options_: AxiosRequestConfig = { + data: content_, method: "POST", + url: url_, headers: { "Content-Type": "application/json", "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processInitialize(_response); }); } - protected processInitialize(response: Response): Promise { + protected processInitialize(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -3850,55 +5030,69 @@ export class OscilloscopeApiClient { * 启动捕获 * @return 操作结果 */ - startCapture(): Promise { + startCapture( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/OscilloscopeApi/StartCapture"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processStartCapture(_response); }); } - protected processStartCapture(response: Response): Promise { + protected processStartCapture(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -3907,55 +5101,69 @@ export class OscilloscopeApiClient { * 停止捕获 * @return 操作结果 */ - stopCapture(): Promise { + stopCapture( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/OscilloscopeApi/StopCapture"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processStopCapture(_response); }); } - protected processStopCapture(response: Response): Promise { + protected processStopCapture(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -3964,54 +5172,68 @@ export class OscilloscopeApiClient { * 获取示波器数据和状态 * @return 示波器数据和状态信息 */ - getData(): Promise { + getData( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/OscilloscopeApi/GetData"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processGetData(_response); }); } - protected processGetData(response: Response): Promise { + protected processGetData(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = OscilloscopeDataResponse.fromJS(resultData200); - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -4022,7 +5244,7 @@ export class OscilloscopeApiClient { * @param risingEdge (optional) 触发边沿(true为上升沿,false为下降沿) * @return 操作结果 */ - updateTrigger(level: number | undefined, risingEdge: boolean | undefined): Promise { + updateTrigger(level: number | undefined, risingEdge: boolean | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/OscilloscopeApi/UpdateTrigger?"; if (level === null) throw new Error("The parameter 'level' cannot be null."); @@ -4034,51 +5256,65 @@ export class OscilloscopeApiClient { url_ += "risingEdge=" + encodeURIComponent("" + risingEdge) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processUpdateTrigger(_response); }); } - protected processUpdateTrigger(response: Response): Promise { + protected processUpdateTrigger(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -4089,7 +5325,7 @@ export class OscilloscopeApiClient { * @param decimationRate (optional) 抽样率(0-1023) * @return 操作结果 */ - updateSampling(horizontalShift: number | undefined, decimationRate: number | undefined): Promise { + updateSampling(horizontalShift: number | undefined, decimationRate: number | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/OscilloscopeApi/UpdateSampling?"; if (horizontalShift === null) throw new Error("The parameter 'horizontalShift' cannot be null."); @@ -4101,51 +5337,65 @@ export class OscilloscopeApiClient { url_ += "decimationRate=" + encodeURIComponent("" + decimationRate) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processUpdateSampling(_response); }); } - protected processUpdateSampling(response: Response): Promise { + protected processUpdateSampling(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -4154,68 +5404,85 @@ export class OscilloscopeApiClient { * 手动刷新RAM * @return 操作结果 */ - refreshRAM(): Promise { + refreshRAM( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/OscilloscopeApi/RefreshRAM"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processRefreshRAM(_response); }); } - protected processRefreshRAM(response: Response): Promise { + protected processRefreshRAM(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ProblemDetails.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status === 401) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result401: any = null; - let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData401 = _responseText; result401 = ProblemDetails.fromJS(resultData401); return throwException("A server side error occurred.", status, _responseText, _headers, result401); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } } export class PowerClient { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; + protected instance: AxiosInstance; + protected baseUrl: string; protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - this.http = http ? http : window as any; + constructor(baseUrl?: string, instance?: AxiosInstance) { + + this.instance = instance || axios.create(); + this.baseUrl = baseUrl ?? "http://127.0.0.1:5000"; + } /** @@ -4225,7 +5492,7 @@ export class PowerClient { * @param enable (optional) [TODO:parameter] * @return [TODO:return] */ - setPowerOnOff(address: string | undefined, port: number | undefined, enable: boolean | undefined): Promise { + setPowerOnOff(address: string | undefined, port: number | undefined, enable: boolean | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Power/SetPowerOnOff?"; if (address === null) throw new Error("The parameter 'address' cannot be null."); @@ -4241,53 +5508,70 @@ export class PowerClient { url_ += "enable=" + encodeURIComponent("" + enable) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processSetPowerOnOff(_response); }); } - protected processSetPowerOnOff(response: Response): Promise { + protected processSetPowerOnOff(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = Exception.fromJS(resultData500); return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } } export class RemoteUpdateClient { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; + protected instance: AxiosInstance; + protected baseUrl: string; protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - this.http = http ? http : window as any; + constructor(baseUrl?: string, instance?: AxiosInstance) { + + this.instance = instance || axios.create(); + this.baseUrl = baseUrl ?? "http://127.0.0.1:5000"; + } /** @@ -4299,7 +5583,7 @@ export class RemoteUpdateClient { * @param bitstream3 (optional) 比特流文件3 * @return 上传结果 */ - uploadBitstreams(address: string | undefined, goldenBitream: FileParameter | null | undefined, bitstream1: FileParameter | null | undefined, bitstream2: FileParameter | null | undefined, bitstream3: FileParameter | null | undefined): Promise { + uploadBitstreams(address: string | undefined, goldenBitream: FileParameter | null | undefined, bitstream1: FileParameter | null | undefined, bitstream2: FileParameter | null | undefined, bitstream3: FileParameter | null | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/RemoteUpdate/UploadBitstream?"; if (address === null) throw new Error("The parameter 'address' cannot be null."); @@ -4317,41 +5601,55 @@ export class RemoteUpdateClient { if (bitstream3 !== null && bitstream3 !== undefined) content_.append("bitstream3", bitstream3.data, bitstream3.fileName ? bitstream3.fileName : "bitstream3"); - let options_: RequestInit = { - body: content_, + let options_: AxiosRequestConfig = { + data: content_, method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processUploadBitstreams(_response); }); } - protected processUploadBitstreams(response: Response): Promise { + protected processUploadBitstreams(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ArgumentException.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -4362,7 +5660,7 @@ export class RemoteUpdateClient { * @param port (optional) 设备端口 * @param bitstreamNum (optional) 比特流位号 */ - updateBitstream(address: string | undefined, port: number | undefined, bitstreamNum: number | undefined): Promise { + updateBitstream(address: string | undefined, port: number | undefined, bitstreamNum: number | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/RemoteUpdate/DownloadBitstream?"; if (address === null) throw new Error("The parameter 'address' cannot be null."); @@ -4378,47 +5676,61 @@ export class RemoteUpdateClient { url_ += "bitstreamNum=" + encodeURIComponent("" + bitstreamNum) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processUpdateBitstream(_response); }); } - protected processUpdateBitstream(response: Response): Promise { + protected processUpdateBitstream(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ArgumentException.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = Exception.fromJS(resultData500); return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -4430,7 +5742,7 @@ export class RemoteUpdateClient { * @param bitstreamNum (optional) 比特流编号 * @return 总共上传比特流的数量 */ - downloadMultiBitstreams(address: string | undefined, port: number | undefined, bitstreamNum: number | null | undefined): Promise { + downloadMultiBitstreams(address: string | undefined, port: number | undefined, bitstreamNum: number | null | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/RemoteUpdate/DownloadMultiBitstreams?"; if (address === null) throw new Error("The parameter 'address' cannot be null."); @@ -4444,47 +5756,61 @@ export class RemoteUpdateClient { url_ += "bitstreamNum=" + encodeURIComponent("" + bitstreamNum) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processDownloadMultiBitstreams(_response); }); } - protected processDownloadMultiBitstreams(response: Response): Promise { + protected processDownloadMultiBitstreams(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ArgumentException.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = Exception.fromJS(resultData500); return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -4496,7 +5822,7 @@ export class RemoteUpdateClient { * @param bitstreamNum (optional) 比特流编号 * @return 操作结果 */ - hotResetBitstream(address: string | undefined, port: number | undefined, bitstreamNum: number | undefined): Promise { + hotResetBitstream(address: string | undefined, port: number | undefined, bitstreamNum: number | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/RemoteUpdate/HotResetBitstream?"; if (address === null) throw new Error("The parameter 'address' cannot be null."); @@ -4512,47 +5838,61 @@ export class RemoteUpdateClient { url_ += "bitstreamNum=" + encodeURIComponent("" + bitstreamNum) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processHotResetBitstream(_response); }); } - protected processHotResetBitstream(response: Response): Promise { + protected processHotResetBitstream(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ArgumentException.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = Exception.fromJS(resultData500); return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -4563,7 +5903,7 @@ export class RemoteUpdateClient { * @param port (optional) [TODO:parameter] * @return [TODO:return] */ - getFirmwareVersion(address: string | undefined, port: number | undefined): Promise { + getFirmwareVersion(address: string | undefined, port: number | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/RemoteUpdate/GetFirmwareVersion?"; if (address === null) throw new Error("The parameter 'address' cannot be null."); @@ -4575,145 +5915,193 @@ export class RemoteUpdateClient { url_ += "port=" + encodeURIComponent("" + port) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processGetFirmwareVersion(_response); }); } - protected processGetFirmwareVersion(response: Response): Promise { + protected processGetFirmwareVersion(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status === 400) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result400: any = null; - let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData400 = _responseText; result400 = ArgumentException.fromJS(resultData400); return throwException("A server side error occurred.", status, _responseText, _headers, result400); - }); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result500: any = null; - let resultData500 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData500 = _responseText; result500 = Exception.fromJS(resultData500); return throwException("A server side error occurred.", status, _responseText, _headers, result500); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } } export class TutorialClient { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; + protected instance: AxiosInstance; + protected baseUrl: string; protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - this.http = http ? http : window as any; + constructor(baseUrl?: string, instance?: AxiosInstance) { + + this.instance = instance || axios.create(); + this.baseUrl = baseUrl ?? "http://127.0.0.1:5000"; + } /** * 获取所有可用的教程目录 * @return 教程目录列表 */ - getTutorials(): Promise { + getTutorials( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/Tutorial"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processGetTutorials(_response); }); } - protected processGetTutorials(response: Response): Promise { + protected processGetTutorials(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { - return; - }); + const _responseText = response.data; + return Promise.resolve(null as any); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } } export class UDPClient { - private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; - private baseUrl: string; + protected instance: AxiosInstance; + protected baseUrl: string; protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { - this.http = http ? http : window as any; + constructor(baseUrl?: string, instance?: AxiosInstance) { + + this.instance = instance || axios.create(); + this.baseUrl = baseUrl ?? "http://127.0.0.1:5000"; + } /** * 页面 */ - index(): Promise { + index( cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/UDP"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processIndex(_response); }); } - protected processIndex(response: Response): Promise { + protected processIndex(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; result200 = resultData200 !== undefined ? resultData200 : null; - return result200; - }); + return Promise.resolve(result200); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -4725,7 +6113,7 @@ export class UDPClient { * @param text (optional) 发送的文本 * @return 发送成功 */ - sendString(address: string | undefined, port: number | undefined, text: string | undefined): Promise { + sendString(address: string | undefined, port: number | undefined, text: string | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/UDP/SendString?"; if (address === null) throw new Error("The parameter 'address' cannot be null."); @@ -4741,32 +6129,46 @@ export class UDPClient { url_ += "text=" + encodeURIComponent("" + text) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processSendString(_response); }); } - protected processSendString(response: Response): Promise { + protected processSendString(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { - return; - }); + const _responseText = response.data; + return Promise.resolve(null as any); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("\u53d1\u9001\u5931\u8d25", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -4777,7 +6179,7 @@ export class UDPClient { * @param port (optional) 设备端口号 * @param bytes (optional) 16进制文本 */ - sendBytes(address: string | undefined, port: number | undefined, bytes: string | undefined): Promise { + sendBytes(address: string | undefined, port: number | undefined, bytes: string | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/UDP/SendBytes?"; if (address === null) throw new Error("The parameter 'address' cannot be null."); @@ -4793,32 +6195,46 @@ export class UDPClient { url_ += "bytes=" + encodeURIComponent("" + bytes) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processSendBytes(_response); }); } - protected processSendBytes(response: Response): Promise { + protected processSendBytes(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { - return; - }); + const _responseText = response.data; + return Promise.resolve(null as any); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -4829,7 +6245,7 @@ export class UDPClient { * @param port (optional) UDP 端口号 * @param opts 地址包选项 */ - sendAddrPackage(address: string | undefined, port: number | undefined, opts: SendAddrPackOptions): Promise { + sendAddrPackage(address: string | undefined, port: number | undefined, opts: SendAddrPackOptions, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/UDP/SendAddrPackage?"; if (address === null) throw new Error("The parameter 'address' cannot be null."); @@ -4843,34 +6259,48 @@ export class UDPClient { const content_ = JSON.stringify(opts); - let options_: RequestInit = { - body: content_, + let options_: AxiosRequestConfig = { + data: content_, method: "POST", + url: url_, headers: { "Content-Type": "application/json", - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processSendAddrPackage(_response); }); } - protected processSendAddrPackage(response: Response): Promise { + protected processSendAddrPackage(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { - return; - }); + const _responseText = response.data; + return Promise.resolve(null as any); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -4881,7 +6311,7 @@ export class UDPClient { * @param port (optional) UDP 端口号 * @param data (optional) 16进制数据 */ - sendDataPackage(address: string | undefined, port: number | undefined, data: string | undefined): Promise { + sendDataPackage(address: string | undefined, port: number | undefined, data: string | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/UDP/SendDataPackage?"; if (address === null) throw new Error("The parameter 'address' cannot be null."); @@ -4897,32 +6327,46 @@ export class UDPClient { url_ += "data=" + encodeURIComponent("" + data) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "POST", + url: url_, headers: { - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processSendDataPackage(_response); }); } - protected processSendDataPackage(response: Response): Promise { + protected processSendDataPackage(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { - return; - }); + const _responseText = response.data; + return Promise.resolve(null as any); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -4932,7 +6376,7 @@ export class UDPClient { * @param address (optional) IP地址 * @param taskID (optional) 任务ID */ - getRecvDataArray(address: string | undefined, taskID: number | undefined): Promise { + getRecvDataArray(address: string | undefined, taskID: number | undefined, cancelToken?: CancelToken): Promise { let url_ = this.baseUrl + "/api/UDP/GetRecvDataArray?"; if (address === null) throw new Error("The parameter 'address' cannot be null."); @@ -4944,25 +6388,40 @@ export class UDPClient { url_ += "taskID=" + encodeURIComponent("" + taskID) + "&"; url_ = url_.replace(/[?&]$/, ""); - let options_: RequestInit = { + let options_: AxiosRequestConfig = { method: "GET", + url: url_, headers: { "Accept": "application/json" - } + }, + cancelToken }; - return this.http.fetch(url_, options_).then((_response: Response) => { + return this.instance.request(options_).catch((_error: any) => { + if (isAxiosError(_error) && _error.response) { + return _error.response; + } else { + throw _error; + } + }).then((_response: AxiosResponse) => { return this.processGetRecvDataArray(_response); }); } - protected processGetRecvDataArray(response: Response): Promise { + protected processGetRecvDataArray(response: AxiosResponse): Promise { const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + let _headers: any = {}; + if (response.headers && typeof response.headers === "object") { + for (const k in response.headers) { + if (response.headers.hasOwnProperty(k)) { + _headers[k] = response.headers[k]; + } + } + } if (status === 200) { - return response.text().then((_responseText) => { + const _responseText = response.data; let result200: any = null; - let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + let resultData200 = _responseText; if (Array.isArray(resultData200)) { result200 = [] as any; for (let item of resultData200) @@ -4971,16 +6430,15 @@ export class UDPClient { else { result200 = null; } - return result200; - }); + return Promise.resolve(result200); + } else if (status === 500) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("A server side error occurred.", status, _responseText, _headers); - }); + } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { + const _responseText = response.data; return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); } return Promise.resolve(null as any); } @@ -5523,6 +6981,223 @@ export enum CaptureMode { Fall = 4, } +/** 调试器整体配置信息 */ +export class DebuggerConfig implements IDebuggerConfig { + /** 时钟频率 + */ + clkFreq!: number; + /** 总端口数量 + */ + totalPortNum!: number; + /** 捕获深度(采样点数) + */ + captureDepth!: number; + /** 触发器数量 + */ + triggerNum!: number; + /** 所有信号通道的配置信息 + */ + channelConfigs!: ChannelConfig[]; + + constructor(data?: IDebuggerConfig) { + if (data) { + for (var property in data) { + if (data.hasOwnProperty(property)) + (this)[property] = (data)[property]; + } + } + if (!data) { + this.channelConfigs = []; + } + } + + init(_data?: any) { + if (_data) { + this.clkFreq = _data["clkFreq"]; + this.totalPortNum = _data["totalPortNum"]; + this.captureDepth = _data["captureDepth"]; + this.triggerNum = _data["triggerNum"]; + if (Array.isArray(_data["channelConfigs"])) { + this.channelConfigs = [] as any; + for (let item of _data["channelConfigs"]) + this.channelConfigs!.push(ChannelConfig.fromJS(item)); + } + } + } + + static fromJS(data: any): DebuggerConfig { + data = typeof data === 'object' ? data : {}; + let result = new DebuggerConfig(); + result.init(data); + return result; + } + + toJSON(data?: any) { + data = typeof data === 'object' ? data : {}; + data["clkFreq"] = this.clkFreq; + data["totalPortNum"] = this.totalPortNum; + data["captureDepth"] = this.captureDepth; + data["triggerNum"] = this.triggerNum; + if (Array.isArray(this.channelConfigs)) { + data["channelConfigs"] = []; + for (let item of this.channelConfigs) + data["channelConfigs"].push(item ? item.toJSON() : undefined); + } + return data; + } +} + +/** 调试器整体配置信息 */ +export interface IDebuggerConfig { + /** 时钟频率 + */ + clkFreq: number; + /** 总端口数量 + */ + totalPortNum: number; + /** 捕获深度(采样点数) + */ + captureDepth: number; + /** 触发器数量 + */ + triggerNum: number; + /** 所有信号通道的配置信息 + */ + channelConfigs: ChannelConfig[]; +} + +/** 表示单个信号通道的配置信息 */ +export class ChannelConfig implements IChannelConfig { + /** 通道名称 + */ + name!: string; + /** 通道显示颜色(如前端波形显示用) + */ + color!: string; + /** 通道信号线宽度(位数) + */ + wireWidth!: number; + /** 信号线在父端口中的起始索引(bit) + */ + wireStartIndex!: number; + /** 父端口编号 + */ + parentPort!: number; + /** 捕获模式(如上升沿、下降沿等) + */ + mode!: CaptureMode; + + constructor(data?: IChannelConfig) { + if (data) { + for (var property in data) { + if (data.hasOwnProperty(property)) + (this)[property] = (data)[property]; + } + } + } + + init(_data?: any) { + if (_data) { + this.name = _data["name"]; + this.color = _data["color"]; + this.wireWidth = _data["wireWidth"]; + this.wireStartIndex = _data["wireStartIndex"]; + this.parentPort = _data["parentPort"]; + this.mode = _data["mode"]; + } + } + + static fromJS(data: any): ChannelConfig { + data = typeof data === 'object' ? data : {}; + let result = new ChannelConfig(); + result.init(data); + return result; + } + + toJSON(data?: any) { + data = typeof data === 'object' ? data : {}; + data["name"] = this.name; + data["color"] = this.color; + data["wireWidth"] = this.wireWidth; + data["wireStartIndex"] = this.wireStartIndex; + data["parentPort"] = this.parentPort; + data["mode"] = this.mode; + return data; + } +} + +/** 表示单个信号通道的配置信息 */ +export interface IChannelConfig { + /** 通道名称 + */ + name: string; + /** 通道显示颜色(如前端波形显示用) + */ + color: string; + /** 通道信号线宽度(位数) + */ + wireWidth: number; + /** 信号线在父端口中的起始索引(bit) + */ + wireStartIndex: number; + /** 父端口编号 + */ + parentPort: number; + /** 捕获模式(如上升沿、下降沿等) + */ + mode: CaptureMode; +} + +/** 单个通道的捕获数据 */ +export class ChannelCaptureData implements IChannelCaptureData { + /** 通道名称 + */ + name!: string; + /** 通道捕获到的数据(Base64编码的UInt32数组) + */ + data!: string; + + constructor(data?: IChannelCaptureData) { + if (data) { + for (var property in data) { + if (data.hasOwnProperty(property)) + (this)[property] = (data)[property]; + } + } + } + + init(_data?: any) { + if (_data) { + this.name = _data["name"]; + this.data = _data["data"]; + } + } + + static fromJS(data: any): ChannelCaptureData { + data = typeof data === 'object' ? data : {}; + let result = new ChannelCaptureData(); + result.init(data); + return result; + } + + toJSON(data?: any) { + data = typeof data === 'object' ? data : {}; + data["name"] = this.name; + data["data"] = this.data; + return data; + } +} + +/** 单个通道的捕获数据 */ +export interface IChannelCaptureData { + /** 通道名称 + */ + name: string; + /** 通道捕获到的数据(Base64编码的UInt32数组) + */ + data: string; +} + /** 逻辑分析仪运行状态枚举 */ export enum CaptureStatus { None = 0, @@ -5605,7 +7280,7 @@ export class CaptureConfig implements ICaptureConfig { if (Array.isArray(this.signalConfigs)) { data["signalConfigs"] = []; for (let item of this.signalConfigs) - data["signalConfigs"].push(item.toJSON()); + data["signalConfigs"].push(item ? item.toJSON() : undefined); } return data; } @@ -6131,4 +7806,8 @@ function throwException(message: string, status: number, response: string, heade throw result; else throw new ApiException(message, status, response, headers, null); +} + +function isAxiosError(obj: any): obj is AxiosError { + return obj && obj.isAxiosError === true; } \ No newline at end of file diff --git a/src/components/LogicAnalyzer/LogicalWaveFormDisplay.vue b/src/components/LogicAnalyzer/LogicalWaveFormDisplay.vue index 0573cb6..91a684f 100644 --- a/src/components/LogicAnalyzer/LogicalWaveFormDisplay.vue +++ b/src/components/LogicAnalyzer/LogicalWaveFormDisplay.vue @@ -21,7 +21,7 @@

暂无逻辑分析数据

-

点击下方按钮生成测试数据用于观察

+

点击下方按钮开始捕获

-

调试器通道配置

-
- +
+

调试器通道配置

+
+ + +
+
+ +
+
请先进行调试器基本配置
+ +
+ +
+
-
总通道数
-
16
-
逻辑分析仪通道
-
- -
-
启用通道
-
- {{ channels.filter((ch) => ch.visible).length }} +
启用端口数
+
+ {{ config.totalPortNum }}
-
当前激活通道
+
每端口最大32线
-
-
采样率
-
5MHz
-
最大采样频率
+
最大线宽数
+
+ {{ config.totalPortNum * 32 }} +
+
启用端口数 × 32
+
+
+
已用线宽数
+
+ {{ channels.reduce((sum, ch) => sum + ch.width, 0) }} +
+
所有通道线宽总和
+
+
+
采样深度
+
+ {{ config.captureDepth }} +
+
每通道采样点数
+
+
+
时钟频率
+
{{ config.clkFreq }} MHz
+
采样时钟
- +
名称 显示 颜色 触发模式 - 数据位数 + 数据位宽(起始:宽度) + 父端口编号 操作
+
+ + + + +