Feat: UserflowDataGatherer send correct datas; Feat: UserflowPredictorWebserver receive data and create userflowmap

This commit is contained in:
Lorenzo Iovino 2019-04-10 23:24:01 +02:00
parent 6feb5af4d0
commit 9946f8c057
26 changed files with 3977 additions and 22 deletions

12
.idea/UserflowPredictorSystem.iml generated Normal file
View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
<excludeFolder url="file://$MODULE_DIR$/temp" />
<excludeFolder url="file://$MODULE_DIR$/tmp" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

6
.idea/misc.xml generated Normal file
View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
</project>

8
.idea/modules.xml generated Normal file
View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/UserflowPredictorSystem.iml" filepath="$PROJECT_DIR$/.idea/UserflowPredictorSystem.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml generated Normal file
View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

458
.idea/workspace.xml generated Normal file
View file

@ -0,0 +1,458 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="BookmarkManager">
<bookmark url="file://$PROJECT_DIR$/DataGatherer/src/index.html" line="11" />
</component>
<component name="ChangeListManager">
<list default="true" id="603d916b-6d0f-43a7-809c-21ce2bcb2533" name="Default Changelist" comment="">
<change afterPath="$PROJECT_DIR$/DataGatherer/src/source/screen/Screen.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/DataGatherer/package-lock.json" beforeDir="false" afterPath="$PROJECT_DIR$/DataGatherer/package-lock.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/DataGatherer/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/DataGatherer/package.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/DataGatherer/src/data/Data.ts" beforeDir="false" afterPath="$PROJECT_DIR$/DataGatherer/src/data/Data.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/DataGatherer/src/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/DataGatherer/src/index.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/DataGatherer/src/main.ts" beforeDir="false" afterPath="$PROJECT_DIR$/DataGatherer/src/main.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/DataGatherer/src/sender/Sender.ts" beforeDir="false" afterPath="$PROJECT_DIR$/DataGatherer/src/sender/Sender.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/DataGatherer/src/source/Source.ts" beforeDir="false" afterPath="$PROJECT_DIR$/DataGatherer/src/source/Source.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/DataGatherer/src/source/mouse/Mouse.ts" beforeDir="false" afterPath="$PROJECT_DIR$/DataGatherer/src/source/mouse/Mouse.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/predictor/.ipynb_checkpoints/Untitled-checkpoint.ipynb" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/predictor/Predictor.py" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/predictor/Readme.md" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/predictor/weights/first_try.h5" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/predictor/weights/first_try2.h5" beforeDir="false" />
</list>
<ignored path="$PROJECT_DIR$/.tmp/" />
<ignored path="$PROJECT_DIR$/temp/" />
<ignored path="$PROJECT_DIR$/tmp/" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="FileEditorManager">
<leaf>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/src/predictor-web-service/PredictorWebService.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="236">
<caret line="57" column="49" lean-forward="true" selection-start-line="57" selection-start-column="49" selection-end-line="57" selection-end-column="49" />
<folding>
<element signature="e#0#30#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/DataGatherer/src/source/screen/Screen.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="272">
<caret line="16" column="70" lean-forward="true" selection-start-line="16" selection-start-column="70" selection-end-line="16" selection-end-column="70" />
<folding>
<element signature="e#0#35#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/DataGatherer/src/source/Source.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="170">
<caret line="10" column="5" lean-forward="true" selection-start-line="10" selection-start-column="5" selection-end-line="10" selection-end-column="5" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/DataGatherer/src/source/mouse/Mouse.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="204">
<caret line="12" column="59" selection-start-line="12" selection-start-column="59" selection-end-line="12" selection-end-column="59" />
<folding>
<element signature="e#0#35#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/DataGatherer/src/sender/Sender.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="510">
<caret line="31" column="24" selection-start-line="31" selection-start-column="24" selection-end-line="31" selection-end-column="24" />
<folding>
<element signature="e#0#48#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/DataGatherer/src/main.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="85">
<caret line="8" column="33" lean-forward="true" selection-start-line="8" selection-end-line="9" />
<folding>
<element signature="e#0#41#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
</leaf>
</component>
<component name="FindInProjectRecents">
<findStrings>
<find>CanvasRenderer</find>
<find>new Data</find>
<find>stroke</find>
<find>window</find>
</findStrings>
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/Predictor/PredictorWebService/package.json" />
<option value="$PROJECT_DIR$/DataGatherer/src/data/Data.ts" />
<option value="$PROJECT_DIR$/Predictor/PredictorWebService/src/predictor-web-service/PredictorWebService.ts" />
<option value="$PROJECT_DIR$/DataGatherer/src/source/Source.ts" />
<option value="$PROJECT_DIR$/DataGatherer/src/source/mouse/Mouse.ts" />
<option value="$PROJECT_DIR$/DataGatherer/src/sender/Sender.ts" />
<option value="$PROJECT_DIR$/DataGatherer/src/index.html" />
<option value="$PROJECT_DIR$/DataGatherer/src/source/screen/Screen.ts" />
<option value="$PROJECT_DIR$/DataGatherer/src/main.ts" />
</list>
</option>
</component>
<component name="ProjectConfigurationFiles">
<option name="files">
<list>
<option value="$PROJECT_DIR$/.idea/UserflowPredictorSystem.iml" />
<option value="$PROJECT_DIR$/.idea/misc.xml" />
<option value="$PROJECT_DIR$/.idea/modules.xml" />
<option value="$PROJECT_DIR$/.idea/vcs.xml" />
</list>
</option>
</component>
<component name="ProjectFrameBounds" extendedState="6">
<option name="x" value="47" />
<option name="y" value="31" />
<option name="width" value="2250" />
<option name="height" value="1213" />
</component>
<component name="ProjectView">
<navigator proportions="" version="1">
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="Scope" />
<pane id="ProjectPane">
<subPane>
<expand>
<path>
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
<item name="DataGatherer" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
<item name="DataGatherer" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
<item name="DataGatherer" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="sender" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
<item name="DataGatherer" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="source" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
<item name="DataGatherer" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="source" type="462c0819:PsiDirectoryNode" />
<item name="keyboard" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
<item name="DataGatherer" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="source" type="462c0819:PsiDirectoryNode" />
<item name="mouse" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
<item name="DataGatherer" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="source" type="462c0819:PsiDirectoryNode" />
<item name="screen" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
<item name="Predictor" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
<item name="Predictor" type="462c0819:PsiDirectoryNode" />
<item name="PredictorWebService" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
<item name="Predictor" type="462c0819:PsiDirectoryNode" />
<item name="PredictorWebService" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
<item name="Predictor" type="462c0819:PsiDirectoryNode" />
<item name="PredictorWebService" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="predictor-web-service" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
</subPane>
</pane>
</panes>
</component>
<component name="PropertiesComponent">
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
<property name="nodejs_npm_path_reset_for_default_project" value="true" />
<property name="ts.external.directory.path" value="C:\Users\Lorenzo\UserflowPredictorSystem\DataGatherer\node_modules\typescript\lib" />
</component>
<component name="RunDashboard">
<option name="ruleStates">
<list>
<RuleState>
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
</RuleState>
<RuleState>
<option name="name" value="StatusDashboardGroupingRule" />
</RuleState>
</list>
</option>
</component>
<component name="SvnConfiguration">
<configuration />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="603d916b-6d0f-43a7-809c-21ce2bcb2533" name="Default Changelist" comment="" />
<created>1554914345509</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1554914345509</updated>
<workItem from="1554914346687" duration="15299000" />
</task>
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="15299000" />
</component>
<component name="ToolWindowManager">
<frame x="-7" y="-7" width="1550" height="838" extended-state="6" />
<editor active="true" />
<layout>
<window_info id="Favorites" side_tool="true" />
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.12491738" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
<window_info anchor="bottom" id="TypeScript" />
<window_info anchor="bottom" id="Docker" show_stripe_button="false" />
<window_info anchor="bottom" id="Version Control" />
<window_info anchor="bottom" id="Terminal" />
<window_info anchor="bottom" id="Event Log" side_tool="true" />
<window_info anchor="bottom" id="Message" order="0" />
<window_info anchor="bottom" id="Find" order="1" />
<window_info anchor="bottom" id="Run" order="2" />
<window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
<window_info anchor="bottom" id="TODO" order="6" />
<window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
</layout>
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="1" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/package.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="170">
<caret line="10" column="26" lean-forward="true" selection-start-line="10" selection-start-column="26" selection-end-line="10" selection-end-column="26" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/src/main.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="136">
<caret line="8" column="7" selection-start-line="8" selection-start-column="7" selection-end-line="8" selection-end-column="7" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/DataGatherer/node_modules/html2canvas/dist/html2canvas.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="209">
<caret line="507" column="2720" selection-start-line="507" selection-start-column="2706" selection-end-line="507" selection-end-column="2720" />
<folding>
<element signature="n#!!doc" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/DataGatherer/node_modules/@types/html2canvas/index.d.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-17">
<caret line="9" column="14" selection-start-line="9" selection-start-column="14" selection-end-line="9" selection-end-column="14" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/DataGatherer/package.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="255">
<caret line="15" column="41" selection-start-line="15" selection-start-column="41" selection-end-line="15" selection-end-column="41" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/DataGatherer/src/data/Data.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="85">
<caret line="5" column="22" lean-forward="true" selection-start-line="5" selection-start-column="22" selection-end-line="5" selection-end-column="22" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/node_modules/canvas/types/index.d.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2856">
<caret line="169" column="35" selection-start-line="169" selection-start-column="29" selection-end-line="169" selection-end-column="35" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/DataGatherer/node_modules/typescript/lib/lib.dom.d.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="227">
<caret line="14433" column="12" selection-start-line="14433" selection-start-column="12" selection-end-line="14433" selection-end-column="12" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/src/predictor-web-service/PredictorWebService.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="236">
<caret line="57" column="49" lean-forward="true" selection-start-line="57" selection-start-column="49" selection-end-line="57" selection-end-column="49" />
<folding>
<element signature="e#0#30#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/DataGatherer/src/sender/Sender.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="510">
<caret line="31" column="24" selection-start-line="31" selection-start-column="24" selection-end-line="31" selection-end-column="24" />
<folding>
<element signature="e#0#48#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/DataGatherer/src/source/screen/Screen.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="272">
<caret line="16" column="70" lean-forward="true" selection-start-line="16" selection-start-column="70" selection-end-line="16" selection-end-column="70" />
<folding>
<element signature="e#0#35#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/DataGatherer/src/source/Source.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="170">
<caret line="10" column="5" lean-forward="true" selection-start-line="10" selection-start-column="5" selection-end-line="10" selection-end-column="5" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/DataGatherer/src/source/keyboard/Keyboard.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="51">
<caret line="3" lean-forward="true" selection-start-line="3" selection-end-line="3" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/DataGatherer/src/source/mouse/Mouse.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="204">
<caret line="12" column="59" selection-start-line="12" selection-start-column="59" selection-end-line="12" selection-end-column="59" />
<folding>
<element signature="e#0#35#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/DataGatherer/src/gatherer/Gatherer.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="85">
<caret line="5" lean-forward="true" selection-start-line="5" selection-end-line="5" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/DataGatherer/src/index.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="68">
<caret line="4" column="14" lean-forward="true" selection-start-line="4" selection-start-column="14" selection-end-line="4" selection-end-column="14" />
<folding>
<element signature="n#style#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
<element signature="n#style#0;n#div#1;n#body#0;n#html#0;n#!!top" expanded="true" />
<element signature="n#style#0;n#div#2;n#body#0;n#html#0;n#!!top" expanded="true" />
<element signature="n#style#0;n#div#3;n#body#0;n#html#0;n#!!top" expanded="true" />
<element signature="n#style#0;n#div#4;n#body#0;n#html#0;n#!!top" expanded="true" />
<element signature="n#style#0;n#div#5;n#body#0;n#html#0;n#!!top" expanded="true" />
<element signature="n#style#0;n#div#6;n#body#0;n#html#0;n#!!top" expanded="true" />
<element signature="n#style#0;n#div#7;n#body#0;n#html#0;n#!!top" expanded="true" />
<element signature="n#style#0;n#div#8;n#body#0;n#html#0;n#!!top" expanded="true" />
<element signature="n#style#0;n#div#9;n#body#0;n#html#0;n#!!top" expanded="true" />
<element signature="n#style#0;n#div#10;n#body#0;n#html#0;n#!!top" expanded="true" />
<element signature="n#style#0;n#div#11;n#body#0;n#html#0;n#!!top" expanded="true" />
<element signature="n#style#0;n#div#12;n#body#0;n#html#0;n#!!top" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/DataGatherer/src/main.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="85">
<caret line="8" column="33" lean-forward="true" selection-start-line="8" selection-end-line="9" />
<folding>
<element signature="e#0#41#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</component>
</project>

View file

@ -4,6 +4,27 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@types/html2canvas": {
"version": "0.0.35",
"resolved": "https://registry.npmjs.org/@types/html2canvas/-/html2canvas-0.0.35.tgz",
"integrity": "sha512-28p0/yNwXnvGWQK3rEIBj7NHNQoBXuX0ymcCNjSYR/i0Vk9z+xrKCQZPvsrEmurx9vs4B/eHGbOaJY/a9CXdSg==",
"requires": {
"@types/jquery": "*"
}
},
"@types/jquery": {
"version": "3.3.29",
"resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.3.29.tgz",
"integrity": "sha512-FhJvBninYD36v3k6c+bVk1DSZwh7B5Dpb/Pyk3HKVsiohn0nhbefZZ+3JXbWQhFyt0MxSl2jRDdGQPHeOHFXrQ==",
"requires": {
"@types/sizzle": "*"
}
},
"@types/sizzle": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.2.tgz",
"integrity": "sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg=="
},
"axios": {
"version": "0.18.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz",
@ -13,6 +34,19 @@
"is-buffer": "^1.1.5"
}
},
"base64-arraybuffer": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
"integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg="
},
"css-line-break": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-1.0.1.tgz",
"integrity": "sha1-GfIGOjPpX7KDG4ZEbAuAwYivRQo=",
"requires": {
"base64-arraybuffer": "^0.1.5"
}
},
"eslint-scope": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
@ -67,6 +101,14 @@
}
}
},
"html2canvas": {
"version": "1.0.0-rc.1",
"resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.0.0-rc.1.tgz",
"integrity": "sha512-ImguLJ3goQnY0P6z7n6VqBZ+ViS77Hv6J7iYXBxvdb3NWz3s8/mqr4/Lj0OlMUb3ID+qCQ1BPLIBuRMqhgqvYg==",
"requires": {
"css-line-break": "1.0.1"
}
},
"is-buffer": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",

View file

@ -4,7 +4,9 @@
"description": "",
"main": "main.js",
"dependencies": {
"@types/html2canvas": "0.0.35",
"axios": "^0.18.0",
"html2canvas": "^1.0.0-rc.1",
"rxios": "^1.1.2",
"rxjs": "^6.4.0",
"rxjs-compat": "^6.4.0"

View file

@ -2,10 +2,31 @@ export class Data {
private name: string;
private data: any;
private timestamp: number;
private size: {
width: number;
height: number;
};
constructor(name: string, data: any) {
constructor(name: string, data: any, size: any, timestamp?: number) {
this.name = name;
this.data = data;
this.timestamp = Date.now();
this.timestamp = timestamp ? timestamp : Date.now();
this.size = size;
}
public getName() {
return this.name;
}
public getData() {
return this.data;
}
public getTimestamp() {
return this.timestamp;
}
public getSize() {
return this.size;
}
}

View file

@ -1,8 +1,34 @@
<html>
<head>
<script src="../dist/bundle.js"></script>
<script>
const interval = setInterval(() => {
let i = 1;
for( i = 1; i <= 13; i++){
const el = document.getElementById(i.toString());
el.style.top = Math.floor(Math.random() * 1000) + 10 + 'px';
el.style.width = Math.floor(Math.random() * 200) + 10 + 'px';
el.style.height = Math.floor(Math.random() * 200) + 10 + 'px';
el.style.left = Math.floor(Math.random() * 1000) + 10 + 'px';
}
clearInterval(interval);
}, 200);
</script>
</head>
<body>
<button>ciao</button>
<div id="1" style="width: 50px; height: 70px; background-color:red; position: absolute"></div>
<div id="2" style="width: 30px; height: 30px; background-color:blue; position: absolute"></div>
<div id="3" style="width: 40px; height: 20px; background-color:pink; position: absolute"></div>
<div id="4" style="width: 30px; height: 30px; background-color:black; position: absolute"></div>
<div id="5" style="width: 30px; height: 30px; background-color:cyan; position: absolute"></div>
<div id="6" style="width: 30px; height: 30px; background-color:yellow; position: absolute"></div>
<div id="7" style="width: 30px; height: 30px; background-color:limegreen; position: absolute"></div>
<div id="8" style="width: 30px; height: 30px; background-color:darkmagenta; position: absolute"></div>
<div id="9" style="width: 30px; height: 30px; background-color:darkslategray; position: absolute"></div>
<div id="10" style="width: 30px; height: 30px; background-color:fuchsia; position: absolute"></div>
<div id="11" style="width: 30px; height: 30px; background-color:purple; position: absolute"></div>
<div id="12" style="width: 30px; height: 30px; background-color:sienna; position: absolute"></div>
<div id="13" style="width: 30px; height: 30px; background-color:darkturquoise; position: absolute"></div>
</body>
</html>

View file

@ -2,16 +2,34 @@ import { Sender } from "./sender/Sender";
import { Mouse } from "./source/mouse/Mouse";
import { Gatherer } from "./gatherer/Gatherer";
import { Keyboard } from "./source/keyboard/Keyboard";
import { Screen } from "./source/screen/Screen";
function main() {
const gatherer: Gatherer = new Gatherer([
new Screen('screen'),
new Keyboard('keyboard', ['keydown']),
new Mouse('mouse', ['click', 'mousemove'])
]);
gatherer.start();
startPrediction(gatherer);
startGathering(gatherer);
const sender: Sender = new Sender(() => gatherer.getData(), '/predictor', 4000, 2000);
}
function startPrediction(gatherer: Gatherer) {
const sender: Sender = new Sender(() => gatherer.getData(), 'localhost:4000/predict', 10000);
sender.start()
.subscribe(
val => {
console.log(val);
}
);
}
function startGathering(gatherer: Gatherer) {
const sender: Sender = new Sender(() => gatherer.getData(), 'localhost:4000/trainData', 3000);
sender.start()
.subscribe(
val => {

View file

@ -4,13 +4,11 @@ import { Rxios } from 'rxios';
export class Sender {
private url: string;
private port: number;
private interval: number;
private dataSourceFn: any;
constructor(dataSourceFn: any, url: string, port: number, interval: number) {
constructor(dataSourceFn: any, url: string, interval: number) {
this.url = url;
this.port = port;
this.interval = interval;
this.dataSourceFn = dataSourceFn;
}
@ -24,11 +22,13 @@ export class Sender {
private send(data: any) {
const http: Rxios = new Rxios();
//return http.post(this.url, data);
function generateFakeResponse() {
return Array.from({length: 20}, () => Math.random().toPrecision(2));
}
return of(generateFakeResponse()).pipe(delay(200));
/* var wsConnect = new WebSocket('ws://' + this.url, "protocolOne");
wsConnect.send(data);
wsConnect.onmessage((msg) => {
console.log(msg)
}
//gestire con rxjs o un wrapper di websocket client
)*/
return http.post('http://' + this.url, data);
}
}

View file

@ -2,7 +2,7 @@ import { Data } from "./../data/Data";
export class Source {
private name: string;
public data: Array<any> = [];
public data: Array<Data> = [];
public events: Array<string>;
constructor(name: string, events: Array<string>) {
@ -11,11 +11,6 @@ export class Source {
}
public startCollect() {
for(const event of this.events){
document.addEventListener(event, (e) => {
this.data.push(new Data(event, e));
});
}
}
public getData() {

View file

@ -1,9 +1,18 @@
import { Source } from '../Source';
import {Data} from "../../data/Data";
export class Mouse extends Source {
constructor(name: string, events: Array<string>) {
super(name, events);
}
startCollect() {
for(const event of this.events){
document.addEventListener(event, (e: MouseEvent) => {
this.data.push(new Data(event, {x: e.x, y: e.y}, {width: window.innerWidth, height: window.innerHeight}));
});
}
}
}

View file

@ -0,0 +1,23 @@
import { Source } from '../Source';
import Html2CanvasStatic from "html2canvas";
import {Data} from "../../data/Data";
export class Screen extends Source {
constructor(name: string, events: Array<string> = []) {
super(name, events);
}
public startCollect() {
const interval = setInterval(() => {
if (document.body) {
Html2CanvasStatic(document.body, {logging: false})
.then((canvas) => {
console.log(canvas);
const imgData = canvas.toDataURL("image/png");
this.data.push(new Data('screen', imgData, {width: window.innerWidth, height: window.innerHeight}))
});
}
}, 3000);
}
}

View file

@ -0,0 +1,12 @@
# .eslintrc.yaml
---
extends: airbnb-base
env:
node: true
mocha: true
es6: true
parser: typescript-eslint-parser
parserOptions:
sourceType: module
ecmaFeatures:
modules: true

View file

@ -0,0 +1,3 @@
{
"git.ignoreLimitWarning": true
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,30 @@
{
"name": "predictorservice",
"version": "1.0.0",
"description": "",
"main": "main.js",
"dependencies": {
"@types/express": "^4.16.1",
"body-parser": "^1.18.3",
"canvas": "^2.4.1",
"cors": "^2.8.5",
"express": "^4.16.4",
"nodemon": "^1.18.10",
"ws": "^6.2.1"
},
"devDependencies": {
"@types/node": "^11.13.0",
"@types/ws": "^6.0.1",
"ts-node": "^8.0.3",
"typescript": "^3.4.2",
"typescript-eslint-parser": "^22.0.0"
},
"scripts": {
"build": "tsc -w",
"dev": "ts-node ./src/main.ts",
"start": "nodemon ./dist/main.js",
"prod": "npm run build && npm run start"
},
"author": "",
"license": "ISC"
}

View file

@ -0,0 +1,9 @@
import { PredictorWebService } from "./predictor-web-service/PredictorWebService";
function main() {
const predictorWebService = new PredictorWebService('/', 4000, 4100);
predictorWebService.startExpress();
predictorWebService.startWebSocket();
}
main();

View file

@ -0,0 +1,126 @@
import express from 'express';
import * as WebSocket from 'ws';
import * as http from 'http';
import cors from 'cors';
import * as bodyParser from "body-parser";
import fs from 'fs';
import {Data} from "../../../../DataGatherer/src/data/Data";
import {createCanvas, Image} from "canvas";
export class PredictorWebService {
private portWebSocket: number;
private portApi: number;
private url: string;
private app: express.Application;
private httpServer: http.Server;
private wss: WebSocket.Server;
constructor(url: string, portApi: number, portWebSocket: number) {
this.url = url;
this.portApi = portApi;
this.portWebSocket = portWebSocket;
}
public startWebSocket() {
this.httpServer = http.createServer(this.app);
this.wss = new WebSocket.Server({port: this.portWebSocket});
this.wss.on('connection', (ws: WebSocket) => {
ws.on('message', (message: string) => {
console.log('received: %s', message);
ws.send(`Hello, you sent -> ${message}`);
});
});
}
public startExpress() {
const that = this;
this.app = express();
this.app.use(cors());
this.app.use(bodyParser.json());
this.app.use(bodyParser.urlencoded({ extended: false }));
this.app.post('/predict', function (req, res) {
function generateFakeResponse() {
return Array.from({length: 20}, () => Math.random().toPrecision(2));
}
console.log('Request prediction');
res.send(generateFakeResponse());
});
this.app.post('/trainData', function (req, res) {
console.log('Received data');
const data: Array<Data> = req.body.map(d => new Data(d.name, d.data, d.size, d.timestamp));
console.dir(data);
const image = data.find(val => {
return val.getName() === 'screen';
});
const mouseClicks = data.filter(val => {
return val.getName() === 'click';
});
const mouseMovements = data.filter(val => {
return val.getName() === 'mousemove';
});
const keyboard = data.filter(val => {
return val.getName() === 'keydown';
});
if(image){
const canvas = createCanvas(image.getSize().width, image.getSize().height);
const ctx = canvas.getContext('2d');
const img = new Image();
img.onload = () => {
that.printImage(img, ctx);
that.printMouseClick(mouseClicks, ctx);
that.printMouseMove(mouseMovements, ctx);
that.printKeyboard(keyboard, ctx);
const base64data = canvas.toBuffer();
fs.writeFile('./trainingDatas/' + image.getTimestamp() + '.png', base64data, 'base64', function(err){
if (err) throw err;
console.log('File saved.');
res.send('ok - image received');
})
};
img.onerror = err => { throw err };
img.src = image.getData();
} else {
res.send('ok - only datas');
}
});
this.app.listen(this.portApi, () => {
console.log('PredictorWebService is up and running on port: %d', this.portApi);
});
}
printMouseClick(mouseclicks: Array<Data>, ctx: any) {
ctx.strokeStyle = 'rgba(219, 10, 91, 0.5)';
ctx.lineWidth = 5;
ctx.beginPath();
for(const move of mouseclicks){
ctx.strokeRect(move.getData().x, move.getData().y,10, 10);
}
ctx.stroke();
}
printMouseMove(mousemoves: Array<Data>, ctx: any) {
ctx.strokeStyle = 'rgba(0,0,0,0.5)';
ctx.lineWidth = 5;
ctx.beginPath();
for(const move of mousemoves){
ctx.lineTo(move.getData().x, move.getData().y);
}
ctx.stroke();
}
printKeyboard(keyboard: Array<Data>, ctx: any) {
}
printImage(image: Image, ctx: any){
ctx.drawImage(image, 0, 0);
}
}

View file

@ -0,0 +1,20 @@
{
"compilerOptions": {
"sourceMap": true,
"module": "commonjs",
"esModuleInterop": true,
"resolveJsonModule": true,
"outDir": "dist",
"experimentalDecorators": true,
"target": "es5",
"jsx": "react",
"lib": [
"dom",
"es6"
]
},
"include": [
"src/**/*.ts"
],
"compileOnSave": true
}