From 9888c0fa2efa49a40ede4ab545880bfe20de494f Mon Sep 17 00:00:00 2001 From: kantimam Date: Sun, 17 Jan 2021 19:32:50 +0100 Subject: [PATCH] added pagination to generateAllReaderKeys to prevent the device from filling up the tcp buffer and dropping messages --- client/.eslintcache | 2 +- src/controllers/deviceController.ts | 60 +++++++++++++++++++---------- 2 files changed, 40 insertions(+), 22 deletions(-) diff --git a/client/.eslintcache b/client/.eslintcache index 8286167ea..719410599 100644 --- a/client/.eslintcache +++ b/client/.eslintcache @@ -1 +1 @@ -[{"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/index.js":"1","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/App.js":"2","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/reportWebVitals.js":"3","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/key/KeyCreate.jsx":"4","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/event/EventList.jsx":"5","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/newKey/NewKeyList.jsx":"6","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/reader/ReaderList.jsx":"7","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/access/AccessList.jsx":"8","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/key/KeyActions.jsx":"9","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/dashboard/index.js":"10","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/AuthProvider.js":"11","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/reader/ReaderShow.jsx":"12","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/key/KeyShow.jsx":"13","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/reader/QuickCreateBox.jsx":"14","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/reader/ReaderShowActions.jsx":"15","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/util/index.js":"16","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/key/KeyEdit.jsx":"17","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/reader/ReaderEdit.jsx":"18","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/customFields/DisabledInput.jsx":"19","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/customFields/TextButtonField.jsx":"20","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/user/UserList.jsx":"21","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/user/UserCreate.jsx":"22","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/user/UserEdit.jsx":"23","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/key/KeyList.jsx":"24"},{"size":572,"mtime":1608134531819,"results":"25","hashOfConfig":"26"},{"size":2845,"mtime":1610803752137,"results":"27","hashOfConfig":"26"},{"size":362,"mtime":1608031634838,"results":"28","hashOfConfig":"26"},{"size":707,"mtime":1608980699349,"results":"29","hashOfConfig":"26"},{"size":933,"mtime":1608569416512,"results":"30","hashOfConfig":"26"},{"size":700,"mtime":1608753769433,"results":"31","hashOfConfig":"26"},{"size":1969,"mtime":1608739318523,"results":"32","hashOfConfig":"26"},{"size":900,"mtime":1608569470516,"results":"33","hashOfConfig":"26"},{"size":1191,"mtime":1608569453952,"results":"34","hashOfConfig":"26"},{"size":145,"mtime":1608122750456,"results":"35","hashOfConfig":"26"},{"size":2239,"mtime":1610759976294,"results":"36","hashOfConfig":"26"},{"size":5977,"mtime":1610803510924,"results":"37","hashOfConfig":"26"},{"size":1216,"mtime":1608913308474,"results":"38","hashOfConfig":"26"},{"size":462,"mtime":1608215163660,"results":"39","hashOfConfig":"26"},{"size":3512,"mtime":1610803412195,"results":"40","hashOfConfig":"26"},{"size":333,"mtime":1608565751590,"results":"41","hashOfConfig":"26"},{"size":516,"mtime":1608567014856,"results":"42","hashOfConfig":"26"},{"size":1653,"mtime":1610803691953,"results":"43","hashOfConfig":"26"},{"size":589,"mtime":1608988571284,"results":"44","hashOfConfig":"26"},{"size":681,"mtime":1608995326573,"results":"45","hashOfConfig":"26"},{"size":626,"mtime":1610760635857,"results":"46","hashOfConfig":"26"},{"size":408,"mtime":1610761560249,"results":"47","hashOfConfig":"26"},{"size":528,"mtime":1610763065494,"results":"48","hashOfConfig":"26"},{"size":717,"mtime":1610803715121,"results":"49","hashOfConfig":"26"},{"filePath":"50","messages":"51","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},"8vagau",{"filePath":"53","messages":"54","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"55","messages":"56","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"57","messages":"58","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"59","messages":"60","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"61","messages":"62","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"63","messages":"64","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"65","messages":"66","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"67","messages":"68","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"69","messages":"70","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"71"},{"filePath":"72","messages":"73","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"74","messages":"75","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"76","messages":"77","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"78","messages":"79","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"80","messages":"81","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"82","messages":"83","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"84","messages":"85","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"86","messages":"87","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"88","messages":"89","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"90","messages":"91","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"92","messages":"93","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"94","messages":"95","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"96","usedDeprecatedRules":"52"},{"filePath":"97","messages":"98","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"99","messages":"100","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/index.js",[],["101","102"],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/App.js",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/reportWebVitals.js",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/key/KeyCreate.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/event/EventList.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/newKey/NewKeyList.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/reader/ReaderList.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/access/AccessList.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/key/KeyActions.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/dashboard/index.js",[],["103","104"],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/AuthProvider.js",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/reader/ReaderShow.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/key/KeyShow.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/reader/QuickCreateBox.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/reader/ReaderShowActions.jsx",["105"],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/util/index.js",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/key/KeyEdit.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/reader/ReaderEdit.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/customFields/DisabledInput.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/customFields/TextButtonField.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/user/UserList.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/user/UserCreate.jsx",["106","107","108","109"],"import * as React from \"react\";\nimport { Create, SimpleForm, TextInput, BooleanInput, DateTimeInput, ReferenceInput, SelectInput } from 'react-admin';\n\n\n\nconst UserCreate = (props) => (\n \n \n \n \n \n \n);\n\nexport default UserCreate","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/user/UserEdit.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/key/KeyList.jsx",[],{"ruleId":"110","replacedBy":"111"},{"ruleId":"112","replacedBy":"113"},{"ruleId":"110","replacedBy":"114"},{"ruleId":"112","replacedBy":"115"},{"ruleId":"116","severity":1,"message":"117","line":2,"column":25,"nodeType":"118","messageId":"119","endLine":2,"endColumn":33},{"ruleId":"116","severity":1,"message":"120","line":2,"column":41,"nodeType":"118","messageId":"119","endLine":2,"endColumn":53},{"ruleId":"116","severity":1,"message":"121","line":2,"column":55,"nodeType":"118","messageId":"119","endLine":2,"endColumn":68},{"ruleId":"116","severity":1,"message":"122","line":2,"column":70,"nodeType":"118","messageId":"119","endLine":2,"endColumn":84},{"ruleId":"116","severity":1,"message":"123","line":2,"column":86,"nodeType":"118","messageId":"119","endLine":2,"endColumn":97},"no-native-reassign",["124"],"no-negated-in-lhs",["125"],["124"],["125"],"no-unused-vars","'LockOpen' is defined but never used.","Identifier","unusedVar","'BooleanInput' is defined but never used.","'DateTimeInput' is defined but never used.","'ReferenceInput' is defined but never used.","'SelectInput' is defined but never used.","no-global-assign","no-unsafe-negation"] \ No newline at end of file +[{"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/index.js":"1","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/App.js":"2","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/reportWebVitals.js":"3","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/key/KeyCreate.jsx":"4","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/event/EventList.jsx":"5","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/newKey/NewKeyList.jsx":"6","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/reader/ReaderList.jsx":"7","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/access/AccessList.jsx":"8","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/key/KeyActions.jsx":"9","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/dashboard/index.js":"10","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/AuthProvider.js":"11","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/reader/ReaderShow.jsx":"12","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/key/KeyShow.jsx":"13","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/reader/QuickCreateBox.jsx":"14","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/reader/ReaderShowActions.jsx":"15","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/util/index.js":"16","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/key/KeyEdit.jsx":"17","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/reader/ReaderEdit.jsx":"18","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/customFields/DisabledInput.jsx":"19","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/customFields/TextButtonField.jsx":"20","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/user/UserList.jsx":"21","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/user/UserCreate.jsx":"22","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/user/UserEdit.jsx":"23","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/key/KeyList.jsx":"24"},{"size":572,"mtime":1608134531819,"results":"25","hashOfConfig":"26"},{"size":2845,"mtime":1610803752137,"results":"27","hashOfConfig":"26"},{"size":362,"mtime":1608031634838,"results":"28","hashOfConfig":"26"},{"size":707,"mtime":1608980699349,"results":"29","hashOfConfig":"26"},{"size":933,"mtime":1608569416512,"results":"30","hashOfConfig":"26"},{"size":700,"mtime":1608753769433,"results":"31","hashOfConfig":"26"},{"size":1969,"mtime":1608739318523,"results":"32","hashOfConfig":"26"},{"size":900,"mtime":1608569470516,"results":"33","hashOfConfig":"26"},{"size":1191,"mtime":1608569453952,"results":"34","hashOfConfig":"26"},{"size":145,"mtime":1608122750456,"results":"35","hashOfConfig":"26"},{"size":2239,"mtime":1610759976294,"results":"36","hashOfConfig":"26"},{"size":5977,"mtime":1610803510924,"results":"37","hashOfConfig":"26"},{"size":1216,"mtime":1608913308474,"results":"38","hashOfConfig":"26"},{"size":462,"mtime":1608215163660,"results":"39","hashOfConfig":"26"},{"size":3512,"mtime":1610803412195,"results":"40","hashOfConfig":"26"},{"size":333,"mtime":1608565751590,"results":"41","hashOfConfig":"26"},{"size":516,"mtime":1608567014856,"results":"42","hashOfConfig":"26"},{"size":1653,"mtime":1610803691953,"results":"43","hashOfConfig":"26"},{"size":589,"mtime":1608988571284,"results":"44","hashOfConfig":"26"},{"size":681,"mtime":1608995326573,"results":"45","hashOfConfig":"26"},{"size":626,"mtime":1610760635857,"results":"46","hashOfConfig":"26"},{"size":408,"mtime":1610761560249,"results":"47","hashOfConfig":"26"},{"size":528,"mtime":1610763065494,"results":"48","hashOfConfig":"26"},{"size":717,"mtime":1610803715121,"results":"49","hashOfConfig":"26"},{"filePath":"50","messages":"51","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},"8vagau",{"filePath":"53","messages":"54","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"55","messages":"56","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"57","messages":"58","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"59","messages":"60","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"61","messages":"62","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"63","messages":"64","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"65","messages":"66","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"67","messages":"68","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"69","messages":"70","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"71"},{"filePath":"72","messages":"73","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"74","messages":"75","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"76","messages":"77","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"78","messages":"79","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"80","messages":"81","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"82"},{"filePath":"83","messages":"84","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"85","messages":"86","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"87","messages":"88","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"89","messages":"90","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"91","messages":"92","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"93","messages":"94","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"95","messages":"96","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"97","usedDeprecatedRules":"52"},{"filePath":"98","messages":"99","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},{"filePath":"100","messages":"101","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"52"},"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/index.js",[],["102","103"],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/App.js",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/reportWebVitals.js",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/key/KeyCreate.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/event/EventList.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/newKey/NewKeyList.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/reader/ReaderList.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/access/AccessList.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/key/KeyActions.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/dashboard/index.js",[],["104","105"],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/AuthProvider.js",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/reader/ReaderShow.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/key/KeyShow.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/reader/QuickCreateBox.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/reader/ReaderShowActions.jsx",["106"],"import * as React from 'react';\nimport { DeleteForever, LockOpen, SystemUpdate} from '@material-ui/icons';\nimport {\n TopToolbar,\n Button,\n useNotify,\n useRefresh,\n fetchStart,\n fetchEnd,\n EditButton\n} from 'react-admin';\nimport { useDispatch } from 'react-redux';\n\nconst serverAdress=process.env.REACT_APP_SERVER || \"http://locaholst:5000\";\n\n\nconst ReaderShowActions = ({ basePath, data, resource }) => {\n /* TODO PASS OPEN DOOR THROUGH PROPS */\n const notify=useNotify();\n const refresh=useRefresh();\n const dispatch=useDispatch();\n \n /* const openDoor=async(port)=>{\n try {\n const response=await fetch(`${serverAdress}/opendoor/${data.id}?port=${port}`)\n await response.json();\n notify(`door ${data.id} opened port ${port}`, \"info\")\n } catch (error) {\n console.log(error)\n notify(\"could not open door\", \"error\")\n\n }\n } */\n\n const deleteAllKeys=async()=>{\n try {\n dispatch(fetchStart());\n notify(\"started deleting all keys this could take around 5 seconds\", \"info\");\n const response=await fetch(`${serverAdress}/deleteall/${data.id}`)\n const json=await response.json();\n dispatch(fetchEnd());\n notify(json.message? json.message :`reader ${data.id} deleted all keys. Reader keys will be refreshed shortly`, \"info\")\n setTimeout(refresh, 1000);\n } catch (error) {\n dispatch(fetchEnd());\n console.log(error)\n notify(`could not delete keys on reader ${data.id}`, \"error\")\n\n }\n }\n\n const syncAllKeys=async()=>{\n try {\n dispatch(fetchStart());\n notify(\"started syncing please wait\", \"info\")\n const response=await fetch(`${serverAdress}/syncall/${data.id}`)\n await response.json();\n dispatch(fetchEnd());\n //notify(json.message? json.message :`reader ${data.id} synced all keys`, \"info\")\n notify(`reader ${data.id} synced all keys`, \"info\");\n setTimeout(refresh, 800);\n } catch (error) {\n dispatch(fetchEnd());\n console.log(error)\n notify(`failed to sync to reader ${data.id}`, \"error\")\n\n }\n }\n\n \n\n const marginLeft={marginLeft: \"8px\"}\n\n return(\n \n \n {/* \n \n \n */}\n \n \n \n )\n};\n\nexport default ReaderShowActions","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/util/index.js",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/key/KeyEdit.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/reader/ReaderEdit.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/customFields/DisabledInput.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/customFields/TextButtonField.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/user/UserList.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/user/UserCreate.jsx",["107","108","109","110"],"import * as React from \"react\";\nimport { Create, SimpleForm, TextInput, BooleanInput, DateTimeInput, ReferenceInput, SelectInput } from 'react-admin';\n\n\n\nconst UserCreate = (props) => (\n \n \n \n \n \n \n);\n\nexport default UserCreate","/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/user/UserEdit.jsx",[],"/home/dci-st118/Desktop/door/mqtt-door-access-control/client/src/components/key/KeyList.jsx",[],{"ruleId":"111","replacedBy":"112"},{"ruleId":"113","replacedBy":"114"},{"ruleId":"111","replacedBy":"115"},{"ruleId":"113","replacedBy":"116"},{"ruleId":"117","severity":1,"message":"118","line":2,"column":25,"nodeType":"119","messageId":"120","endLine":2,"endColumn":33},{"ruleId":"117","severity":1,"message":"121","line":2,"column":41,"nodeType":"119","messageId":"120","endLine":2,"endColumn":53},{"ruleId":"117","severity":1,"message":"122","line":2,"column":55,"nodeType":"119","messageId":"120","endLine":2,"endColumn":68},{"ruleId":"117","severity":1,"message":"123","line":2,"column":70,"nodeType":"119","messageId":"120","endLine":2,"endColumn":84},{"ruleId":"117","severity":1,"message":"124","line":2,"column":86,"nodeType":"119","messageId":"120","endLine":2,"endColumn":97},"no-native-reassign",["125"],"no-negated-in-lhs",["126"],["125"],["126"],"no-unused-vars","'LockOpen' is defined but never used.","Identifier","unusedVar","'BooleanInput' is defined but never used.","'DateTimeInput' is defined but never used.","'ReferenceInput' is defined but never used.","'SelectInput' is defined but never used.","no-global-assign","no-unsafe-negation"] \ No newline at end of file diff --git a/src/controllers/deviceController.ts b/src/controllers/deviceController.ts index ced141f08..87cd48634 100644 --- a/src/controllers/deviceController.ts +++ b/src/controllers/deviceController.ts @@ -172,7 +172,7 @@ export async function generateAllReaderKeys(req: Request, res: Response) { } const readerRepository: Repository = getRepository(Reader); const reader=await readerRepository.findOne(readerId); - console.log(reader) + if(!reader){ return res.status(404).send({message: `could not find reader with the provided id: ${readerId}`}) } @@ -180,11 +180,13 @@ export async function generateAllReaderKeys(req: Request, res: Response) { if(!client.connected){ return res.status(500).send({error: "connection to the MQTT client was lost"}) } + const keyBatchLength=3; /* TODO: get the reader from the doorid then use its ip to the command */ client.publish("devnfc", JSON.stringify({ - /* cmd: "getuser", */ cmd: "listusr", doorip: reader.ip, + skip: 0, + take: keyBatchLength // get the first 3 keys on the controller })) gettingKeyList=true; @@ -192,17 +194,25 @@ export async function generateAllReaderKeys(req: Request, res: Response) { let timeout=null; const keys=[]; + const sendResponse=()=>{ + console.log("last answer was to long ago listener removed") + client.off('message', messageHandler); + gettingKeyList=false; + console.log(`keyCount=${keys.length}`) + res.set('Content-Range', `key ${0}-${keys.length-1}/${keys.length}`) + return res.send(keys); // send the response and return + + } const messageHandler=(topic: string, message: Buffer)=> { - // message is Buffer if(topic==="devnfc/send" || topic==="/devnfc/send"){ try { const messageString = message.toString() const messageJSON = JSON.parse(messageString) if(messageJSON.cmd==="adduser"){ - console.log("received key") console.log(messageJSON.uid); + const keyObj={ id: messageJSON.uid, readerIp: reader.ip, @@ -223,27 +233,35 @@ export async function generateAllReaderKeys(req: Request, res: Response) { console.log("timer extended after receiving new key") if(timeout) clearTimeout(timeout); // stop the timer - timeout=setTimeout(()=>{ - // start a new timer. If it is not cleared / stopped in n seconds (2 here) by receiving a new message - // we can be pretty sure that we received all keys and can return the response - console.log("last answer was to long ago listener removed") - client.off('message', messageHandler); - gettingKeyList=false; - console.log(`keyCount=${keys.length}`) - res.set('Content-Range', `key ${0}-${keys.length-1}/${keys.length}`) - return res.send(keys); // send the response and return - - }, 8000); + timeout=setTimeout(sendResponse, 3000); // wait another 3 seconds for the next key or listUserState message + + }else if(messageJSON.cmd==="listUserState"){ + /* json["cmd"]="listUserState"; + json["done"]=false; + json["lastIndex"]=i; + */ + if(timeout) clearTimeout(timeout); + if(messageJSON.done){ + // if everything goes well we return the response from here + if(timeout) clearTimeout(timeout); + return sendResponse(); + }else{ + if(timeout) clearTimeout(timeout); + timeout=setTimeout(sendResponse, 3000); + + client.publish("devnfc", JSON.stringify({ // if done is not true get another batch of keys + cmd: "listusr", + doorip: reader.ip, + skip: keys.length, // start the batch at keys.length + take: keyBatchLength // get the first 3 keys on the controller + })) + } } } - catch (error) { - //console.log("error parsing following content as json: " + message.toString()) //console.log(error) console.log("error parsing following content as json: " ) - - } } } @@ -251,7 +269,7 @@ export async function generateAllReaderKeys(req: Request, res: Response) { if(!client.connected){ return res.status(500).send({error: "connection to the MQTT client was lost"}) } - timeout=setTimeout(()=>{ // initialy give the device 4 seconds to return the first user otherwise there are no and return + timeout=setTimeout(()=>{ // initialy give the controller 6 seconds to return the first key otherwise there are no and we can return console.log("timed out and listener removed") client.off('message', messageHandler); gettingKeyList=false; @@ -261,7 +279,7 @@ export async function generateAllReaderKeys(req: Request, res: Response) { message: "looks like there are no keys on the reader" }); - }, 14000); + }, 6000); client.on('message', messageHandler) } catch (error) {