diff --git a/src/store/features/alarmSlice.js b/src/store/features/alarmSlice.js new file mode 100644 index 0000000..371aa35 --- /dev/null +++ b/src/store/features/alarmSlice.js @@ -0,0 +1,19 @@ +import { createSlice } from "@reduxjs/toolkit"; + +export const initialState = { + list: [], +}; + +const alarmSlice = createSlice({ + name: "alarm", + initialState, + reducers: { + setList(state, action) { + console.log("[alarm store] setting list ---> ", action); + state.list = action.payload; + }, + }, +}); + +export default alarmSlice.reducer; +export const { setList } = alarmSlice.actions; diff --git a/src/store/index.js b/src/store/index.js index f73891b..e72c774 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -14,9 +14,12 @@ import annealFanFrequenceReducer from "./features/annealFanFrequenceSlice"; import annealFanInfoReducer from "./features/annealFanInfoSlice"; import cuttingReducer from "./features/cuttingSlice"; import smokeReducer from "./features/smokeSlice"; +import alarmSlice from "./features/alarmSlice"; export const store = configureStore({ reducer: { + // 报警信息 + alarm: alarmSlice, // 窑炉信息 kiln: kilnReducer, // 投料机信息 diff --git a/src/utils/dcs.ts b/src/utils/dcs.ts index 515b3ac..5c8459a 100644 --- a/src/utils/dcs.ts +++ b/src/utils/dcs.ts @@ -1,4 +1,5 @@ import { store } from "../store"; +import { setList } from "../store/features/alarmSlice"; export default function handler(msg: MessageEvent) { let serializedData: { type: string; data: any } | null = null; @@ -8,6 +9,10 @@ export default function handler(msg: MessageEvent) { console.log("[*] websocket: [unable to serialize] ---> ", msg); } switch (serializedData?.type) { + case "alarmList": { + store.dispatch(setList(serializedData.data)) + break; + } case "KilnInfo": { store.dispatch({ type: "kiln/setKilnInfo", diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index c784bf7..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ - - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "commonjs", /* Specify what module code is generated. */ - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ - // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ - // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ - // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - // "outDir": "./", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ - - /* Type Checking */ - "strict": true, /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } -} diff --git a/websocket/modules/kiln.ts b/websocket/modules/kiln.ts deleted file mode 100644 index edf4b70..0000000 --- a/websocket/modules/kiln.ts +++ /dev/null @@ -1,18 +0,0 @@ -import utils from '../utils'; - -function genKilnInfo() { - return { - kilnPressure: utils.rand(0, 100) + 'Kpa', - waterTemp: utils.rand(0, 100) + '℃', - waterFlow: utils.rand(30, 90) + 'm³/h', - waterPressure: utils.rand(10, 50) + 'Kpa', - windPressure: utils.rand(10, 30) + 'Kpa', - gasPressure: utils.rand(10, 30) + 'Kpa', - // 碹顶加权温度 - topTemp: utils.rand(30, 60) + '℃', - // 融化加权温度 - meltTemp: utils.rand(100, 200) + '℃', - }; -} - -export default genKilnInfo; diff --git a/websocket/modules/navGas.ts b/websocket/modules/navGas.ts deleted file mode 100644 index 52623e2..0000000 --- a/websocket/modules/navGas.ts +++ /dev/null @@ -1,13 +0,0 @@ -// 天然气 -import utils from '../utils'; - -function getNavGasInfo(type: 'history' | 'realtime') { - switch (type) { - case 'history': - break; - case 'realtime': - break; - } -} - -export default getNavGasInfo; diff --git a/websocket/server.js b/websocket/server.js new file mode 100644 index 0000000..2522aa8 --- /dev/null +++ b/websocket/server.js @@ -0,0 +1,105 @@ +import { WebSocket, WebSocketServer } from "ws"; +import template from "./template.json"; +import utils from "./utils"; + +const wss = new WebSocketServer({ port: 9800 }); +const frequency = 10; // seconds +const frequency1 = 1200; // seconds +wss.on("connection", function (ws, req) { + // console.log("ws", ws); + console.log( + "Client in: ", + req.socket.remoteAddress, + "current users:", + wss.clients.size + ); + // ws.on("error", console.error); + // ws.emit("message", "connected"); + ws.on("open", function () { + console.log("connected"); + ws.send("connected"); + }); + ws.on("message", function (msg) { + console.log("message from client", msg); + ws.send("echo " + msg.toString()); + }); + ws.on("error", console.error); + + const timer = setInterval(() => { + sendMsg(ws, "kiln-info"); // 窑炉信息 + sendMsg(ws, "energy-cost"); // 运行状态 + sendMsg(ws, "run-state"); // 运行状态 + sendMsg(ws, "realtime"); + sendMsg(ws, "his-trend"); + // sendMsg(ws, 'gas'); + // sendMsg(ws, 'kiln-top'); + // sendMsg(ws, 'kiln-bottom'); + }, frequency * 1000); + + const timer1 = setInterval(() => { + // sendMsg(ws, 'run-state'); // 运行状态 + }, frequency1 * 1000); + + ws.on("close", function () { + console.log("停止监听"); + clearInterval(timer); + clearInterval(timer1); + }); +}); + +function sendMsg(ws, type) { + let data = {}; + switch (type) { + case "kiln-info": + for (const key in template.kilnInfo) { + data[key] = utils.getRandom(template.kilnInfo[key]); + } + break; + case "energy-cost": + for (const key in template.energyCost) { + data[key] = utils.getRandom(template.energyCost[key]); + } + break; + case "run-state": + data = template.runState; + data.fireDirection = + Math.floor(Math.random() * 10) % 2 === 0 ? "南火" : "北火"; + break; + case "realtime": + /** 天然气 实时流量 */ + data.gasii = template.realtime.gasii.map((v) => utils.getRandom(v)); + /** 助燃风 实时流量 */ + data.wind = template.realtime.wind.map((v) => utils.getRandom(v)); + break; + case "his-trend": + const hisTrend = { + gas: {}, + wind: {}, + }; + Object.keys(template.hisTrend.gas).forEach((key) => { + hisTrend.gas[key] = template.hisTrend.gas[key].map((v) => + utils.getRandom(v) + ); + }); + Object.keys(template.hisTrend.wind).forEach((key) => { + hisTrend.wind[key] = template.hisTrend.wind[key].map((v) => + utils.getRandom(v) + ); + }); + data = hisTrend; + break; + case "gas": + // data = template.gas; + break; + case "kiln-top": + // data = template.kilnTop; + break; + case "kiln-bottom": + // data = template.kilnBottom; + break; + default: + // data = 'You are connected!'; + break; + } + ws.send(JSON.stringify({ type, data })); +} diff --git a/websocket/server.ts b/websocket/server.ts deleted file mode 100644 index 2f161f8..0000000 --- a/websocket/server.ts +++ /dev/null @@ -1,133 +0,0 @@ -import { WebSocket, WebSocketServer } from 'ws'; -import template from './template.json'; -import utils from './utils'; - -const wss = new WebSocketServer({ port: 9800 }); -const frequency = 10; // seconds -const frequency1 = 1200; // seconds -wss.on('connection', function (ws, req) { - // console.log("ws", ws); - console.log( - 'Client in: ', - req.socket.remoteAddress, - 'current users:', - wss.clients.size, - ); - // ws.on("error", console.error); - // ws.emit("message", "connected"); - ws.on('open', function () { - console.log('connected'); - ws.send('connected'); - }); - ws.on('message', function (msg) { - console.log('message from client', msg); - ws.send('echo ' + msg.toString()); - }); - ws.on('error', console.error); - - const timer = setInterval(() => { - sendMsg(ws, 'kiln-info'); // 窑炉信息 - sendMsg(ws, 'energy-cost'); // 运行状态 - sendMsg(ws, 'run-state'); // 运行状态 - sendMsg(ws, 'realtime'); - sendMsg(ws, 'his-trend'); - // sendMsg(ws, 'gas'); - // sendMsg(ws, 'kiln-top'); - // sendMsg(ws, 'kiln-bottom'); - }, frequency * 1000); - - const timer1 = setInterval(() => { - // sendMsg(ws, 'run-state'); // 运行状态 - }, frequency1 * 1000); - - ws.on('close', function () { - console.log('停止监听'); - clearInterval(timer); - clearInterval(timer1); - }); -}); - -type MsgType = - | 'kiln-info' - | 'run-state' - | 'energy-cost' - | 'realtime' - | 'his-trend' - | 'fan' - | 'gas' - | 'kiln-top' - | 'kiln-bottom'; - -type ResponseData = { - [key: string]: string | string[]; -}; - -type ResponseDataComplex = { - [key: string]: ResponseData; -}; - -function sendMsg(ws: WebSocket, type: MsgType) { - let data: ResponseData | ResponseDataComplex = {}; - switch (type) { - case 'kiln-info': - for (const key in template.kilnInfo) { - data[key] = utils.getRandom( - template.kilnInfo[key as keyof typeof template.kilnInfo], - ); - } - break; - case 'energy-cost': - for (const key in template.energyCost) { - data[key] = utils.getRandom( - template.energyCost[key as keyof typeof template.energyCost], - ); - } - break; - case 'run-state': - data = template.runState; - data.fireDirection = - Math.floor(Math.random() * 10) % 2 === 0 ? '南火' : '北火'; - break; - case 'realtime': - /** 天然气 实时流量 */ - data.gasii = template.realtime.gasii.map((v) => utils.getRandom(v)); - /** 助燃风 实时流量 */ - data.wind = template.realtime.wind.map((v) => utils.getRandom(v)); - break; - case 'his-trend': - const hisTrend: { - gas: ResponseData; - wind: ResponseData; - } = { - gas: {}, - wind: {}, - }; - Object.keys(template.hisTrend.gas).forEach((key) => { - hisTrend.gas[key] = template.hisTrend.gas[ - key as keyof typeof template.hisTrend.gas - ].map((v) => utils.getRandom(v)); - }); - Object.keys(template.hisTrend.wind).forEach((key) => { - hisTrend.wind[key] = template.hisTrend.wind[ - key as keyof typeof template.hisTrend.wind - ].map((v) => utils.getRandom(v)); - }); - data = hisTrend; - break; - case 'gas': - // data = template.gas; - break; - case 'kiln-top': - // data = template.kilnTop; - break; - case 'kiln-bottom': - // data = template.kilnBottom; - break; - default: - // data = 'You are connected!'; - break; - } - // console.log("sendMsg: ", ws); - // ws.emit("message", JSON.stringify(data)); - ws.send(JSON.stringify({ type, data })); -} diff --git a/websocket/tsconfig.json b/websocket/tsconfig.json deleted file mode 100644 index 0f516e7..0000000 --- a/websocket/tsconfig.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ - - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "commonjs" /* Specify what module code is generated. */, - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ - // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ - // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ - // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ - "resolveJsonModule": true /* Enable importing .json files. */, - // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - // "outDir": "./", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - - /* Type Checking */ - "strict": true /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } -} diff --git a/websocket/utils/index.js b/websocket/utils/index.js new file mode 100644 index 0000000..306a733 --- /dev/null +++ b/websocket/utils/index.js @@ -0,0 +1,49 @@ +export default { + // 生成随机数 + randomNum({ min, max }, isFloat = false) { + if (isFloat) return (Math.random() * (max - min) + min).toFixed(2); + return Math.floor(Math.random() * (max - min + 1) + min); + }, + getMinmax(type) { + // : '*' | '.' | '+' | '$' + let min, max; + switch (type) { + case "*": + min = 30; + max = 150; + break; + case ".": + min = 60; + max = 200; + break; + case "+": + min = 20; + max = 70; + break; + case "$": + min = 1; + max = 100; + break; + } + return { min, max }; + }, + getRandom(value) { + value = value.replace( + "***", + "" + this.randomNum({ ...this.getMinmax("*") }) + ); + value = value.replace( + "...", + "" + this.randomNum({ ...this.getMinmax(".") }) + ); + value = value.replace( + "+++", + "" + this.randomNum({ ...this.getMinmax("+") }) + ); + value = value.replace( + "$$$", + "" + this.randomNum({ ...this.getMinmax("$") }, true) + ); + return value; + }, +}; diff --git a/websocket/utils/index.ts b/websocket/utils/index.ts deleted file mode 100644 index 291b0ae..0000000 --- a/websocket/utils/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -function rand(min: number, max: number) { - return Math.floor(Math.random() * (max - min + 1)) + min; -} - -export default { - rand, -}; diff --git a/websocket/utils/utils.ts b/websocket/utils/utils.ts deleted file mode 100644 index a614943..0000000 --- a/websocket/utils/utils.ts +++ /dev/null @@ -1,48 +0,0 @@ -export default { - // 生成随机数 - randomNum({ min, max }: { min: number; max: number }, isFloat = false) { - if (isFloat) return (Math.random() * (max - min) + min).toFixed(2); - return Math.floor(Math.random() * (max - min + 1) + min); - }, - getMinmax(type: '*' | '.' | '+' | '$') { - let min: number, max: number; - switch (type) { - case '*': - min = 30; - max = 150; - break; - case '.': - min = 60; - max = 200; - break; - case '+': - min = 20; - max = 70; - break; - case '$': - min = 1; - max = 100; - break; - } - return { min, max }; - }, - getRandom(value: string) { - value = value.replace( - '***', - '' + this.randomNum({ ...this.getMinmax('*') }), - ); - value = value.replace( - '...', - '' + this.randomNum({ ...this.getMinmax('.') }), - ); - value = value.replace( - '+++', - '' + this.randomNum({ ...this.getMinmax('+') }), - ); - value = value.replace( - '$$$', - '' + this.randomNum({ ...this.getMinmax('$') }, true), - ); - return value; - }, -};