Feat: bot

This commit is contained in:
Lorenzo Iovino 2019-04-26 19:20:40 +02:00
parent b3e47f098f
commit 1c8645039e
24 changed files with 1474 additions and 376 deletions

1
.idea/vcs.xml generated
View file

@ -2,5 +2,6 @@
<project version="4"> <project version="4">
<component name="VcsDirectoryMappings"> <component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" /> <mapping directory="$PROJECT_DIR$" vcs="Git" />
<mapping directory="$PROJECT_DIR$/great-big-angular2-example" vcs="Git" />
</component> </component>
</project> </project>

667
.idea/workspace.xml generated
View file

@ -5,10 +5,26 @@
</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/shared/Data.ts" afterDir="false" />
<change afterPath="$PROJECT_DIR$/DataGeneratorPuppets/src/Puppet.ts" afterDir="false" />
<change afterPath="$PROJECT_DIR$/DataGeneratorPuppets/src/event-flow/MouseEventFlow.ts" afterDir="false" />
<change afterPath="$PROJECT_DIR$/DataGeneratorPuppets/src/main.ts" afterDir="false" />
<change afterPath="$PROJECT_DIR$/DataGeneratorPuppets/tsconfig.json" afterDir="false" />
<change afterPath="$PROJECT_DIR$/Predictor/PredictorWebService/src/image-creator/ImageCreatorService.ts" afterDir="false" />
<change afterPath="$PROJECT_DIR$/Predictor/PredictorWebService/src/image-creator/main.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/vcs.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/DataGatherer/src/data/Data.ts" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/DataGatherer/src/gatherer/Gatherer.ts" beforeDir="false" afterPath="$PROJECT_DIR$/DataGatherer/src/gatherer/Gatherer.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/mouse/Mouse.ts" beforeDir="false" afterPath="$PROJECT_DIR$/DataGatherer/src/source/mouse/Mouse.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/screen/Screen.ts" beforeDir="false" afterPath="$PROJECT_DIR$/DataGatherer/src/source/screen/Screen.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Predictor/PredictorWebService/package-lock.json" beforeDir="false" afterPath="$PROJECT_DIR$/Predictor/PredictorWebService/package-lock.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Predictor/PredictorWebService/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/Predictor/PredictorWebService/package.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Predictor/PredictorWebService/src/main.ts" beforeDir="false" afterPath="$PROJECT_DIR$/Predictor/PredictorWebService/src/predictor-web-service/main.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/PredictorWebService/src/predictor-web-service/PredictorWebService.ts" beforeDir="false" afterPath="$PROJECT_DIR$/Predictor/PredictorWebService/src/predictor-web-service/PredictorWebService.ts" afterDir="false" />
</list> </list>
<ignored path="$PROJECT_DIR$/.tmp/" /> <ignored path="$PROJECT_DIR$/.tmp/" />
@ -20,13 +36,64 @@
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" /> <option name="LAST_RESOLUTION" value="IGNORE" />
</component> </component>
<component name="FavoritesManager">
<favorites_list name="UserflowPredictorSystem" />
</component>
<component name="FileEditorManager"> <component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300"> <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/DataGeneratorPuppets/src/main.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="170">
<caret line="10" column="1" selection-start-line="10" selection-start-column="1" selection-end-line="10" selection-end-column="1" />
<folding>
<element signature="e#0#32#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/DataGeneratorPuppets/src/datas/flow.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="425">
<caret line="25" column="22" selection-start-line="25" selection-start-column="22" selection-end-line="25" selection-end-column="22" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/src/image-creator/ImageCreatorService.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="191">
<caret line="122" column="35" selection-start-line="122" selection-start-column="35" selection-end-line="122" selection-end-column="35" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/src/image-creator/main.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="187">
<caret line="11" selection-start-line="11" selection-end-line="11" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/DataGeneratorPuppets/src/Puppet.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="170">
<caret line="10" column="32" selection-start-line="10" selection-start-column="32" selection-end-line="10" selection-end-column="32" />
</state>
</provider>
</entry>
</file>
<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="1530"> <state relative-caret-position="777">
<caret line="96" column="5" selection-start-line="96" selection-start-column="5" selection-end-line="96" selection-end-column="5" /> <caret line="77" column="20" selection-start-line="77" selection-start-column="20" selection-end-line="77" selection-end-column="20" />
<folding> <folding>
<element signature="e#0#30#0" expanded="true" /> <element signature="e#0#30#0" expanded="true" />
</folding> </folding>
@ -35,7 +102,7 @@
</entry> </entry>
</file> </file>
<file pinned="false" current-in-tab="false"> <file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/src/main.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="85"> <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" /> <caret line="5" column="33" selection-start-line="5" selection-start-column="33" selection-end-line="5" selection-end-column="33" />
@ -44,79 +111,10 @@
</entry> </entry>
</file> </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">
<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>
</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">
<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>
</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="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>
</file>
<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="425"> <state relative-caret-position="497">
<caret line="25" column="13" lean-forward="true" selection-start-line="25" selection-start-column="13" selection-end-line="25" selection-end-column="13" /> <caret line="44" column="39" selection-start-line="44" selection-start-column="39" selection-end-line="44" selection-end-column="39" />
<folding> <folding>
<element signature="e#0#41#0" expanded="true" /> <element signature="e#0#41#0" expanded="true" />
</folding> </folding>
@ -125,10 +123,25 @@
</entry> </entry>
</file> </file>
<file pinned="false" current-in-tab="false"> <file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/DataGatherer/src/gatherer/Gatherer.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="255"> <state relative-caret-position="510">
<caret line="15" selection-start-line="15" selection-end-line="15" /> <caret line="30" column="48" selection-start-line="30" selection-start-column="48" selection-end-line="30" selection-end-column="48" />
<folding>
<element signature="e#0#48#0" expanded="true" />
</folding>
</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="85">
<caret line="5" column="54" selection-start-line="5" selection-start-column="54" selection-end-line="5" selection-end-column="54" />
<folding>
<element signature="e#0#35#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
@ -138,11 +151,34 @@
<component name="FindInProjectRecents"> <component name="FindInProjectRecents">
<findStrings> <findStrings>
<find>CanvasRenderer</find> <find>CanvasRenderer</find>
<find>new Data</find>
<find>stroke</find> <find>stroke</find>
<find>window</find> <find>window</find>
<find>req</find> <find>req</find>
<find>getTi</find>
<find>json</find>
<find>MAth.max</find>
<find>ctx:</find>
<find>console.log</find>
<find>Data sa</find>
<find>backgr</find>
<find>white</find>
<find>setInte</find>
<find>sender.sta</find>
<find>random</find>
<find>'move</find>
<find>flow</find>
<find>get</find>
<find>gl</find>
<find>console.l</find>
<find>MouseEventF</find>
<find>docum</find>
<find>.style</find>
<find>new Data</find>
<find>flowName</find>
</findStrings> </findStrings>
<replaceStrings>
<replace />
</replaceStrings>
</component> </component>
<component name="Git.Settings"> <component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
@ -150,41 +186,51 @@
<component name="IdeDocumentHistory"> <component name="IdeDocumentHistory">
<option name="CHANGED_PATHS"> <option name="CHANGED_PATHS">
<list> <list>
<option value="$PROJECT_DIR$/great-big-angular2-example/README.md" />
<option value="$PROJECT_DIR$/great-big-angular2-example/src/index.html" />
<option value="$PROJECT_DIR$/Predictor/PredictorWebService/src/predictor-web-service/main.ts" />
<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$/DataGatherer/src/source/Source.ts" /> <option value="$PROJECT_DIR$/DataGatherer/src/source/generator/Generator.ts" />
<option value="$PROJECT_DIR$/DataGatherer/src/source/mouse/Mouse.ts" /> <option value="$PROJECT_DIR$/DataGatherer/src/shared/Flow.ts" />
<option value="$PROJECT_DIR$/DataGatherer/src/index.html" /> <option value="$PROJECT_DIR$/DataGatherer/src/shared/EventFlow.ts" />
<option value="$PROJECT_DIR$/DataGatherer/src/shared/event-flow/EventFlow.ts" />
<option value="$PROJECT_DIR$/DataGatherer/src/datas/flow.json" />
<option value="$PROJECT_DIR$/DataGatherer/src/shared/event-flow/MouseEventFlow.ts" />
<option value="$PROJECT_DIR$/DataGatherer/src/datas/flow.ts" />
<option value="$PROJECT_DIR$/DataGeneratorPuppets/DataGeneratorPuppets.ts" />
<option value="$PROJECT_DIR$/DataGeneratorPuppets/src/DataGeneratorPuppets.ts" />
<option value="$PROJECT_DIR$/DataGeneratorPuppets/package.json" />
<option value="$PROJECT_DIR$/DataGatherer/src/gatherer/Gatherer.ts" /> <option value="$PROJECT_DIR$/DataGatherer/src/gatherer/Gatherer.ts" />
<option value="$PROJECT_DIR$/DataGatherer/src/index.html" />
<option value="$PROJECT_DIR$/DataGeneratorPuppets/src/datas/flow.ts" />
<option value="$PROJECT_DIR$/DataGatherer/src/shared/Data.ts" />
<option value="$PROJECT_DIR$/DataGatherer/src/source/keyboard/Keyboard.ts" />
<option value="$PROJECT_DIR$/DataGatherer/src/source/Source.ts" />
<option value="$PROJECT_DIR$/DataGeneratorPuppets/src/Puppet.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/source/mouse/Mouse.ts" />
<option value="$PROJECT_DIR$/DataGatherer/src/main.ts" />
<option value="$PROJECT_DIR$/DataGatherer/src/sender/Sender.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$/Predictor/PredictorWebService/src/predictor-web-service/PredictorWebService.ts" />
<option value="$PROJECT_DIR$/DataGatherer/src/main.ts" /> <option value="$PROJECT_DIR$/Predictor/PredictorWebService/src/image-creator/main.ts" />
<option value="$PROJECT_DIR$/Predictor/PredictorWebService/src/image-creator/ImageCreatorService.ts" />
<option value="$PROJECT_DIR$/DataGeneratorPuppets/src/main.ts" />
</list> </list>
</option> </option>
</component> </component>
<component name="ProjectConfigurationFiles"> <component name="ProjectFrameBounds">
<option name="files"> <option name="x" value="1981" />
<list> <option name="y" value="263" />
<option value="$PROJECT_DIR$/.idea/UserflowPredictorSystem.iml" /> <option name="width" value="1936" />
<option value="$PROJECT_DIR$/.idea/misc.xml" /> <option name="height" value="1130" />
<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="1939" />
<option name="y" value="163" />
<option name="width" value="1800" />
<option name="height" value="1036" />
</component> </component>
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectView"> <component name="ProjectView">
<navigator proportions="" version="1"> <navigator proportions="" version="1">
<foldersAlwaysOnTop value="true" /> <foldersAlwaysOnTop value="true" />
</navigator> </navigator>
<panes> <panes>
<pane id="Scope" />
<pane id="ProjectPane"> <pane id="ProjectPane">
<subPane> <subPane>
<expand> <expand>
@ -210,6 +256,13 @@
<item name="src" type="462c0819:PsiDirectoryNode" /> <item name="src" type="462c0819:PsiDirectoryNode" />
<item name="sender" type="462c0819:PsiDirectoryNode" /> <item name="sender" type="462c0819:PsiDirectoryNode" />
</path> </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="shared" type="462c0819:PsiDirectoryNode" />
</path>
<path> <path>
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" /> <item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" /> <item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
@ -236,10 +289,27 @@
<path> <path>
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" /> <item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" /> <item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
<item name="DataGatherer" type="462c0819:PsiDirectoryNode" /> <item name="DataGeneratorPuppets" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
<item name="DataGeneratorPuppets" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" /> <item name="src" type="462c0819:PsiDirectoryNode" />
<item name="source" type="462c0819:PsiDirectoryNode" /> </path>
<item name="screen" type="462c0819:PsiDirectoryNode" /> <path>
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
<item name="DataGeneratorPuppets" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="datas" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
<item name="DataGeneratorPuppets" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="event-flow" type="462c0819:PsiDirectoryNode" />
</path> </path>
<path> <path>
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" /> <item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
@ -259,6 +329,14 @@
<item name="PredictorWebService" type="462c0819:PsiDirectoryNode" /> <item name="PredictorWebService" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" /> <item name="src" type="462c0819:PsiDirectoryNode" />
</path> </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="image-creator" type="462c0819:PsiDirectoryNode" />
</path>
<path> <path>
<item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" /> <item name="UserflowPredictorSystem" type="b2602c69:ProjectViewProjectNode" />
<item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" /> <item name="UserflowPredictorSystem" type="462c0819:PsiDirectoryNode" />
@ -271,16 +349,30 @@
<select /> <select />
</subPane> </subPane>
</pane> </pane>
<pane id="Scope" />
</panes> </panes>
</component> </component>
<component name="PropertiesComponent"> <component name="PropertiesComponent">
<property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" /> <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="$USER_HOME$/Work/proman-web" /> <property name="editor.config.ad.shown" value="true" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/../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="nodejs_package_manager_path" value="npm" />
<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" />
</component> </component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="C:\Users\Lorenzo\UserflowPredictorSystem\DataGeneratorPuppets" />
<recent name="C:\Users\Lorenzo\UserflowPredictorSystem\Predictor\PredictorWebService\src\image-creator" />
</key>
<key name="MoveFile.RECENT_KEYS">
<recent name="C:\Users\Lorenzo\UserflowPredictorSystem\DataGeneratorPuppets\src" />
<recent name="C:\Users\Lorenzo\UserflowPredictorSystem\DataGatherer\src\shared\event-flow" />
<recent name="C:\Users\Lorenzo\UserflowPredictorSystem\Predictor\PredictorWebService\src\predictor-web-service" />
</key>
</component>
<component name="RunDashboard"> <component name="RunDashboard">
<option name="ruleStates"> <option name="ruleStates">
<list> <list>
@ -293,6 +385,67 @@
</list> </list>
</option> </option>
</component> </component>
<component name="RunManager" selected="npm.dev:puppet">
<configuration name="build" type="js.build_tools.npm" temporary="true" nameIsGenerated="true">
<package-json value="$PROJECT_DIR$/DataGatherer/package.json" />
<command value="run" />
<scripts>
<script value="build" />
</scripts>
<node-interpreter value="project" />
<envs />
<method v="2" />
</configuration>
<configuration name="build:puppet" type="js.build_tools.npm" temporary="true" nameIsGenerated="true">
<package-json value="$PROJECT_DIR$/DataGeneratorPuppets/package.json" />
<command value="run" />
<scripts>
<script value="build:puppet" />
</scripts>
<node-interpreter value="project" />
<envs />
<method v="2" />
</configuration>
<configuration name="dev:imageCreator" type="js.build_tools.npm" temporary="true" nameIsGenerated="true">
<package-json value="$PROJECT_DIR$/Predictor/PredictorWebService/package.json" />
<command value="run" />
<scripts>
<script value="dev:imageCreator" />
</scripts>
<node-interpreter value="project" />
<envs />
<method v="2" />
</configuration>
<configuration name="dev:puppet" type="js.build_tools.npm" temporary="true" nameIsGenerated="true">
<package-json value="$PROJECT_DIR$/DataGeneratorPuppets/package.json" />
<command value="run" />
<scripts>
<script value="dev:puppet" />
</scripts>
<node-interpreter value="project" />
<envs />
<method v="2" />
</configuration>
<configuration name="dev:ws" type="js.build_tools.npm" temporary="true" nameIsGenerated="true">
<package-json value="$PROJECT_DIR$/Predictor/PredictorWebService/package.json" />
<command value="run" />
<scripts>
<script value="dev:ws" />
</scripts>
<node-interpreter value="project" />
<envs />
<method v="2" />
</configuration>
<recent_temporary>
<list>
<item itemvalue="npm.dev:imageCreator" />
<item itemvalue="npm.dev:puppet" />
<item itemvalue="npm.dev:ws" />
<item itemvalue="npm.build" />
<item itemvalue="npm.build:puppet" />
</list>
</recent_temporary>
</component>
<component name="SvnConfiguration"> <component name="SvnConfiguration">
<configuration /> <configuration />
</component> </component>
@ -305,23 +458,36 @@
<updated>1554914345509</updated> <updated>1554914345509</updated>
<workItem from="1554914346687" duration="15585000" /> <workItem from="1554914346687" duration="15585000" />
<workItem from="1554967067169" duration="1271000" /> <workItem from="1554967067169" duration="1271000" />
<workItem from="1554973527251" duration="5966000" /> <workItem from="1554973527251" duration="6045000" />
<workItem from="1555143288258" duration="4490000" />
<workItem from="1555313308004" duration="29103000" />
<workItem from="1555399989669" duration="1765000" />
<workItem from="1555518427859" duration="877000" />
<workItem from="1555582279420" duration="45000" />
<workItem from="1556285810803" duration="12320000" />
</task> </task>
<task id="LOCAL-00001" summary="Feat: Added websocket comm. for DataGatherer and PredictorWebService">
<created>1554992034761</created>
<option name="number" value="00001" />
<option name="presentableId" value="LOCAL-00001" />
<option name="project" value="LOCAL" />
<updated>1554992034761</updated>
</task>
<option name="localTasksCounter" value="2" />
<servers /> <servers />
</component> </component>
<component name="TimeTrackingManager"> <component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="22822000" /> <option name="totallyTimeSpent" value="71501000" />
</component> </component>
<component name="ToolWindowManager"> <component name="ToolWindowManager">
<frame x="1912" y="-318" width="1936" height="1176" extended-state="6" /> <frame x="1912" y="-318" width="1936" height="1176" extended-state="6" />
<editor active="true" />
<layout> <layout>
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.09957851" /> <window_info content_ui="combo" id="Project" order="0" sideWeight="0.49818182" visible="true" weight="0.19125395" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" /> <window_info id="Structure" order="1" sideWeight="0.5018182" side_tool="true" weight="0.19125395" />
<window_info id="Favorites" order="2" side_tool="true" /> <window_info id="Favorites" order="2" sideWeight="0.50060606" side_tool="true" weight="0.24868283" />
<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 active="true" anchor="bottom" id="Run" order="2" visible="true" weight="0.20901246" />
<window_info anchor="bottom" id="Debug" order="3" weight="0.4" /> <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="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" />
@ -339,14 +505,11 @@
<component name="TypeScriptGeneratedFilesManager"> <component name="TypeScriptGeneratedFilesManager">
<option name="version" value="1" /> <option name="version" value="1" />
</component> </component>
<component name="VcsManagerConfiguration">
<MESSAGE value="Feat: Added websocket comm. for DataGatherer and PredictorWebService" />
<option name="LAST_COMMIT_MESSAGE" value="Feat: Added websocket comm. for DataGatherer and PredictorWebService" />
</component>
<component name="editorHistoryManager"> <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$/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">
@ -364,38 +527,141 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/DataGatherer/package.json"> <entry file="file://$PROJECT_DIR$/great-big-angular2-example/src/index.html" />
<provider selected="true" editor-type-id="text-editor"> <entry file="file://$PROJECT_DIR$/great-big-angular2-example/README.md" />
<state relative-caret-position="255"> <entry file="file://$PROJECT_DIR$/great-big-angular2-example/package.json" />
<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"> <entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/node_modules/canvas/types/index.d.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2856"> <state relative-caret-position="267">
<caret line="169" column="35" selection-start-line="169" selection-start-column="29" selection-end-line="169" selection-end-column="35" /> <caret line="224" column="13" selection-start-line="224" selection-start-column="13" selection-end-line="224" selection-end-column="13" />
</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="259">
<caret line="18265" column="5" selection-start-line="18265" selection-start-column="5" selection-end-line="18265" selection-end-column="5" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/DataGatherer/src/source/generator/Generator.ts" />
<entry file="file://$PROJECT_DIR$/DataGatherer/src/shared/Flow.ts" />
<entry file="file://$PROJECT_DIR$/DataGatherer/src/shared/event-flow/EventFlow.ts" />
<entry file="file://$PROJECT_DIR$/DataGatherer/node_modules/rxios/dist/index.d.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="153">
<caret line="10" column="4" selection-start-line="10" selection-start-column="4" selection-end-line="10" selection-end-column="4" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/tsconfig.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="323">
<caret line="19" column="1" selection-end-line="19" selection-end-column="1" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/DataGeneratorPuppets/tsconfig.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="323">
<caret line="19" column="1" selection-start-line="19" selection-start-column="1" selection-end-line="19" selection-end-column="1" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/DataGatherer/dist/bundle.js">
<provider selected="true" editor-type-id="text-editor">
<state>
<caret column="16" lean-forward="true" selection-start-column="16" selection-end-column="16" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/DataGatherer/dist/DataGeneratorPuppets/src/event-flow/MouseEventFlow.js" />
<entry file="file://$PROJECT_DIR$/DataGatherer/tsconfig.json">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/Predictor/PredictorNeuralNetwork/Predictor.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="102">
<caret line="6" column="9" selection-start-line="6" selection-start-column="9" selection-end-line="6" selection-end-column="9" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Predictor/PredictorNeuralNetwork/datas/train/cat/cat.440.jpg">
<provider selected="true" editor-type-id="images" />
</entry>
<entry file="file://$PROJECT_DIR$/Predictor/PredictorNeuralNetwork/datas/train/cat/cat.445.jpg">
<provider selected="true" editor-type-id="images" />
</entry>
<entry file="file://$PROJECT_DIR$/DataGatherer/package.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="391">
<caret line="23" selection-start-line="23" selection-end-line="23" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/DataGeneratorPuppets/package.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="85">
<caret line="5" column="14" selection-start-line="5" selection-start-column="14" selection-end-line="5" selection-end-column="14" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/package.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="442">
<caret line="26" column="53" selection-start-line="26" selection-start-column="53" selection-end-line="26" selection-end-column="53" />
</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="323">
<caret line="19" column="55" lean-forward="true" selection-start-line="19" selection-start-column="55" selection-end-line="19" selection-end-column="55" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/src/predictor-web-service/main.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="51">
<caret line="3" column="46" selection-start-line="3" selection-start-column="46" selection-end-line="3" selection-end-column="46" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/DataGeneratorPuppets/src/event-flow/MouseEventFlow.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="153">
<caret line="9" lean-forward="true" selection-start-line="9" selection-end-line="9" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/DataGatherer/src/shared/Data.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="34">
<caret line="2" column="21" selection-start-line="2" selection-start-column="21" selection-end-line="2" selection-end-column="21" />
</state> </state>
</provider> </provider>
</entry> </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="68">
<caret line="3" lean-forward="true" selection-start-line="3" selection-end-line="3" /> <caret line="4" column="16" selection-start-line="4" selection-start-column="16" selection-end-line="4" selection-end-column="16" />
</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="85">
<caret line="5" selection-start-line="5" selection-end-line="5" />
<folding>
<element signature="e#0#35#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </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="136"> <state relative-caret-position="170">
<caret line="8" column="80" selection-start-line="8" selection-start-column="80" selection-end-line="8" selection-end-column="80" /> <caret line="10" column="62" selection-start-line="10" selection-start-column="62" selection-end-line="10" selection-end-column="62" />
<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" />
@ -414,68 +680,10 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<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"> <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="5" column="33" selection-start-line="5" selection-start-column="33" selection-end-line="5" selection-end-column="33" /> <caret line="5" column="54" selection-start-line="5" selection-start-column="54" selection-end-line="5" selection-end-column="54" />
</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> <folding>
<element signature="e#0#35#0" expanded="true" /> <element signature="e#0#35#0" expanded="true" />
</folding> </folding>
@ -484,13 +692,78 @@
</entry> </entry>
<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="425"> <state relative-caret-position="497">
<caret line="25" column="13" lean-forward="true" selection-start-line="25" selection-start-column="13" selection-end-line="25" selection-end-column="13" /> <caret line="44" column="39" selection-start-line="44" selection-start-column="39" selection-end-line="44" selection-end-column="39" />
<folding> <folding>
<element signature="e#0#41#0" expanded="true" /> <element signature="e#0#41#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/DataGatherer/src/source/Source.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>
<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="777">
<caret line="77" column="20" selection-start-line="77" selection-start-column="20" selection-end-line="77" selection-end-column="20" />
<folding>
<element signature="e#0#30#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/src/image-creator/ImageCreatorService.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="191">
<caret line="122" column="35" selection-start-line="122" selection-start-column="35" selection-end-line="122" selection-end-column="35" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/DataGeneratorPuppets/src/main.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="170">
<caret line="10" column="1" selection-start-line="10" selection-start-column="1" selection-end-line="10" selection-end-column="1" />
<folding>
<element signature="e#0#32#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/DataGeneratorPuppets/src/datas/flow.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="425">
<caret line="25" column="22" selection-start-line="25" selection-start-column="22" selection-end-line="25" selection-end-column="22" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/DataGeneratorPuppets/src/Puppet.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="170">
<caret line="10" column="32" selection-start-line="10" selection-start-column="32" selection-end-line="10" selection-end-column="32" />
</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="30" column="48" selection-start-line="30" selection-start-column="48" selection-end-line="30" selection-end-column="48" />
<folding>
<element signature="e#0#48#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Predictor/PredictorWebService/src/image-creator/main.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="187">
<caret line="11" selection-start-line="11" selection-end-line="11" />
</state>
</provider>
</entry>
</component> </component>
</project> </project>

View file

@ -1,32 +0,0 @@
export class Data {
private name: string;
private data: any;
private timestamp: number;
private size: {
width: number;
height: number;
};
constructor(name: string, data: any, size: any, timestamp?: number) {
this.name = name;
this.data = data;
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

@ -9,7 +9,7 @@ export class Gatherer {
} }
public start() { public start() {
for(const source of this.sources){ for (const source of this.sources) {
source.startCollect(); source.startCollect();
} }
} }
@ -21,4 +21,4 @@ export class Gatherer {
} }
return allData; return allData;
} }
} }

View file

@ -2,7 +2,7 @@
<head> <head>
<script src="../dist/bundle.js"></script> <script src="../dist/bundle.js"></script>
<script> <script>
const interval = setInterval(() => { /* const interval = setInterval(() => {
let i = 1; let i = 1;
for( i = 1; i <= 13; i++){ for( i = 1; i <= 13; i++){
const el = document.getElementById(i.toString()); const el = document.getElementById(i.toString());
@ -12,23 +12,23 @@
el.style.left = Math.floor(Math.random() * 1000) + 10 + 'px'; el.style.left = Math.floor(Math.random() * 1000) + 10 + 'px';
} }
clearInterval(interval); clearInterval(interval);
}, 200); }, 200);*/
</script> </script>
</head> </head>
<body> <body>
<button>ciao</button> <button>ciao</button>
<div id="1" style="width: 50px; height: 70px; background-color:red; position: absolute"></div> <div id="1" style="width: 50px; height: 70px; background-color:red; position: absolute; top: 20px; left: 100px;"></div>
<div id="2" style="width: 30px; height: 30px; background-color:blue; position: absolute"></div> <div id="2" style="width: 30px; height: 500px; background-color:blue; position: absolute; top: 465px; left: 33px;"></div>
<div id="3" style="width: 40px; height: 20px; background-color:pink; position: absolute"></div> <div id="3" style="width: 40px; height: 20px; background-color:pink; position: absolute; top: 765px; left: 46px;"></div>
<div id="4" style="width: 30px; height: 30px; background-color:black; position: absolute"></div> <div id="4" style="width: 90px; height: 220px; background-color:black; position: absolute; top: 233px; left: 35px;"></div>
<div id="5" style="width: 30px; height: 30px; background-color:cyan; position: absolute"></div> <div id="5" style="width: 30px; height: 30px; background-color:cyan; position: absolute; top: 40px; left: 234px;"></div>
<div id="6" style="width: 30px; height: 30px; background-color:yellow; position: absolute"></div> <div id="6" style="width: 30px; height: 300px; background-color:yellow; position: absolute; top: 66px; left: 5px;"></div>
<div id="7" style="width: 30px; height: 30px; background-color:limegreen; position: absolute"></div> <div id="7" style="width: 120px; height: 20px; background-color:limegreen; position: absolute; top: 123px; left: 45px;"></div>
<div id="8" style="width: 30px; height: 30px; background-color:darkmagenta; position: absolute"></div> <div id="8" style="width: 30px; height: 10px; background-color:darkmagenta; position: absolute; top: 362px; left: 456px;"></div>
<div id="9" style="width: 30px; height: 30px; background-color:darkslategray; position: absolute"></div> <div id="9" style="width: 220px; height: 30px; background-color:darkslategray; position: absolute; top: 43px; left: 222px;"></div>
<div id="10" style="width: 30px; height: 30px; background-color:fuchsia; position: absolute"></div> <div id="10" style="width: 300px; height: 30px; background-color:fuchsia; position: absolute; top: 201px; left: 100px;"></div>
<div id="11" style="width: 30px; height: 30px; background-color:purple; position: absolute"></div> <div id="11" style="width: 230px; height: 120px; background-color:purple; position: absolute; top: 201px; left: 344px;"></div>
<div id="12" style="width: 30px; height: 30px; background-color:sienna; position: absolute"></div> <div id="12" style="width: 80px; height: 230px; background-color:sienna; position: absolute; top: 324px; left: 23px;"></div>
<div id="13" style="width: 30px; height: 30px; background-color:darkturquoise; position: absolute"></div> <div id="13" style="width: 30px; height: 100px; background-color:darkturquoise; position: absolute; top: 130px; left: 320px;"></div>
</body> </body>
</html> </html>

View file

@ -5,20 +5,30 @@ import { Keyboard } from "./source/keyboard/Keyboard";
import { Screen } from "./source/screen/Screen"; import { Screen } from "./source/screen/Screen";
function main() { function main() {
const gatherer: Gatherer = new Gatherer([ const humanGatherer: Gatherer = new Gatherer([
new Screen('screen'), new Screen('screen'),
new Keyboard('keyboard', ['keydown']), new Keyboard('keyboard', ['keydown']),
new Mouse('mouse', ['click', 'mousemove']) new Mouse('mouse', ['click', 'mousemove'])
]); ]);
gatherer.start();
//startPrediction(gatherer); //startPrediction(gatherer);
startGathering(gatherer); // startGathering([humanGatherer, botGatherer]);
startGathering([humanGatherer])
}
function getFlowName() {
const urlParams = new URLSearchParams(window.location.search);
return urlParams.get('flowName');
}
function getAgentName() {
const urlParams = new URLSearchParams(window.location.search);
return urlParams.get('agentName');
} }
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('http') sender.start('http')
.subscribe( .subscribe(
val => { val => {
@ -28,14 +38,18 @@ function startPrediction(gatherer: Gatherer) {
} }
function startGathering(gatherer: Gatherer) { function startGathering(gatherers: Array<Gatherer>) {
const sender: Sender = new Sender(() => gatherer.getData(), 'localhost:4100/', 3000); for(const gatherer of gatherers ) {
sender.start('ws') gatherer.start();
.subscribe(
val => { const sender: Sender = new Sender(() => gatherer.getData(), 'localhost:4100/' + '?agentName='+getAgentName()+'&flowName='+getFlowName(), 1000);
console.log(val); sender.start('ws')
} .subscribe(
); val => {
console.log(val);
}
);
}
} }
main(); main();

View file

@ -1,7 +1,7 @@
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"; import {Data} from "../shared/Data";
export class Sender { export class Sender {
private url: string; private url: string;
@ -36,7 +36,6 @@ export class Sender {
this.wsConnect.send(JSON.stringify(data)); this.wsConnect.send(JSON.stringify(data));
return new Observable((observer) => { return new Observable((observer) => {
this.wsConnect.onmessage = (msg) => { this.wsConnect.onmessage = (msg) => {
console.log(msg);
observer.next(msg); observer.next(msg);
}; };
}); });

View file

@ -0,0 +1,17 @@
export class Data {
public name: string;
public data: any;
public timestamp: number;
public size: {
width: number;
height: number;
};
constructor(name: string, data: any, size: any, timestamp?: number) {
this.name = name;
this.data = data;
this.timestamp = timestamp ? timestamp : Date.now();
this.size = size;
}
}

View file

@ -1,4 +1,4 @@
import { Data } from "./../data/Data"; import { Data } from "../shared/Data";
export class Source { export class Source {
private name: string; private name: string;

View file

@ -1,5 +1,5 @@
import { Source } from '../Source'; import { Source } from '../Source';
import {Data} from "../../data/Data"; import {Data} from "../../shared/Data";
export class Mouse extends Source { export class Mouse extends Source {
@ -8,11 +8,139 @@ export class Mouse extends Source {
} }
startCollect() { startCollect() {
this.collectHumanDatas();
}
collectHumanDatas() {
for(const event of this.events){ for(const event of this.events){
document.addEventListener(event, (e: MouseEvent) => { document.addEventListener(event, (e: MouseEvent) => {
this.data.push(new Data(event, {x: e.x, y: e.y}, {width: window.innerWidth, height: window.innerHeight})); this.data.push(
new Data(
event,
{
x: e.x,
y: e.y,
target: {
id: e.target['id'],
innerText: e.target['innerText'],
style: {
backgroundColor: e.target['style'].backgroundColor
},
rect: e.target['getBoundingClientRect']()
}
}, {
width: window.innerWidth,
height: window.innerHeight
}
)
);
}); });
} }
} }
/*collectBotDatas(flow: Array<MouseEventFlow>) {
function getIntersectedElement(position: {x: number, y: number}) {
//for()
}
function computeMovement(startingPoint: {x: number, y: number}, targetId: string): Promise<Array<Data>> {
return new Promise( (resolve, reject) => {
let movements = [];
const target = document.getElementById(targetId);
const targetCenterCoords = {x: target.getBoundingClientRect().left + target.getBoundingClientRect().width / 2, y: target.getBoundingClientRect().top + target.getBoundingClientRect().height / 2};
const distance_x = Math.abs(startingPoint.x - targetCenterCoords.x);
const distance_y = Math.abs(startingPoint.y - targetCenterCoords.y);
const distance = Math.sqrt(Math.pow(distance_x, 2) + Math.pow(distance_y, 2));
const movementTime = Math.random() * 5000 + 1000;
if(distance) {
const trance = Math.floor(distance / 20);
const step_x = distance_x / trance;
const step_y = distance_y / trance;
let i = 1;
const interval = setInterval(() => {
movements.push(new Data(
'mousemove',
{
x: startingPoint.x > targetCenterCoords.x ? startingPoint.x - step_x * i : startingPoint.x + step_x * i ,
y: startingPoint.y > targetCenterCoords.y ? startingPoint.y - step_y * i : startingPoint.y + step_y * i ,
target: {
id: '',
innerText: '',
style: {},
rect: {}
}
}, {
width: window.innerWidth,
height: window.innerHeight
})
);
i++;
if(i > trance) {
console.log(target);
clearInterval(interval);
resolve(movements);
}
}, movementTime / trance);
} else {
movements = [];
resolve(movements);
}
})
}
function computeInit(): Data {
return new Data(
'mousemove',
{
x: Math.floor(Math.random() * window.innerWidth) + 1,
y: Math.floor(Math.random() * window.innerHeight) + 1,
target: {
id: '',
innerText: '',
style: {},
rect: {}
}
}, {
width: window.innerWidth,
height: window.innerHeight
}
);
}
let i = 0;
let evt = flow[i];
const interval = setInterval( () => {
evt = flow[i];
if(evt.type === 'init') {
this.data.push(computeInit());
i++;
}
if(evt.type === 'mousemove') {
computeMovement({x: this.data[this.data.length-1].data.x, y: this.data[this.data.length-1].data.y}, evt.target)
.then(
movements => {
console.log(movements);
this.data.push(...movements);
i++;
}
);
}
if(evt.type === 'click') {
i++;
}
if(i === flow.length) {
clearInterval(interval);
}
}, 20);
}*/
} }

View file

@ -1,6 +1,6 @@
import { Source } from '../Source'; import { Source } from '../Source';
import Html2CanvasStatic from "html2canvas"; import Html2CanvasStatic from "html2canvas";
import {Data} from "../../data/Data"; import {Data} from "../../shared/Data";
export class Screen extends Source { export class Screen extends Source {
@ -9,7 +9,7 @@ export class Screen extends Source {
} }
public startCollect() { public startCollect() {
const interval = setInterval(() => { /* const interval = setInterval(() => {
if (document.body) { if (document.body) {
Html2CanvasStatic(document.body, {logging: false}) Html2CanvasStatic(document.body, {logging: false})
.then((canvas) => { .then((canvas) => {
@ -17,6 +17,6 @@ export class Screen extends Source {
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}))
}); });
} }
}, 5000); }, 500);*/
} }
} }

462
DataGeneratorPuppets/package-lock.json generated Normal file
View file

@ -0,0 +1,462 @@
{
"name": "datageneratorpuppets",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@types/events": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
"integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==",
"dev": true
},
"@types/node": {
"version": "11.13.4",
"resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.4.tgz",
"integrity": "sha512-+rabAZZ3Yn7tF/XPGHupKIL5EcAbrLxnTr/hgQICxbeuAfWtT0UZSfULE+ndusckBItcv4o6ZeOJplQikVcLvQ==",
"dev": true
},
"@types/ws": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.1.tgz",
"integrity": "sha512-EzH8k1gyZ4xih/MaZTXwT2xOkPiIMSrhQ9b8wrlX88L0T02eYsddatQlwVFlEPyEqV0ChpdpNnE51QPH6NVT4Q==",
"dev": true,
"requires": {
"@types/events": "*",
"@types/node": "*"
}
},
"agent-base": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz",
"integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==",
"requires": {
"es6-promisify": "^5.0.0"
}
},
"arg": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz",
"integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==",
"dev": true
},
"async-limiter": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
"integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"concat-stream": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
"requires": {
"buffer-from": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^2.2.2",
"typedarray": "^0.0.6"
}
},
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"requires": {
"ms": "^2.1.1"
}
},
"diff": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
"integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
"dev": true
},
"es6-promise": {
"version": "4.2.6",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz",
"integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q=="
},
"es6-promisify": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
"integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
"requires": {
"es6-promise": "^4.0.3"
}
},
"eslint-scope": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
"integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
"dev": true,
"requires": {
"esrecurse": "^4.1.0",
"estraverse": "^4.1.1"
}
},
"eslint-visitor-keys": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
"integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
"dev": true
},
"esrecurse": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
"integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
"dev": true,
"requires": {
"estraverse": "^4.1.0"
}
},
"estraverse": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
"integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
"dev": true
},
"extract-zip": {
"version": "1.6.7",
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz",
"integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=",
"requires": {
"concat-stream": "1.6.2",
"debug": "2.6.9",
"mkdirp": "0.5.1",
"yauzl": "2.4.1"
},
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}
}
},
"fd-slicer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
"integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
"requires": {
"pend": "~1.2.0"
}
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"glob": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
"integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"https-proxy-agent": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz",
"integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==",
"requires": {
"agent-base": "^4.1.0",
"debug": "^3.1.0"
},
"dependencies": {
"debug": {
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
"integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
"requires": {
"ms": "^2.1.1"
}
}
}
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"lodash.unescape": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz",
"integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=",
"dev": true
},
"make-error": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz",
"integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==",
"dev": true
},
"mime": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/mime/-/mime-2.4.2.tgz",
"integrity": "sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg=="
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
},
"mkdirp": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"requires": {
"minimist": "0.0.8"
}
},
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"requires": {
"wrappy": "1"
}
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
},
"pend": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
"integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
},
"process-nextick-args": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
},
"progress": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="
},
"proxy-from-env": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz",
"integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4="
},
"puppeteer": {
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.14.0.tgz",
"integrity": "sha512-SayS2wUX/8LF8Yo2Rkpc5nkAu4Jg3qu+OLTDSOZtisVQMB2Z5vjlY2TdPi/5CgZKiZroYIiyUN3sRX63El9iaw==",
"requires": {
"debug": "^4.1.0",
"extract-zip": "^1.6.6",
"https-proxy-agent": "^2.2.1",
"mime": "^2.0.3",
"progress": "^2.0.1",
"proxy-from-env": "^1.0.0",
"rimraf": "^2.6.1",
"ws": "^6.1.0"
}
},
"readable-stream": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"rimraf": {
"version": "2.6.3",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
"integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
"requires": {
"glob": "^7.1.3"
}
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"semver": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
"integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
"dev": true
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
},
"source-map-support": {
"version": "0.5.12",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz",
"integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==",
"dev": true,
"requires": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
}
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"requires": {
"safe-buffer": "~5.1.0"
}
},
"ts-node": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.1.0.tgz",
"integrity": "sha512-34jpuOrxDuf+O6iW1JpgTRDFynUZ1iEqtYruBqh35gICNjN8x+LpVcPAcwzLPi9VU6mdA3ym+x233nZmZp445A==",
"dev": true,
"requires": {
"arg": "^4.1.0",
"diff": "^3.1.0",
"make-error": "^1.1.1",
"source-map-support": "^0.5.6",
"yn": "^3.0.0"
}
},
"typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
},
"typescript": {
"version": "3.4.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.3.tgz",
"integrity": "sha512-FFgHdPt4T/duxx6Ndf7hwgMZZjZpB+U0nMNGVCYPq0rEzWKjEDobm4J6yb3CS7naZ0yURFqdw9Gwc7UOh/P9oQ==",
"dev": true
},
"typescript-eslint-parser": {
"version": "22.0.0",
"resolved": "https://registry.npmjs.org/typescript-eslint-parser/-/typescript-eslint-parser-22.0.0.tgz",
"integrity": "sha512-pD8D7oTeRwWvFVxK3PaY6FYAiZsuRXFkIc2+1xkwCT3NduySgCgjeAkR5/dnIWecOiFVcEHf4ypXurF02Q6Z3Q==",
"dev": true,
"requires": {
"eslint-scope": "^4.0.0",
"eslint-visitor-keys": "^1.0.0",
"typescript-estree": "18.0.0"
}
},
"typescript-estree": {
"version": "18.0.0",
"resolved": "https://registry.npmjs.org/typescript-estree/-/typescript-estree-18.0.0.tgz",
"integrity": "sha512-HxTWrzFyYOPWA91Ij7xL9mNUVpGTKLH2KiaBn28CMbYgX2zgWdJqU9hO7Are+pAPAqY91NxAYoaAyDDZ3rLj2A==",
"dev": true,
"requires": {
"lodash.unescape": "4.0.1",
"semver": "5.5.0"
}
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"ws": {
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
"integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
"requires": {
"async-limiter": "~1.0.0"
}
},
"yauzl": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
"integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
"requires": {
"fd-slicer": "~1.0.1"
}
},
"yn": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.0.tgz",
"integrity": "sha512-kKfnnYkbTfrAdd0xICNFw7Atm8nKpLcLv9AZGEt+kczL/WQVai4e2V6ZN8U/O+iI6WrNuJjNNOyu4zfhl9D3Hg==",
"dev": true
}
}
}

View file

@ -0,0 +1,22 @@
{
"name": "datageneratorpuppets",
"version": "1.0.0",
"description": "",
"main": "main.js",
"scripts": {
"build:puppet": "tsc -w",
"dev:puppet": "ts-node src/main.ts"
},
"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"
},
"author": "",
"license": "ISC",
"dependencies": {
"puppeteer": "^1.14.0"
}
}

View file

@ -0,0 +1,50 @@
import puppeteer from 'puppeteer';
export class Puppet {
public flow: { type: string; target: {x: number, y: number, width: number, height: number} }[];
public url: string;
public flowName: string;
public agentName: string;
mousePosition: {x: number, y: number} = {x:0, y:0};
constructor(url: string, flowName: string, agentName: string, flow: { type: string; target: {x: number, y: number, width: number, height: number}}[]){
this.url = url;
this.flow = flow;
this.flowName = flowName;
this.agentName = agentName;
}
async execMovements(page, flow: {type: string; target: {x: number, y: number, width: number, height: number} }[]){
function humanize(val: number, bounduaries: {min: number, max: number}) {
console.log(val);
console.log(Math.random() * Math.abs(bounduaries.max));
return val + (Math.random() * Math.abs(bounduaries.max));
}
try {
await page.goto('file:///C:/Users/Lorenzo/UserflowPredictorSystem/DataGatherer/src/index.html?flowName='+this.flowName+'&agentName=' + this.agentName, {waitUntil: 'load'});
for(const movement of flow){
let boundariesX = {min: movement.target.x, max: movement.target.width};
let boundariesY = {min: movement.target.y, max: movement.target.height};
if(movement.type === 'click') {
await page.mouse.click(humanize(movement.target.x, boundariesX), humanize(movement.target.y, boundariesY), {delay: Math.random() * 500 + 100});
}
if(movement.type === 'mousemove') {
await page.mouse.move(humanize(movement.target.x, boundariesX), humanize(movement.target.y, boundariesY), {steps: Math.random() * 100 + 50});
}
}
} catch (err) {
console.log('ERR:', err.message);
}
}
async run() {
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
await this.execMovements(page, this.flow);
}
}

View file

@ -0,0 +1,9 @@
export class MouseEventFlow {
public type: 'mousemove' | 'click' | 'init';
public target: string;
constructor(type: 'mousemove' | 'click', target: string) {
this.type = name;
this.target = target;
}
}

View file

@ -0,0 +1,13 @@
import {Puppet} from "./Puppet";
import {flows} from "../../DataGeneratorPuppets/src/datas/flow";
function main() {
for(let i = 0; i < 30; i++) {
let flowIndex = Math.floor(Math.random() * flows.length + 0);
const puppet = new Puppet('', flows[flowIndex].name, 'bot_'+i, flows[flowIndex].data);
puppet.run();
}
}
main();

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
}

View file

@ -988,8 +988,7 @@
}, },
"code-point-at": { "code-point-at": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true
"optional": true
}, },
"concat-map": { "concat-map": {
"version": "0.0.1", "version": "0.0.1",
@ -1100,8 +1099,7 @@
}, },
"inherits": { "inherits": {
"version": "2.0.3", "version": "2.0.3",
"bundled": true, "bundled": true
"optional": true
}, },
"ini": { "ini": {
"version": "1.3.5", "version": "1.3.5",
@ -1111,7 +1109,6 @@
"is-fullwidth-code-point": { "is-fullwidth-code-point": {
"version": "1.0.0", "version": "1.0.0",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"number-is-nan": "^1.0.0" "number-is-nan": "^1.0.0"
} }
@ -1223,8 +1220,7 @@
}, },
"number-is-nan": { "number-is-nan": {
"version": "1.0.1", "version": "1.0.1",
"bundled": true, "bundled": true
"optional": true
}, },
"object-assign": { "object-assign": {
"version": "4.1.1", "version": "4.1.1",
@ -1339,7 +1335,6 @@
"string-width": { "string-width": {
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"optional": true,
"requires": { "requires": {
"code-point-at": "^1.0.0", "code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0", "is-fullwidth-code-point": "^1.0.0",
@ -2346,6 +2341,11 @@
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
}, },
"query-string-parser": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/query-string-parser/-/query-string-parser-0.2.3.tgz",
"integrity": "sha512-t8us5B2sj4pnMXxRkRE0B5NM7YeevFPew1ijr3uiv8AXVY4I6LwQRECxe6ZRmMJarmihhzgcjJmjbPGrMWg7iA=="
},
"range-parser": { "range-parser": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",

View file

@ -10,6 +10,7 @@
"cors": "^2.8.5", "cors": "^2.8.5",
"express": "^4.16.4", "express": "^4.16.4",
"nodemon": "^1.18.10", "nodemon": "^1.18.10",
"query-string-parser": "^0.2.3",
"ws": "^6.2.1" "ws": "^6.2.1"
}, },
"devDependencies": { "devDependencies": {
@ -20,10 +21,11 @@
"typescript-eslint-parser": "^22.0.0" "typescript-eslint-parser": "^22.0.0"
}, },
"scripts": { "scripts": {
"build": "tsc -w", "build:ws": "tsc -w",
"dev": "ts-node ./src/main.ts", "dev:ws": "ts-node src/predictor-web-service/main.ts",
"start": "nodemon ./dist/main.js", "dev:imageCreator": "ts-node src/image-creator/main.ts",
"prod": "npm run build && npm run start" "start:ws": "nodemon ./dist/main.js",
"prod:ws": "npm run build:ws && npm run start:ws"
}, },
"author": "", "author": "",
"license": "ISC" "license": "ISC"

View file

@ -0,0 +1,158 @@
import {Data} from "../../../../DataGatherer/src/shared/Data";
import {createCanvas, Image} from "canvas";
import fs from "fs";
export class ImageCreatorService {
createImageFromData(data: Array<Data>, name: string) {
return new Promise((resolve, reject) => {
const htmlElements = data.filter( val => {
return val.name !== 'screen';
});
const mouseClicks = data.filter(val => {
return val.name === 'click';
});
const mouseMovements = data.filter(val => {
return val.name === 'mousemove';
});
const keyboard = data.filter(val => {
return val.name === 'keydown';
});
//todo da cambiare le dimensioni e renderle dinamiche
const canvas = createCanvas(1000, 800);
const ctx = canvas.getContext('2d');
this.printHTMLElements(htmlElements, ctx);
this.printMouseClick(mouseClicks, ctx);
this.printMouseMove(mouseMovements, ctx);
this.printKeyboard(keyboard, ctx);
const base64data = canvas.toBuffer();
resolve({data: base64data, name: name});
});
}
saveImage(base64datas: any, path: string) {
fs.writeFile(path, base64datas, 'base64', function (err) {
if (err) throw err;
console.log('Image saved');
});
}
applyDataToImage(data: Array<Data>, name: string) {
return new Promise((resolve, reject) => {
const mouseClicks = data.filter(val => {
return val.name === 'click';
});
const mouseMovements = data.filter(val => {
return val.name === 'mousemove';
});
const keyboard = data.filter(val => {
return val.name === 'keydown';
});
const image: any = data.filter(val => {
return val.name === 'screen';
})[0];
if (image) {
const canvas = createCanvas(image.size.width, image.size.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();
resolve({data: base64data, name: name});
};
img.onerror = err => {
throw err
};
img.src = image.data;
} else {
resolve(null);
}
});
}
printMouseClick(mouseclicks: Array<Data>, ctx: CanvasRenderingContext2D) {
ctx.strokeStyle = 'rgba(219, 10, 91, 0.5)';
ctx.lineWidth = 5;
ctx.beginPath();
for(const move of mouseclicks){
ctx.strokeRect(move.data.x, move.data.y,10, 10);
}
ctx.stroke();
}
printHTMLElements(htmlElements: Array<Data>, ctx: CanvasRenderingContext2D) {
ctx.strokeStyle = 'rgba(33, 123, 22, 0.5)';
ctx.lineWidth = 2;
ctx.beginPath();
for(const element of htmlElements){
ctx.fillStyle = element.data.target.style.backgroundColor !== '' ? element.data.target.style.backgroundColor : 'transparent';
ctx.fillRect(element.data.target.rect.x, element.data.target.rect.y, element.data.target.rect.width, element.data.target.rect.height);
ctx.strokeRect(element.data.target.rect.x, element.data.target.rect.y, element.data.target.rect.width, element.data.target.rect.height);
ctx.font = "10px Arial";
ctx.fillStyle = 'black';
ctx.textAlign = "center";
ctx.fillText(element.data.target.id, element.data.target.rect.x + element.data.target.rect.width/2, element.data.target.rect.y + element.data.target.rect.height/2);
}
ctx.stroke();
}
printMouseMove(mousemoves: Array<Data>, ctx: CanvasRenderingContext2D) {
ctx.strokeStyle = 'rgba(0,0,0,0.8)';
ctx.lineWidth = 5;
ctx.beginPath();
for(const move of mousemoves){
ctx.lineTo(move.data.x, move.data.y);
}
ctx.stroke();
}
printKeyboard(keyboard: Array<Data>, ctx: CanvasRenderingContext2D) {
}
printImage(image: any, ctx: CanvasRenderingContext2D){
ctx.drawImage(image, 0, 0);
}
public startProcessing(srcPath: string, destPath: string) {
const that = this;
fs.readdir(srcPath, function(err, items) {
for (var i=0; i<items.length; i++) {
const data = fs.readFileSync(srcPath + '/' + items[i]);
try {
const jsonData = JSON.parse(data.toString('utf8'));
fs.mkdirSync('./trainingImages/virtual/' + destPath, {recursive: true});
that.createImageFromData(jsonData, items[i].split('.')[0])
.then(res => {
if(res) {
console.log('virtual image ' + ' processed');
that.saveImage(res['data'], './trainingImages/virtual/' + destPath + '/' + res['name'] + '.png');
}
});
that.applyDataToImage(jsonData, items[i].split('.')[0])
.then(res => {
if(res) {
console.log('real image ' + ' processed');
that.saveImage(res['data'], './trainingImages/real/' + destPath + '/' + res['name'] + '.png');
}
});
} catch (e) {
console.log('file not valid');
}
}
});
}
}

View file

@ -0,0 +1,11 @@
import {ImageCreatorService} from "./ImageCreatorService";
function main() {
const imageCreatorService = new ImageCreatorService();
imageCreatorService.startProcessing('./trainingDatas/flow1', 'flow1');
imageCreatorService.startProcessing('./trainingDatas/flow2', 'flow2');
imageCreatorService.startProcessing('./trainingDatas/flow3', 'flow3');
}
main();

View file

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

View file

@ -4,8 +4,8 @@ import * as http from 'http';
import cors from 'cors'; import cors from 'cors';
import * as bodyParser from "body-parser"; import * as bodyParser from "body-parser";
import fs from 'fs'; import fs from 'fs';
import {Data} from "../../../../DataGatherer/src/data/Data"; import {Data} from "../../../../DataGatherer/src/shared/Data";
import {createCanvas, Image} from "canvas"; import parser from 'query-string-parser';
export class PredictorWebService { export class PredictorWebService {
@ -16,44 +16,40 @@ export class PredictorWebService {
private httpServer: http.Server; private httpServer: http.Server;
private wss: WebSocket.Server; private wss: WebSocket.Server;
private counter: number = 0;
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;
this.portWebSocket = portWebSocket; this.portWebSocket = portWebSocket;
} }
public startWebSocket() { public startTrainer() {
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, req: any) => {
let url = require('url').parse(req.url).query;
const queryObj = parser.fromQuery(url);
const that = this; const that = this;
ws.on('message', (message: string) => { ws.on('message', (message: string) => {
const jsonMsg = JSON.parse(message); const jsonMsg = JSON.parse(message);
const data: Array<Data> = jsonMsg.map(d => new Data(d.name, d.data, d.size, d.timestamp)); const data: Array<Data> = jsonMsg.map(d => new Data(d.name, d.data, d.size, d.timestamp));
let image = data.find(val => { that.counter++;
return val.getName() === 'screen'; that.saveData(data, queryObj.flowName, queryObj.agentName)
}); .then( (msg) => {
if(image) { if(msg === 'ok') {
that.saveImage(image); ws.send('trainer - Data saved');
that.applyDataToImage(image, data) }
.then(val => { })
ws.send(val); .catch( (err) => {
}); ws.send('trainer - Error while saving data');
} else { });
that.applyDataToImage(that.oldImageData, data)
.then(val => {
ws.send(val);
});
}
}); });
}); });
} }
public startExpress() { public startPredictor() {
const that = this;
this.app = express(); this.app = express();
this.app.use(cors()); this.app.use(cors());
this.app.use(bodyParser.json()); this.app.use(bodyParser.json());
@ -63,83 +59,38 @@ export class PredictorWebService {
function generateFakeResponse() { function generateFakeResponse() {
return Array.from({length: 20}, () => Math.random().toPrecision(2)); return Array.from({length: 20}, () => Math.random().toPrecision(2));
} }
console.log('Request prediction'); console.log('predictor - Request prediction');
res.send(generateFakeResponse()); res.send(generateFakeResponse());
}); });
this.app.listen(this.portApi, () => { this.app.listen(this.portApi, () => {
console.log('PredictorWebService is up and running on port: %d', this.portApi); console.log('predictor - 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) { saveData(data: Array<Data>, flowName: string, agentName: string) {
ctx.strokeStyle = 'rgba(0,0,0,0.8)';
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);
}
applyDataToImage(image: Data, data: Array<Data>) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const mouseClicks = data.filter(val => { console.log(flowName);
return val.getName() === 'click'; console.log(agentName);
}); if(flowName && agentName) {
const mouseMovements = data.filter(val => { fs.mkdirSync('./trainingDatas/' + flowName + '/', { recursive: true });
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 { } else {
resolve('ok - only datas'); fs.mkdirSync('./trainingDatas/undefined', { recursive: true });
}
if(!flowName && !agentName) {
fs.writeFile('./trainingDatas/undefined/' + this.counter + '.json', JSON.stringify(data), 'utf8', function (err) {
if (err) reject('err');
console.log('Data saved');
resolve('ok');
});
} else {
fs.writeFile('./trainingDatas/' + flowName + '/' + agentName + '_' + this.counter + '.json', JSON.stringify(data), 'utf8', function (err) {
if (err) reject('err');
console.log('Data saved');
resolve('ok');
});
} }
}); });
}
saveImage(image: Data) {
if(image) {
this.oldImageData = image;
}
} }
} }

View file

@ -0,0 +1,9 @@
import { PredictorWebService } from "./PredictorWebService";
function main() {
const predictorWebService = new PredictorWebService('/', 4000, 4100);
predictorWebService.startPredictor();
predictorWebService.startTrainer();
}
main();