Feat: Added websocket comm. for DataGatherer and PredictorWebService

This commit is contained in:
Lorenzo Iovino 2019-04-11 16:13:54 +02:00
parent 9946f8c057
commit b3e47f098f
5 changed files with 245 additions and 174 deletions

262
.idea/workspace.xml generated
View file

@ -5,20 +5,11 @@
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="603d916b-6d0f-43a7-809c-21ce2bcb2533" name="Default Changelist" comment=""> <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$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" 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/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/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/screen/Screen.ts" beforeDir="false" afterPath="$PROJECT_DIR$/DataGatherer/src/source/screen/Screen.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/PredictorWebService/src/predictor-web-service/PredictorWebService.ts" beforeDir="false" afterPath="$PROJECT_DIR$/Predictor/PredictorWebService/src/predictor-web-service/PredictorWebService.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> </list>
<ignored path="$PROJECT_DIR$/.tmp/" /> <ignored path="$PROJECT_DIR$/.tmp/" />
<ignored path="$PROJECT_DIR$/temp/" /> <ignored path="$PROJECT_DIR$/temp/" />
@ -30,12 +21,12 @@
<option name="LAST_RESOLUTION" value="IGNORE" /> <option name="LAST_RESOLUTION" value="IGNORE" />
</component> </component>
<component name="FileEditorManager"> <component name="FileEditorManager">
<leaf> <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="false"> <file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/src/predictor-web-service/PredictorWebService.ts"> <entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/src/predictor-web-service/PredictorWebService.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="236"> <state relative-caret-position="1530">
<caret line="57" column="49" lean-forward="true" selection-start-line="57" selection-start-column="49" selection-end-line="57" selection-end-column="49" /> <caret line="96" column="5" selection-start-line="96" selection-start-column="5" selection-end-line="96" selection-end-column="5" />
<folding> <folding>
<element signature="e#0#30#0" expanded="true" /> <element signature="e#0#30#0" expanded="true" />
</folding> </folding>
@ -43,11 +34,20 @@
</provider> </provider>
</entry> </entry>
</file> </file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/src/main.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="85">
<caret line="5" column="33" selection-start-line="5" selection-start-column="33" selection-end-line="5" selection-end-column="33" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false"> <file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/DataGatherer/src/source/screen/Screen.ts"> <entry file="file://$PROJECT_DIR$/DataGatherer/src/source/screen/Screen.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="272"> <state relative-caret-position="323">
<caret line="16" column="70" lean-forward="true" selection-start-line="16" selection-start-column="70" selection-end-line="16" selection-end-column="70" /> <caret line="19" column="15" selection-start-line="19" selection-start-column="11" selection-end-line="19" selection-end-column="15" />
<folding> <folding>
<element signature="e#0#35#0" expanded="true" /> <element signature="e#0#35#0" expanded="true" />
</folding> </folding>
@ -55,11 +55,35 @@
</provider> </provider>
</entry> </entry>
</file> </file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/DataGatherer/src/index.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="136">
<caret line="8" column="80" selection-start-line="8" selection-start-column="80" selection-end-line="8" selection-end-column="80" />
<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>
</file>
<file pinned="false" current-in-tab="false"> <file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/DataGatherer/src/source/Source.ts"> <entry file="file://$PROJECT_DIR$/DataGatherer/src/source/Source.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="170"> <state relative-caret-position="204">
<caret line="10" column="5" lean-forward="true" selection-start-line="10" selection-start-column="5" selection-end-line="10" selection-end-column="5" /> <caret line="12" column="11" selection-start-line="12" selection-start-column="11" selection-end-line="12" selection-end-column="11" />
</state> </state>
</provider> </provider>
</entry> </entry>
@ -79,8 +103,8 @@
<file pinned="false" current-in-tab="false"> <file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/DataGatherer/src/sender/Sender.ts"> <entry file="file://$PROJECT_DIR$/DataGatherer/src/sender/Sender.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="510"> <state relative-caret-position="170">
<caret line="31" column="24" selection-start-line="31" selection-start-column="24" selection-end-line="31" selection-end-column="24" /> <caret line="10" lean-forward="true" selection-start-line="10" selection-end-line="10" />
<folding> <folding>
<element signature="e#0#48#0" expanded="true" /> <element signature="e#0#48#0" expanded="true" />
</folding> </folding>
@ -91,8 +115,8 @@
<file pinned="false" current-in-tab="true"> <file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/DataGatherer/src/main.ts"> <entry file="file://$PROJECT_DIR$/DataGatherer/src/main.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="85"> <state relative-caret-position="425">
<caret line="8" column="33" lean-forward="true" selection-start-line="8" selection-end-line="9" /> <caret line="25" column="13" lean-forward="true" selection-start-line="25" selection-start-column="13" selection-end-line="25" selection-end-column="13" />
<folding> <folding>
<element signature="e#0#41#0" expanded="true" /> <element signature="e#0#41#0" expanded="true" />
</folding> </folding>
@ -100,6 +124,15 @@
</provider> </provider>
</entry> </entry>
</file> </file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/DataGatherer/src/gatherer/Gatherer.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="255">
<caret line="15" selection-start-line="15" selection-end-line="15" />
</state>
</provider>
</entry>
</file>
</leaf> </leaf>
</component> </component>
<component name="FindInProjectRecents"> <component name="FindInProjectRecents">
@ -108,6 +141,7 @@
<find>new Data</find> <find>new Data</find>
<find>stroke</find> <find>stroke</find>
<find>window</find> <find>window</find>
<find>req</find>
</findStrings> </findStrings>
</component> </component>
<component name="Git.Settings"> <component name="Git.Settings">
@ -118,12 +152,13 @@
<list> <list>
<option value="$PROJECT_DIR$/Predictor/PredictorWebService/package.json" /> <option value="$PROJECT_DIR$/Predictor/PredictorWebService/package.json" />
<option value="$PROJECT_DIR$/DataGatherer/src/data/Data.ts" /> <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/Source.ts" />
<option value="$PROJECT_DIR$/DataGatherer/src/source/mouse/Mouse.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/index.html" />
<option value="$PROJECT_DIR$/DataGatherer/src/gatherer/Gatherer.ts" />
<option value="$PROJECT_DIR$/DataGatherer/src/source/screen/Screen.ts" /> <option value="$PROJECT_DIR$/DataGatherer/src/source/screen/Screen.ts" />
<option value="$PROJECT_DIR$/DataGatherer/src/sender/Sender.ts" />
<option value="$PROJECT_DIR$/Predictor/PredictorWebService/src/predictor-web-service/PredictorWebService.ts" />
<option value="$PROJECT_DIR$/DataGatherer/src/main.ts" /> <option value="$PROJECT_DIR$/DataGatherer/src/main.ts" />
</list> </list>
</option> </option>
@ -139,10 +174,10 @@
</option> </option>
</component> </component>
<component name="ProjectFrameBounds" extendedState="6"> <component name="ProjectFrameBounds" extendedState="6">
<option name="x" value="47" /> <option name="x" value="1939" />
<option name="y" value="31" /> <option name="y" value="163" />
<option name="width" value="2250" /> <option name="width" value="1800" />
<option name="height" value="1213" /> <option name="height" value="1036" />
</component> </component>
<component name="ProjectView"> <component name="ProjectView">
<navigator proportions="" version="1"> <navigator proportions="" version="1">
@ -239,8 +274,9 @@
</panes> </panes>
</component> </component>
<component name="PropertiesComponent"> <component name="PropertiesComponent">
<property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
<property name="WebServerToolWindowFactoryState" value="false" /> <property name="WebServerToolWindowFactoryState" value="false" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" /> <property name="last_opened_file_path" value="$USER_HOME$/Work/proman-web" />
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" /> <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="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" /> <property name="ts.external.directory.path" value="C:\Users\Lorenzo\UserflowPredictorSystem\DataGatherer\node_modules\typescript\lib" />
@ -267,25 +303,22 @@
<option name="number" value="Default" /> <option name="number" value="Default" />
<option name="presentableId" value="Default" /> <option name="presentableId" value="Default" />
<updated>1554914345509</updated> <updated>1554914345509</updated>
<workItem from="1554914346687" duration="15299000" /> <workItem from="1554914346687" duration="15585000" />
<workItem from="1554967067169" duration="1271000" />
<workItem from="1554973527251" duration="5966000" />
</task> </task>
<servers /> <servers />
</component> </component>
<component name="TimeTrackingManager"> <component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="15299000" /> <option name="totallyTimeSpent" value="22822000" />
</component> </component>
<component name="ToolWindowManager"> <component name="ToolWindowManager">
<frame x="-7" y="-7" width="1550" height="838" extended-state="6" /> <frame x="1912" y="-318" width="1936" height="1176" extended-state="6" />
<editor active="true" /> <editor active="true" />
<layout> <layout>
<window_info id="Favorites" side_tool="true" /> <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.09957851" />
<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 id="Structure" order="1" side_tool="true" weight="0.25" />
<window_info anchor="bottom" id="TypeScript" /> <window_info id="Favorites" order="2" side_tool="true" />
<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="Message" order="0" />
<window_info anchor="bottom" id="Find" order="1" /> <window_info anchor="bottom" id="Find" order="1" />
<window_info anchor="bottom" id="Run" order="2" /> <window_info anchor="bottom" id="Run" order="2" />
@ -293,6 +326,11 @@
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" /> <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="Inspection" order="5" weight="0.4" />
<window_info anchor="bottom" id="TODO" order="6" /> <window_info anchor="bottom" id="TODO" order="6" />
<window_info anchor="bottom" id="Version Control" order="7" />
<window_info anchor="bottom" id="Docker" order="8" show_stripe_button="false" />
<window_info anchor="bottom" id="TypeScript" order="9" />
<window_info anchor="bottom" id="Terminal" order="10" />
<window_info anchor="bottom" id="Event Log" order="11" side_tool="true" />
<window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" /> <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" id="Ant Build" order="1" weight="0.25" />
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" /> <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
@ -309,13 +347,6 @@
</state> </state>
</provider> </provider>
</entry> </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"> <entry file="file://$PROJECT_DIR$/DataGatherer/node_modules/html2canvas/dist/html2canvas.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="209"> <state relative-caret-position="209">
@ -354,50 +385,6 @@
</state> </state>
</provider> </provider>
</entry> </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"> <entry file="file://$PROJECT_DIR$/DataGatherer/src/source/keyboard/Keyboard.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="51"> <state relative-caret-position="51">
@ -405,27 +392,10 @@
</state> </state>
</provider> </provider>
</entry> </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"> <entry file="file://$PROJECT_DIR$/DataGatherer/src/index.html">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="68"> <state relative-caret-position="136">
<caret line="4" column="14" lean-forward="true" selection-start-line="4" selection-start-column="14" selection-end-line="4" selection-end-column="14" /> <caret line="8" column="80" selection-start-line="8" selection-start-column="80" selection-end-line="8" selection-end-column="80" />
<folding> <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#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#1;n#body#0;n#html#0;n#!!top" expanded="true" />
@ -444,10 +414,78 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/DataGatherer/src/main.ts"> <entry file="file://$PROJECT_DIR$/DataGatherer/src/source/Source.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="204">
<caret line="12" column="11" selection-start-line="12" selection-start-column="11" selection-end-line="12" selection-end-column="11" />
</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="255">
<caret line="15" selection-start-line="15" selection-end-line="15" />
</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="2283" column="4" selection-start-line="2283" selection-start-column="4" selection-end-line="2283" selection-end-column="4" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/src/main.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="85"> <state relative-caret-position="85">
<caret line="8" column="33" lean-forward="true" selection-start-line="8" selection-end-line="9" /> <caret line="5" column="33" selection-start-line="5" selection-start-column="33" selection-end-line="5" selection-end-column="33" />
</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="1530">
<caret line="96" column="5" selection-start-line="96" selection-start-column="5" selection-end-line="96" selection-end-column="5" />
<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="170">
<caret line="10" lean-forward="true" selection-start-line="10" selection-end-line="10" />
<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="323">
<caret line="19" column="15" selection-start-line="19" selection-start-column="11" selection-end-line="19" selection-end-column="15" />
<folding>
<element signature="e#0#35#0" 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="425">
<caret line="25" column="13" lean-forward="true" selection-start-line="25" selection-start-column="13" selection-end-line="25" selection-end-column="13" />
<folding> <folding>
<element signature="e#0#41#0" expanded="true" /> <element signature="e#0#41#0" expanded="true" />
</folding> </folding>

View file

@ -12,14 +12,14 @@ function main() {
]); ]);
gatherer.start(); gatherer.start();
startPrediction(gatherer); //startPrediction(gatherer);
startGathering(gatherer); startGathering(gatherer);
} }
function startPrediction(gatherer: Gatherer) { function startPrediction(gatherer: Gatherer) {
const sender: Sender = new Sender(() => gatherer.getData(), 'localhost:4000/predict', 10000); const sender: Sender = new Sender(() => gatherer.getData(), 'localhost:4000/predict', 10000);
sender.start() sender.start('http')
.subscribe( .subscribe(
val => { val => {
console.log(val); console.log(val);
@ -29,8 +29,8 @@ function startPrediction(gatherer: Gatherer) {
function startGathering(gatherer: Gatherer) { function startGathering(gatherer: Gatherer) {
const sender: Sender = new Sender(() => gatherer.getData(), 'localhost:4000/trainData', 3000); const sender: Sender = new Sender(() => gatherer.getData(), 'localhost:4100/', 3000);
sender.start() sender.start('ws')
.subscribe( .subscribe(
val => { val => {
console.log(val); console.log(val);

View file

@ -1,11 +1,13 @@
import { interval, Observable, of } from 'rxjs'; import { interval, Observable, of } from 'rxjs';
import { filter, flatMap, delay } from 'rxjs/operators'; import { filter, flatMap, delay } from 'rxjs/operators';
import { Rxios } from 'rxios'; import { Rxios } from 'rxios';
import {Data} from "../data/Data";
export class Sender { export class Sender {
private url: string; private url: string;
private interval: number; private interval: number;
private dataSourceFn: any; private dataSourceFn: any;
private wsConnect;
constructor(dataSourceFn: any, url: string, interval: number) { constructor(dataSourceFn: any, url: string, interval: number) {
this.url = url; this.url = url;
@ -13,22 +15,35 @@ export class Sender {
this.dataSourceFn = dataSourceFn; this.dataSourceFn = dataSourceFn;
} }
public start() { public start(protocol: string) {
if(protocol === 'ws') {
this.wsConnect = new WebSocket('ws://' + this.url);
}
return interval(this.interval) return interval(this.interval)
.pipe( .pipe(
flatMap(() => this.send(this.dataSourceFn())) flatMap(() => this.send(this.dataSourceFn(), protocol))
) )
} }
private send(data: any) { private send(data: Array<Data>, protocol: string) {
if(data.length > 0) {
if (protocol === 'http') {
const http: Rxios = new Rxios(); const http: Rxios = new Rxios();
/* 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); return http.post('http://' + this.url, data);
} }
if (protocol === 'ws') {
this.wsConnect.send(JSON.stringify(data));
return new Observable((observer) => {
this.wsConnect.onmessage = (msg) => {
console.log(msg);
observer.next(msg);
};
});
}
} else {
return of(null)
}
}
} }

View file

@ -13,11 +13,10 @@ export class Screen extends Source {
if (document.body) { if (document.body) {
Html2CanvasStatic(document.body, {logging: false}) Html2CanvasStatic(document.body, {logging: false})
.then((canvas) => { .then((canvas) => {
console.log(canvas);
const imgData = canvas.toDataURL("image/png"); const imgData = canvas.toDataURL("image/png");
this.data.push(new Data('screen', imgData, {width: window.innerWidth, height: window.innerHeight})) this.data.push(new Data('screen', imgData, {width: window.innerWidth, height: window.innerHeight}))
}); });
} }
}, 3000); }, 5000);
} }
} }

View file

@ -16,6 +16,8 @@ export class PredictorWebService {
private httpServer: http.Server; private httpServer: http.Server;
private wss: WebSocket.Server; private wss: WebSocket.Server;
private oldImageData: Data;
constructor(url: string, portApi: number, portWebSocket: number) { constructor(url: string, portApi: number, portWebSocket: number) {
this.url = url; this.url = url;
this.portApi = portApi; this.portApi = portApi;
@ -26,11 +28,26 @@ export class PredictorWebService {
this.httpServer = http.createServer(this.app); this.httpServer = http.createServer(this.app);
this.wss = new WebSocket.Server({port: this.portWebSocket}); this.wss = new WebSocket.Server({port: this.portWebSocket});
this.wss.on('connection', (ws: WebSocket) => { this.wss.on('connection', (ws: WebSocket) => {
const that = this;
ws.on('message', (message: string) => { ws.on('message', (message: string) => {
console.log('received: %s', message); const jsonMsg = JSON.parse(message);
ws.send(`Hello, you sent -> ${message}`); const data: Array<Data> = jsonMsg.map(d => new Data(d.name, d.data, d.size, d.timestamp));
let image = data.find(val => {
return val.getName() === 'screen';
});
if(image) {
that.saveImage(image);
that.applyDataToImage(image, data)
.then(val => {
ws.send(val);
});
} else {
that.applyDataToImage(that.oldImageData, data)
.then(val => {
ws.send(val);
});
}
}); });
}); });
} }
@ -50,47 +67,6 @@ export class PredictorWebService {
res.send(generateFakeResponse()); 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, () => { this.app.listen(this.portApi, () => {
console.log('PredictorWebService is up and running on port: %d', this.portApi); console.log('PredictorWebService is up and running on port: %d', this.portApi);
}); });
@ -107,7 +83,7 @@ export class PredictorWebService {
} }
printMouseMove(mousemoves: Array<Data>, ctx: any) { printMouseMove(mousemoves: Array<Data>, ctx: any) {
ctx.strokeStyle = 'rgba(0,0,0,0.5)'; ctx.strokeStyle = 'rgba(0,0,0,0.8)';
ctx.lineWidth = 5; ctx.lineWidth = 5;
ctx.beginPath(); ctx.beginPath();
for(const move of mousemoves){ for(const move of mousemoves){
@ -123,4 +99,47 @@ export class PredictorWebService {
printImage(image: Image, ctx: any){ printImage(image: Image, ctx: any){
ctx.drawImage(image, 0, 0); ctx.drawImage(image, 0, 0);
} }
applyDataToImage(image: Data, data: Array<Data>) {
return new Promise((resolve, reject) => {
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 = () => {
this.printImage(img, ctx);
this.printMouseClick(mouseClicks, ctx);
this.printMouseMove(mouseMovements, ctx);
this.printKeyboard(keyboard, ctx);
const base64data = canvas.toBuffer();
fs.writeFile('./trainingDatas/' + image.getTimestamp() + '-' + Date.now() + '.png', base64data, 'base64', function (err) {
if (err) throw err;
console.log('File saved.');
resolve('ok - image received');
})
};
img.onerror = err => {
throw err
};
img.src = image.getData();
} else {
resolve('ok - only datas');
}
});
}
saveImage(image: Data) {
if(image) {
this.oldImageData = image;
}
}
} }