SUPER DUPER HYPER!!!

This commit is contained in:
Lorenzo Iovino 2017-07-09 16:45:46 +02:00
parent 3a528f307b
commit cb63402b9f
12 changed files with 2741 additions and 494 deletions

725
.idea/workspace.xml generated
View file

@ -6,28 +6,15 @@
<component name="ChangeListManager">
<list default="true" id="eb36c2e9-c6c6-48da-b007-cd41eccd9e5a" name="Default" comment="">
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Client/src/com/texttwist/client/controllers/HomeController.java" afterPath="$PROJECT_DIR$/Client/src/com/texttwist/client/controllers/HomeController.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Client/src/com/texttwist/client/models/Game.java" afterPath="$PROJECT_DIR$/Client/src/com/texttwist/client/models/Game.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/FetchHighscore.java" afterPath="$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/FetchHighscore.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/InvitePlayers.java" afterPath="$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/InvitePlayers.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Client/src/com/texttwist/client/App.java" afterPath="$PROJECT_DIR$/Client/src/com/texttwist/client/App.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/SendWords.java" afterPath="$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/SendWords.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/StartGame.java" afterPath="$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/StartGame.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/WaitForPlayers.java" afterPath="$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/WaitForPlayers.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/WaitForScore.java" afterPath="$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/WaitForScore.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Commons/src/utilities/Logger.java" afterPath="$PROJECT_DIR$/Commons/src/utilities/Logger.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Commons/src/constants/Config.java" afterPath="$PROJECT_DIR$/Commons/src/constants/Config.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Server/src/com/texttwist/server/components/GameServer.java" afterPath="$PROJECT_DIR$/Server/src/com/texttwist/server/components/GameServer.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Server/src/com/texttwist/server/components/NotificationServer.java" afterPath="$PROJECT_DIR$/Server/src/com/texttwist/server/components/NotificationServer.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Server/src/com/texttwist/server/components/ThreadProxy.java" afterPath="$PROJECT_DIR$/Server/src/com/texttwist/server/components/ThreadProxy.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Server/src/com/texttwist/server/models/Match.java" afterPath="$PROJECT_DIR$/Server/src/com/texttwist/server/models/Match.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/CheckOnlineUsers.java" afterPath="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/CheckOnlineUsers.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/ComputeHighscores.java" afterPath="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/ComputeHighscores.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/JoinMatch.java" afterPath="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/JoinMatch.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/ComputeScore.java" afterPath="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/ComputeScore.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/JoinTimeout.java" afterPath="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/JoinTimeout.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/MatchTimeout.java" afterPath="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/MatchTimeout.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/ReceiveWords.java" afterPath="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/ReceiveWords.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/SendInvitations.java" afterPath="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/SendInvitations.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/SendMessageToAllPlayers.java" afterPath="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/SendMessageToAllPlayers.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/WaitForPlayers.java" afterPath="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/WaitForPlayers.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/client_1.log" afterPath="$PROJECT_DIR$/client_1.log" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/server.log" afterPath="$PROJECT_DIR$/server.log" />
</list>
@ -40,7 +27,7 @@
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="CoverageDataManager">
<SUITE FILE_PATH="coverage/TextTwist$Client.coverage" NAME="Client Coverage Results" MODIFIED="1499382812028" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="idea" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false">
<SUITE FILE_PATH="coverage/TextTwist$Client.coverage" NAME="Client Coverage Results" MODIFIED="1499596157248" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="idea" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false">
<FILTER>com.texttwist.client.*</FILTER>
</SUITE>
<SUITE FILE_PATH="coverage/TextTwist$Main__1_.coverage" NAME="Main (1) Coverage Results" MODIFIED="1497438042403" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="idea" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false">
@ -50,107 +37,103 @@
<component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="375">
<file leaf-file-name="JoinMatch.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/JoinMatch.java">
<file leaf-file-name="ThreadProxy.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/components/ThreadProxy.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="388">
<caret line="55" column="12" lean-forward="false" selection-start-line="55" selection-start-column="12" selection-end-line="55" selection-end-column="12" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="SessionsManager.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/components/SessionsManager.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="293">
<caret line="36" column="16" lean-forward="false" selection-start-line="36" selection-start-column="16" selection-end-line="36" selection-end-column="16" />
<state relative-caret-position="262">
<caret line="150" column="52" lean-forward="true" selection-start-line="150" selection-start-column="52" selection-end-line="150" selection-end-column="52" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ComputeHighscores.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/ComputeHighscores.java">
<file leaf-file-name="Match.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/models/Match.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="63">
<caret line="6" column="0" lean-forward="true" selection-start-line="6" selection-start-column="0" selection-end-line="6" selection-end-column="0" />
<state relative-caret-position="325">
<caret line="95" column="66" lean-forward="true" selection-start-line="95" selection-start-column="66" selection-end-line="95" selection-end-column="66" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="NotificationServer.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/components/NotificationServer.java">
<file leaf-file-name="ReceiveWords.java" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/ReceiveWords.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="514">
<caret line="46" column="40" lean-forward="false" selection-start-line="46" selection-start-column="40" selection-end-line="46" selection-end-column="40" />
<state relative-caret-position="474">
<caret line="60" column="47" lean-forward="true" selection-start-line="60" selection-start-column="47" selection-end-line="60" selection-end-column="47" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="WaitForScore.java" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/WaitForScore.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="210">
<caret line="20" column="0" lean-forward="true" selection-start-line="20" selection-start-column="0" selection-end-line="20" selection-end-column="0" />
<folding>
<marker date="1499435378808" expanded="true" signature="1960:2124" ph="{...}" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="WaitForPlayers.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/WaitForPlayers.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="587">
<caret line="94" column="0" lean-forward="true" selection-start-line="94" selection-start-column="0" selection-end-line="94" selection-end-column="0" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="GamePage.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Client/src/com/texttwist/client/pages/GamePage.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="183">
<caret line="92" column="0" lean-forward="false" selection-start-line="92" selection-start-column="0" selection-end-line="92" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="WaitForPlayers.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/WaitForPlayers.java">
<file leaf-file-name="MatchTimeout.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/MatchTimeout.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="294">
<caret line="26" column="44" lean-forward="false" selection-start-line="26" selection-start-column="44" selection-end-line="26" selection-end-column="44" />
<caret line="17" column="13" lean-forward="true" selection-start-line="17" selection-start-column="13" selection-end-line="17" selection-end-column="13" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="SendInvitations.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/SendInvitations.java">
<file leaf-file-name="GameServer.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/components/GameServer.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="399">
<caret line="29" column="44" lean-forward="false" selection-start-line="29" selection-start-column="44" selection-end-line="29" selection-end-column="44" />
<state relative-caret-position="716">
<caret line="61" column="39" lean-forward="false" selection-start-line="61" selection-start-column="39" selection-end-line="61" selection-end-column="39" />
<folding>
<marker date="1499608543751" expanded="true" signature="4986:5015" ph="{...}" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="SendWords.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/SendWords.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="296">
<caret line="37" column="73" lean-forward="true" selection-start-line="37" selection-start-column="73" selection-end-line="37" selection-end-column="73" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Server.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/Server.java">
<file leaf-file-name="ComputeScore.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/ComputeScore.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="514">
<caret line="45" column="36" lean-forward="false" selection-start-line="45" selection-start-column="36" selection-end-line="45" selection-end-column="36" />
<state relative-caret-position="147">
<caret line="25" column="0" lean-forward="true" selection-start-line="25" selection-start-column="0" selection-end-line="25" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="App.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Client/src/com/texttwist/client/App.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="109">
<caret line="79" column="71" lean-forward="true" selection-start-line="79" selection-start-column="71" selection-end-line="79" selection-end-column="71" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="SendMessageToAllPlayers.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/SendMessageToAllPlayers.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="162">
<caret line="36" column="0" lean-forward="false" selection-start-line="36" selection-start-column="0" selection-end-line="36" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Config.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/Commons/src/constants/Config.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="162">
<caret line="25" column="37" lean-forward="false" selection-start-line="25" selection-start-column="37" selection-end-line="25" selection-end-column="37" />
<folding />
</state>
</provider>
@ -167,36 +150,36 @@
</component>
<component name="FindInProjectRecents">
<findStrings>
<find>System.out.pr</find>
<find>System\.out\.println\(elem\.account\.userName \+ \&quot; \| \&quot; \+ elem\.token\)\;\n</find>
<find>Systemout</find>
<find>Systemou</find>
<find>Systemo</find>
<find>Syst</find>
<find>Sys</find>
<find>G</find>
<find>System\.out\.println\(\&quot;SEtting score of \&quot; \+ m\.playersScore\.get\(i\)\.getKey\(\) \+ \&quot; to \&quot; \+ score\)\;\n</find>
<find>Syste</find>
<find>System.</find>
<find>System\.out\.println\(\&quot;Eccezione\&quot; \+ e\)\;\n</find>
<find>S</find>
<find>System</find>
<find>System.o</find>
<find>System.out</find>
<find>n</find>
<find>new client</find>
<find>new client r</find>
<find>new client re</find>
<find>new client regi</find>
<find>l</find>
<find>login</find>
<find>TI</find>
<find>TIMEOUT</find>
<find>ecc</find>
<find>ecce</find>
<find>eccez</find>
<find>eccezio</find>
<find>eccezion</find>
<find>ma</find>
<find>match</find>
<find>match.sta</find>
<find>match.star</find>
<find>match.start</find>
<find>ne</find>
<find>new Thr</find>
<find>new Thre</find>
<find>F</find>
<find>Future</find>
<find>si</find>
<find>singlethr</find>
<find>singleth</find>
<find>singlet</find>
<find>single</find>
<find>singleTh</find>
<find>singleT</find>
<find>t</find>
<find>threa</find>
<find>threadsi</find>
<find>threads</find>
<find>thr</find>
<find>thread</find>
<find>threadp</find>
<find>threadpo</find>
<find>threadpool</find>
<find>threadpool.</find>
<find>bufferWo</find>
<find>datag</find>
<find>buffer</find>
</findStrings>
</component>
<component name="Git.Settings">
@ -213,7 +196,6 @@
<option value="$PROJECT_DIR$/Client/src/com/texttwist/client/models/SessionService.java" />
<option value="$PROJECT_DIR$/Commons/src/models/User.java" />
<option value="$PROJECT_DIR$/Commons/src/models/Session.java" />
<option value="$PROJECT_DIR$/Client/src/com/texttwist/client/App.java" />
<option value="$PROJECT_DIR$/Client/src/com/texttwist/client/services/NotificationService.java" />
<option value="$PROJECT_DIR$/Client/src/com/texttwist/client/pages/HomePage.java" />
<option value="$PROJECT_DIR$/Client/src/com/texttwist/client/pages/Page.java" />
@ -233,34 +215,35 @@
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/components/AccountsManager.java" />
<option value="$PROJECT_DIR$/Commons/src/models/Message.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/models/Dictionary.java" />
<option value="$PROJECT_DIR$/Commons/src/constants/Config.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/Server.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/ComputeScore.java" />
<option value="$PROJECT_DIR$/Client/src/com/texttwist/client/services/AuthService.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/components/Auth.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/components/SessionsManager.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/components/ThreadProxy.java" />
<option value="$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/InvitePlayers.java" />
<option value="$PROJECT_DIR$/Client/src/com/texttwist/client/controllers/HomeController.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/ReceiveWords.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/CheckOnlineUsers.java" />
<option value="$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/StartGame.java" />
<option value="$PROJECT_DIR$/Client/src/com/texttwist/client/models/Game.java" />
<option value="$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/WaitForPlayers.java" />
<option value="$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/SendWords.java" />
<option value="$PROJECT_DIR$/Commons/src/utilities/Logger.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/components/GameServer.java" />
<option value="$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/FetchHighscore.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/JoinMatch.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/models/Match.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/SendMessageToAllPlayers.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/MatchTimeout.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/JoinTimeout.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/WaitForPlayers.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/SendInvitations.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/ComputeHighscores.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/components/NotificationServer.java" />
<option value="$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/WaitForScore.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/JoinTimeout.java" />
<option value="$PROJECT_DIR$/Commons/src/constants/Config.java" />
<option value="$PROJECT_DIR$/Client/src/com/texttwist/client/App.java" />
<option value="$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/SendWords.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/components/ThreadProxy.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/components/GameServer.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/models/Match.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/MatchTimeout.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/ComputeScore.java" />
<option value="$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/ReceiveWords.java" />
</list>
</option>
</component>
@ -315,90 +298,6 @@
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="Scratches" />
<pane id="Scope">
<subPane subId="Changed Files">
<PATH>
<PATH_ELEMENT USER_OBJECT="Root">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="Server">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="Server">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="src">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="com/texttwist/server">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="tasks">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT USER_OBJECT="Root">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="Server">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="Server">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="src">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="com/texttwist/server">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="models">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT USER_OBJECT="Root">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="Server">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="Server">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="src">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="com/texttwist/server">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="components">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
</PATH>
</subPane>
</pane>
<pane id="PackagesPane" />
<pane id="ProjectPane">
<subPane>
<PATH>
@ -731,6 +630,90 @@
</PATH>
</subPane>
</pane>
<pane id="PackagesPane" />
<pane id="Scratches" />
<pane id="Scope">
<subPane subId="Changed Files">
<PATH>
<PATH_ELEMENT USER_OBJECT="Root">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="Server">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="Server">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="src">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="com/texttwist/server">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="tasks">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT USER_OBJECT="Root">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="Server">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="Server">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="src">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="com/texttwist/server">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="models">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT USER_OBJECT="Root">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="Server">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="Server">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="src">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="com/texttwist/server">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
<PATH_ELEMENT USER_OBJECT="components">
<option name="myItemId" value="" />
<option name="myItemType" value="" />
</PATH_ELEMENT>
</PATH>
</subPane>
</pane>
</panes>
</component>
<component name="PropertiesComponent">
@ -1251,46 +1234,46 @@
<workItem from="1499360675918" duration="23000" />
<workItem from="1499416872438" duration="7796000" />
<workItem from="1499430785280" duration="4599000" />
<workItem from="1499591762560" duration="13436000" />
</task>
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="328382000" />
<option name="totallyTimeSpent" value="347868000" />
</component>
<component name="ToolWindowManager">
<frame x="-9" y="-9" width="1938" height="1048" extended-state="6" />
<editor active="true" />
<layout>
<window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Nl-Palette" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.39949432" sideWeight="0.5164706" order="7" side_tool="true" content_ui="tabs" />
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
<window_info id="Properties" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.39846322" sideWeight="0.48352942" order="3" side_tool="false" content_ui="tabs" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32821077" sideWeight="0.49764705" order="10" side_tool="false" content_ui="tabs" />
<window_info id="Palette&#9;" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Image Layers" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.39949432" sideWeight="0.5164706" order="7" side_tool="true" content_ui="tabs" />
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="WINDOWED" visible="true" show_stripe_button="true" weight="0.4215148" sideWeight="0.6982353" order="2" side_tool="false" content_ui="tabs" x="979" y="111" width="908" height="418" />
<window_info id="Properties" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="WINDOWED" visible="true" show_stripe_button="true" weight="0.4215148" sideWeight="0.6982353" order="2" side_tool="false" content_ui="tabs" x="1215" y="267" width="908" height="467" />
<window_info id="Coverage" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32916668" sideWeight="0.5" order="10" side_tool="true" content_ui="tabs" />
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
<window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.2203125" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32930845" sideWeight="0.49764705" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Theme Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="true" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.39846322" sideWeight="0.48352942" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Coverage" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32916668" sideWeight="0.5" order="10" side_tool="true" content_ui="tabs" />
</layout>
</component>
<component name="TypeScriptGeneratedFilesManager">
@ -1301,7 +1284,7 @@
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<option name="time" value="104" />
<option name="time" value="106" />
</breakpoint-manager>
<watches-manager />
</component>
@ -1310,18 +1293,6 @@
<option name="FILTER_TARGETS" value="false" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/Client/src/com/texttwist/client/controllers/HighscoresController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="252">
<caret line="20" column="28" lean-forward="true" selection-start-line="20" selection-start-column="28" selection-end-line="20" selection-end-column="28" />
<folding>
<element signature="imports" expanded="false" />
<element signature="e#497#498#0" expanded="false" />
<element signature="e#554#555#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Client/src/com/texttwist/client/controllers/RegisterController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="189">
@ -1375,13 +1346,11 @@
</entry>
<entry file="file://$PROJECT_DIR$/Client/src/com/texttwist/client/controllers/GameController.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="209">
<caret line="37" column="22" lean-forward="false" selection-start-line="37" selection-start-column="22" selection-end-line="37" selection-end-column="22" />
<state relative-caret-position="105">
<caret line="11" column="3" lean-forward="false" selection-start-line="11" selection-start-column="3" selection-end-line="11" selection-end-column="3" />
<folding>
<element signature="e#950#951#0" expanded="false" />
<element signature="e#1026#1027#0" expanded="false" />
<element signature="e#1064#1065#0" expanded="false" />
<element signature="e#1124#1125#0" expanded="false" />
<element signature="e#732#733#0" expanded="false" />
<element signature="e#783#784#0" expanded="false" />
</folding>
</state>
</provider>
@ -1427,14 +1396,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Commons/src/constants/Config.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="157">
<caret line="14" column="62" lean-forward="false" selection-start-line="14" selection-start-column="62" selection-end-line="14" selection-end-column="62" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Client/src/com/texttwist/client/pages/MenuPage.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="105">
@ -1451,14 +1412,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/ComputeScore.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="210">
<caret line="17" column="16" lean-forward="false" selection-start-line="17" selection-start-column="11" selection-end-line="17" selection-end-column="16" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Commons/src/interfaces/IAuth.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="189">
@ -1499,14 +1452,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Client/src/com/texttwist/client/App.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="315">
<caret line="51" column="47" lean-forward="false" selection-start-line="51" selection-start-column="47" selection-end-line="51" selection-end-column="47" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Commons/src/interfaces/INotificationClient.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="189">
@ -1515,14 +1460,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/components/ThreadProxy.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="249">
<caret line="177" column="44" lean-forward="true" selection-start-line="177" selection-start-column="44" selection-end-line="177" selection-end-column="44" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/InvitePlayers.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="671">
@ -1547,14 +1484,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/ReceiveWords.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-32">
<caret line="42" column="0" lean-forward="false" selection-start-line="42" selection-start-column="0" selection-end-line="42" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/CheckOnlineUsers.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="294">
@ -1573,16 +1502,8 @@
</entry>
<entry file="file://$PROJECT_DIR$/Client/src/com/texttwist/client/models/Game.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="293">
<caret line="93" column="0" lean-forward="false" selection-start-line="93" selection-start-column="0" selection-end-line="93" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/SendWords.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="283">
<caret line="54" column="0" lean-forward="false" selection-start-line="54" selection-start-column="0" selection-end-line="54" selection-end-column="0" />
<state relative-caret-position="545">
<caret line="108" column="30" lean-forward="false" selection-start-line="108" selection-start-column="30" selection-end-line="108" selection-end-column="30" />
<folding />
</state>
</provider>
@ -1595,14 +1516,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/components/GameServer.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="293">
<caret line="96" column="0" lean-forward="false" selection-start-line="96" selection-start-column="0" selection-end-line="96" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/FetchHighscore.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="692">
@ -1611,40 +1524,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/models/Match.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="283">
<caret line="52" column="16" lean-forward="false" selection-start-line="52" selection-start-column="16" selection-end-line="52" selection-end-column="16" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/SendMessageToAllPlayers.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="514">
<caret line="37" column="0" lean-forward="false" selection-start-line="37" selection-start-column="0" selection-end-line="37" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/MatchTimeout.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="231">
<caret line="14" column="0" lean-forward="false" selection-start-line="14" selection-start-column="0" selection-end-line="14" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/JoinTimeout.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="441">
<caret line="21" column="0" lean-forward="false" selection-start-line="21" selection-start-column="0" selection-end-line="21" selection-end-column="0" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/WaitForPlayers.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="294">
@ -1655,10 +1534,10 @@
</entry>
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/JoinMatch.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="388">
<caret line="55" column="12" lean-forward="false" selection-start-line="55" selection-start-column="12" selection-end-line="55" selection-end-column="12" />
<state relative-caret-position="504">
<caret line="24" column="15" lean-forward="false" selection-start-line="24" selection-start-column="15" selection-end-line="24" selection-end-column="15" />
<folding>
<element signature="imports" expanded="true" />
<marker date="1499443678929" expanded="true" signature="2404:2431" ph="{...}" />
</folding>
</state>
</provider>
@ -1679,40 +1558,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Client/src/com/texttwist/client/pages/GamePage.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="183">
<caret line="92" column="0" lean-forward="false" selection-start-line="92" selection-start-column="0" selection-end-line="92" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/WaitForPlayers.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="587">
<caret line="94" column="0" lean-forward="true" selection-start-line="94" selection-start-column="0" selection-end-line="94" selection-end-column="0" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/Server.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="514">
<caret line="45" column="36" lean-forward="false" selection-start-line="45" selection-start-column="36" selection-end-line="45" selection-end-column="36" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/SendInvitations.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="399">
<caret line="29" column="44" lean-forward="false" selection-start-line="29" selection-start-column="44" selection-end-line="29" selection-end-column="44" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/components/NotificationServer.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="514">
@ -1725,12 +1570,144 @@
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="210">
<caret line="20" column="0" lean-forward="true" selection-start-line="20" selection-start-column="0" selection-end-line="20" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/Server.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="357">
<caret line="29" column="57" lean-forward="false" selection-start-line="29" selection-start-column="57" selection-end-line="29" selection-end-column="57" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/WaitForPlayers.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="525">
<caret line="39" column="79" lean-forward="false" selection-start-line="39" selection-start-column="79" selection-end-line="39" selection-end-column="79" />
<folding>
<marker date="1499435378808" expanded="true" signature="1960:2124" ph="{...}" />
<element signature="imports" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Client/src/com/texttwist/client/pages/GamePage.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="378">
<caret line="25" column="0" lean-forward="false" selection-start-line="25" selection-start-column="0" selection-end-line="25" selection-end-column="0" />
<folding>
<element signature="imports" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/JoinTimeout.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="210">
<caret line="11" column="37" lean-forward="false" selection-start-line="11" selection-start-column="37" selection-end-line="11" selection-end-column="37" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Commons/src/constants/Config.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="162">
<caret line="25" column="37" lean-forward="false" selection-start-line="25" selection-start-column="37" selection-end-line="25" selection-end-column="37" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/SendMessageToAllPlayers.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="162">
<caret line="36" column="0" lean-forward="false" selection-start-line="36" selection-start-column="0" selection-end-line="36" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Client/src/com/texttwist/client/App.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="109">
<caret line="79" column="71" lean-forward="true" selection-start-line="79" selection-start-column="71" selection-end-line="79" selection-end-column="71" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/SendInvitations.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="424">
<caret line="32" column="48" lean-forward="true" selection-start-line="32" selection-start-column="48" selection-end-line="32" selection-end-column="48" />
<folding />
</state>
</provider>
</entry>
<entry file="jar://C:/Program Files/Java/jdk1.8.0_131/src.zip!/java/util/concurrent/ExecutorService.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="194">
<caret line="235" column="18" lean-forward="false" selection-start-line="235" selection-start-column="18" selection-end-line="235" selection-end-column="18" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/models/Match.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="325">
<caret line="95" column="66" lean-forward="true" selection-start-line="95" selection-start-column="66" selection-end-line="95" selection-end-column="66" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/components/ThreadProxy.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="262">
<caret line="150" column="52" lean-forward="true" selection-start-line="150" selection-start-column="52" selection-end-line="150" selection-end-column="52" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/MatchTimeout.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="294">
<caret line="17" column="13" lean-forward="true" selection-start-line="17" selection-start-column="13" selection-end-line="17" selection-end-column="13" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/components/GameServer.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="716">
<caret line="61" column="39" lean-forward="false" selection-start-line="61" selection-start-column="39" selection-end-line="61" selection-end-column="39" />
<folding>
<marker date="1499608543751" expanded="true" signature="4986:5015" ph="{...}" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Client/src/com/texttwist/client/tasks/SendWords.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="296">
<caret line="37" column="73" lean-forward="true" selection-start-line="37" selection-start-column="73" selection-end-line="37" selection-end-column="73" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/ComputeScore.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="147">
<caret line="25" column="0" lean-forward="true" selection-start-line="25" selection-start-column="0" selection-end-line="25" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Server/src/com/texttwist/server/tasks/ReceiveWords.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="474">
<caret line="60" column="47" lean-forward="true" selection-start-line="60" selection-start-column="47" selection-end-line="60" selection-end-column="47" />
<folding />
</state>
</provider>
</entry>
</component>
<component name="masterDetails">
<states>

View file

@ -12,8 +12,11 @@ import utilities.Logger;
import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
@ -67,6 +70,23 @@ public class App extends JFrame {
app = this;
HomePage home = new HomePage(this);
/* app.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
try {
authService.logout(App.session.account.userName);
System.out.println("LOGOUT BECAUSE WINDOW CLOSED");
} catch (RemoteException e1) {
e1.printStackTrace();
} catch (NotBoundException e1) {
e1.printStackTrace();
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
}
});*/
}
public static Point getWindowsPosition(){

View file

@ -29,32 +29,20 @@ public class SendWords extends SwingWorker<Void,Void> {
@Override
public Void doInBackground() {
DatagramSocket clientSocket = null;
try {
InetAddress hostIP = InetAddress.getLocalHost();
InetSocketAddress myAddress =
new InetSocketAddress(hostIP, Config.WordsReceiverServerPort);
InetSocketAddress myAddress = new InetSocketAddress(Config.WordsReceiverServerURI, Config.WordsReceiverServerPort);
DatagramChannel datagramChannel = DatagramChannel.open();
datagramChannel.bind(null);
ByteBuffer buffer = ByteBuffer.allocate(1024);
buffer.clear();
System.out.println("SENDER=" + App.session.account.userName);
Message msg = new Message("WORDS", App.session.account.userName, "", words);
String sentence = msg.toString();
buffer.put(sentence.getBytes());
buffer.flip();
datagramChannel.send(buffer, myAddress);
buffer.clear();
/*clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName(Config.WordsReceiverServerURI);
byte[] sendData = new byte[1024];
Message msg = new Message("WORDS", App.session.account.userName, "", words);
String sentence = msg.toString();
sendData = sentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, Config.WordsReceiverServerPort);
clientSocket.send(sendPacket);
clientSocket.close();*/
System.out.println("WORDS INVIATE");
System.out.println(sentence);
return null;
} catch (UnknownHostException e) {

View file

@ -23,7 +23,7 @@ public class Config {
public static String NotificationServerName ="notification";
public static int timeoutGame = 10;
public static int timeoutGame = 5;
public static String getNotificationServerURI(){

View file

@ -2,6 +2,7 @@
package com.texttwist.server.components;
import com.texttwist.server.models.Dictionary;
import com.texttwist.server.models.Match;
import com.texttwist.server.tasks.ReceiveWords;
import constants.Config;
import models.Message;
import utilities.Logger;
@ -25,12 +26,14 @@ public class GameServer implements Runnable{
private int serverPort;
private ThreadProxy proxy;
private ReceiveWords wordsReceiver;
private DatagramChannel datagramChannel;
private Selector selector = null;
private ExecutorService threadPool = Executors.newCachedThreadPool();
private String dictionaryPath = "./Server/resources/dictionary";
public static Dictionary dict;
ByteBuffer bufferWords = ByteBuffer.allocate(1024);
public static List<Match> activeMatches = Collections.synchronizedList(new ArrayList<>());
@ -50,10 +53,13 @@ public class GameServer implements Runnable{
serverSocketChannel.configureBlocking(false);
serverSocketChannel.socket().bind(new InetSocketAddress(serverPort));
serverSocketChannel.register(selector, OP_ACCEPT);
InetSocketAddress address = new InetSocketAddress(Config.WordsReceiverServerPort);
InetSocketAddress address = new InetSocketAddress(Config.WordsReceiverServerURI,Config.WordsReceiverServerPort);
datagramChannel = DatagramChannel.open();
DatagramSocket datagramSocket = datagramChannel.socket();
datagramSocket.bind(address);
datagramChannel.configureBlocking(true);
datagramChannel.connect(address);
wordsReceiver = new ReceiveWords(datagramChannel, bufferWords);
threadPool.submit(wordsReceiver);
Logger.write("GamePage Service is running at "+this.serverPort+" port...");
} catch (IOException e) {
@ -91,8 +97,7 @@ public class GameServer implements Runnable{
if (line.startsWith("MESSAGE")) {
SessionsManager.getInstance().printAll();
Message msg = Message.toMessage(line);
ByteBuffer bufferWords = ByteBuffer.allocate(1024);
proxy = new ThreadProxy(msg, client, datagramChannel, bufferWords);
proxy = new ThreadProxy(msg, client, bufferMessages);
threadPool.submit(proxy);
}

View file

@ -1,5 +1,6 @@
package com.texttwist.server.components;
import com.sun.org.apache.xpath.internal.operations.Bool;
import com.texttwist.server.models.Match;
import com.texttwist.server.tasks.*;
import constants.Config;
@ -26,16 +27,15 @@ public class ThreadProxy implements Callable<Boolean> {
protected final ExecutorService threadPool = Executors.newCachedThreadPool();
private final Message request;
private final SocketChannel socketChannel;
private final DatagramChannel datagramChannel;
private ByteBuffer buffer;
private ByteBuffer bufferMessage;
boolean matchNotAvailable =false;
ThreadProxy(Message request, SocketChannel socketChannel, DatagramChannel datagramChannel, ByteBuffer buffer){
ThreadProxy(Message request, SocketChannel socketChannel, ByteBuffer bufferMessage) {
this.request = request;
this.socketChannel = socketChannel;
this.datagramChannel = datagramChannel;
this.buffer = buffer;
this.bufferMessage = bufferMessage;
}
@ -45,7 +45,7 @@ public class ThreadProxy implements Callable<Boolean> {
@Override
public Boolean call() {
ByteBuffer buffer = ByteBuffer.allocate(1024);
bufferMessage = ByteBuffer.allocate(1024);
byte[] byteMessage = null;
if(isValidToken(request.token)){
switch(request.message){
@ -76,13 +76,14 @@ public class ThreadProxy implements Callable<Boolean> {
//NON FARE NULLA, ASPETTA GLI ALTRI
Message message = new Message("INVITES_ALL_SENDED", "", "", new DefaultListModel<String>());
byteMessage = message.toString().getBytes();
buffer = ByteBuffer.wrap(byteMessage);
socketChannel.write(buffer);
bufferMessage = ByteBuffer.wrap(byteMessage);
socketChannel.write(bufferMessage);
Future<Boolean> joinTimeout = threadPool.submit(new JoinTimeout(match));
Boolean joinTimeoutRes = joinTimeout.get();
if(!joinTimeoutRes){
match.timeout = joinTimeout;
joinTimeout.get();
if(match.joinTimeout){
Future<Boolean> sendMessageJoinTimeout = threadPool.submit(
new SendMessageToAllPlayers(match, new Message("JOIN_TIMEOUT", "", "", new DefaultListModel<>()), socketChannel));
Boolean sendMessageJoinTimeoutRes = sendMessageJoinTimeout.get();
@ -90,6 +91,8 @@ public class ThreadProxy implements Callable<Boolean> {
activeMatches.remove(Match.findMatchIndex(activeMatches,match.matchCreator));
return sendMessageJoinTimeoutRes;
}
} else {
System.out.println("TIMEOUT FINITO SENZA EFFETTI");
}
}
@ -105,9 +108,9 @@ public class ThreadProxy implements Callable<Boolean> {
Message message = new Message("USER_NOT_ONLINE", "", "", new DefaultListModel<String>());
byteMessage = new String(message.toString()).getBytes();
buffer.clear();
buffer = ByteBuffer.wrap(byteMessage);
this.socketChannel.write(buffer);
bufferMessage.clear();
bufferMessage = ByteBuffer.wrap(byteMessage);
this.socketChannel.write(bufferMessage);
break;
}
} catch (InterruptedException e) {
@ -125,9 +128,9 @@ public class ThreadProxy implements Callable<Boolean> {
Message message = new Message("HIGHSCORES", "", "", computeHighscoresRes);
byteMessage = message.toString().getBytes();
buffer = ByteBuffer.wrap(byteMessage);
bufferMessage = ByteBuffer.wrap(byteMessage);
try {
socketChannel.write(buffer);
socketChannel.write(bufferMessage);
} catch (IOException e) {
e.printStackTrace();
}
@ -145,7 +148,7 @@ public class ThreadProxy implements Callable<Boolean> {
Boolean joinMatchRes = joinMatch.get();
if(joinMatchRes){
if(match.joinTimeout == false) {
if(!match.joinTimeout) {
Future<DefaultListModel<String>> generateLetters = threadPool.submit(new GenerateLetters());
match.setLetters(generateLetters.get());
match.letters.addElement(String.valueOf(match.multicastId));
@ -153,47 +156,24 @@ public class ThreadProxy implements Callable<Boolean> {
for (int i = 0; i < match.playersSocket.size(); i++) {
SocketChannel socketClient = match.playersSocket.get(i).getValue();
if (socketClient != null) {
buffer.clear();
bufferMessage.clear();
Message message = new Message("GAME_STARTED", "", "", match.letters);
match.startGame();
match.timeout.cancel(true);
System.out.println("TIMEOUT CANCELLEd");
byteMessage = message.toString().getBytes();
buffer = ByteBuffer.wrap(byteMessage);
bufferMessage = ByteBuffer.wrap(byteMessage);
try {
socketClient.write(buffer);
socketClient.write(bufferMessage);
} catch (IOException e) {
}
//clientSocket.close();
}
}
if (!matchNotAvailable) {
//Start receive words: tempo masimo 5 minuti per completare l'invio delle lettere.
Future<Boolean> receiveWords = threadPool.submit(new ReceiveWords(match, datagramChannel, buffer));
Boolean receiveWordsRes = receiveWords.get();
if (receiveWordsRes) {
System.out.println("ZERO PUNTI a chi non ha ancora inviato le lettere, TIMER SCADUTO");
} else {
System.out.println("TUTTI I GIOCATORI HANNO CONSEGNATO IN TEMPO");
}
match.setUndefinedScorePlayersToZero();
while (true) {
Message msg = new Message("FINALSCORE", "SERVER", "", match.getMatchPlayersScoreAsStringList());
MulticastSocket multicastSocket = new MulticastSocket(match.multicastId);
InetAddress ia = InetAddress.getByName(Config.ScoreMulticastServerURI);
DatagramPacket hi = new DatagramPacket(msg.toString().getBytes(), msg.toString().length(), ia, match.multicastId);
multicastSocket.send(hi);
activeMatches.remove(Match.findMatchIndex(activeMatches, match.matchCreator));
//multicastSocket.disconnect();
//multicastSocket.close();
}
} else {
if (matchNotAvailable) {
return false;
}
}
@ -202,13 +182,13 @@ public class ThreadProxy implements Callable<Boolean> {
//ULTIMO A JOINARE! INIZIA GIOCO
} else {
if(match == null){
buffer = ByteBuffer.allocate(1024);
bufferMessage = ByteBuffer.allocate(1024);
if (socketChannel != null) {
Message msg = new Message("MATCH_NOT_AVAILABLE", "", null, new DefaultListModel<>());
buffer.clear();
bufferMessage.clear();
byteMessage = msg.toString().getBytes();
buffer = ByteBuffer.wrap(byteMessage);
socketChannel.write(buffer);
bufferMessage = ByteBuffer.wrap(byteMessage);
socketChannel.write(bufferMessage);
matchNotAvailable = true;
}
//Match non disponibile

View file

@ -1,6 +1,7 @@
package com.texttwist.server.models;
import com.texttwist.server.components.GameServer;
import com.texttwist.server.tasks.MatchTimeout;
import constants.Config;
import javafx.util.Pair;
@ -9,6 +10,10 @@ import java.net.DatagramSocket;
import java.net.Socket;
import java.nio.channels.SocketChannel;
import java.util.*;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import static com.texttwist.server.components.GameServer.activeMatches;
@ -21,8 +26,12 @@ public class Match {
private boolean started = false;
public final String matchCreator;
public Integer multicastId;
public Future<Boolean> timeout;
public Future<Boolean> matchTimeout;
public boolean joinTimeout =true;
public DefaultListModel<String> letters;
protected ExecutorService threadPool = Executors.newSingleThreadExecutor();
public final List<Pair<String,Integer>> playersScore = Collections.synchronizedList(new ArrayList<>());
public Match(String matchCreator, DefaultListModel<String> players){
@ -38,16 +47,17 @@ public class Match {
}
public static Match findMatch(List<Match> matches, String matchName){
for (int i = 0; i < matches.size(); i++) {
if (matches.get(i).matchCreator.equals(matchName)) {
return matches.get(i);
synchronized (matches) {
for (int i = 0; i < matches.size(); i++) {
if (matches.get(i).matchCreator.equals(matchName)) {
return matches.get(i);
}
}
return null;
}
return null;
}
public void printAll(){
for (int i = 0; i < playersScore.size(); i++) {
System.out.println(playersScore.get(i).getKey() + " : " +playersScore.get(i).getValue());
@ -67,9 +77,9 @@ public class Match {
return started;
}
public Match findMatchByPlayer(String player){
public static Match findMatchByPlayer(String player){
for (int i = 0; i < activeMatches.size(); i++) {
for (int j = 0; j < playersStatus.size(); j++) {
for (int j = 0; j < activeMatches.get(i).playersStatus.size(); j++) {
if (activeMatches.get(i).playersStatus.get(j).getKey().equals(player)) {
return activeMatches.get(i);
}
@ -83,20 +93,25 @@ public class Match {
public void startGame(){
this.started=true;
this.matchTimeout = threadPool.submit(new MatchTimeout());
}
public void setScore(String player, Integer score){
final Match m = findMatchByPlayer(player);
m.printAll();
Match m = findMatchByPlayer(player);
synchronized (m) {
m.printAll();
for (int i = 0; i < m.playersScore.size(); i++) {
if (m.playersScore.get(i).getKey().equals(player)) {
m.playersScore.set(i, new Pair<String, Integer>(player, score));
}
}
}
}
public Boolean allPlayersSendedHisScore(){
System.out.println(matchCreator);
printAll();
for (int i = 0; i < playersScore.size(); i++) {
if (playersScore.get(i).getValue() == -1) {

View file

@ -3,11 +3,18 @@ import com.texttwist.client.App;
import com.texttwist.server.components.AccountsManager;
import com.texttwist.server.models.Dictionary;
import com.texttwist.server.models.Match;
import constants.Config;
import models.Message;
import models.User;
import javax.swing.*;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.util.concurrent.Callable;
import static com.texttwist.server.components.GameServer.activeMatches;
/**
* Created by loke on 27/06/2017.
*/
@ -15,26 +22,62 @@ public class ComputeScore implements Callable<Integer> {
public DefaultListModel<String> words;
public final String sender;
public final Match match;
public Match match;
public ComputeScore(String sender, Match match, DefaultListModel<String> words){
public ComputeScore(String sender, DefaultListModel<String> words, Match match){
this.words = words;
this.sender = sender;
this.match = match;
this.sender = sender;
}
@Override
public Integer call() throws Exception {
System.out.println("COMPUTE SCORE STARTED");
System.out.println(match);
System.out.println("COMPUTE SCORE STAsssssRTED");
synchronized (match) {
System.out.print("CALCOLO LO SCORE PER " + match.matchCreator);
Integer score = 0;
for (int i = 0; i < words.size(); i++) {
if (isValid(words.get(i), match.letters)) {
score += words.get(i).length();
}
}
System.out.println("SOODDISDIS");
match.setScore(sender, score);
User u = AccountsManager.getInstance().findUser(sender);
u.addScore(score);
if(match.allPlayersSendedHisScore()) {
match.matchTimeout.cancel(true);
//channel.close();
//Start receive words: tempo masimo 5 minuti per completare l'invio delle lettere.
match.setUndefinedScorePlayersToZero();
System.out.println("SEND BROADCAST");
while (true) {
System.out.println("SENDING");
Message msg = new Message("FINALSCORE", "SERVER", "", match.getMatchPlayersScoreAsStringList());
MulticastSocket multicastSocket = new MulticastSocket(match.multicastId);
InetAddress ia = InetAddress.getByName(Config.ScoreMulticastServerURI);
DatagramPacket hi = new DatagramPacket(msg.toString().getBytes(), msg.toString().length(), ia, match.multicastId);
multicastSocket.send(hi);
activeMatches.remove(Match.findMatchIndex(activeMatches, match.matchCreator));
//multicastSocket.disconnect();
//multicastSocket.close();
}
}
return score;
}
}
private Boolean isValid(String word, DefaultListModel<String> letters) {

View file

@ -17,7 +17,8 @@ public class JoinTimeout implements Callable<Boolean> {
@Override
public Boolean call() throws Exception {
try {
Thread.currentThread().sleep(1*5*1000);
Thread.currentThread().sleep(1*20*1000);
System.out.println("TIMEOUTTTT");
if(match.joinTimeout) {
return false;

View file

@ -8,17 +8,20 @@ import models.Message;
import javax.swing.*;
import javax.xml.crypto.Data;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.*;
import java.nio.ByteBuffer;
import java.nio.channels.DatagramChannel;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.SocketChannel;
import java.util.Arrays;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import static com.texttwist.server.components.GameServer.activeMatches;
/**
* Created by loke on 27/06/2017.
*/
@ -26,53 +29,42 @@ public class ReceiveWords implements Callable<Boolean>{
protected ExecutorService threadPool = Executors.newCachedThreadPool();
public DatagramChannel DatagramChannel;
public final Match match;
byte[] receiveData = new byte[1024];
public DatagramChannel channel;
ByteBuffer buffer;
public ReceiveWords(Match match, DatagramChannel DatagramChannel, ByteBuffer buffer) {
this.match = match;
public ReceiveWords(DatagramChannel channel, ByteBuffer buffer) {
this.buffer = buffer;
this.DatagramChannel = DatagramChannel;
this.channel = channel;
}
@Override
public Boolean call() throws Exception {
Future<Boolean> matchTimeout = threadPool.submit(new MatchTimeout());
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
Message msg;
DatagramSocket s = new DatagramSocket(Config.WordsReceiverServerPort);
while(true) {
DatagramChannel.receive(buffer);
buffer.flip();
int limits = buffer.limit();
byte bytes[] = new byte[limits];
buffer.get(bytes, 0, limits);
String rcv = new String(bytes);
byte[] buf = new byte[1024];
System.out.println("RECEIVIN WORDS");
buffer.rewind();
msg = Message.toMessage(rcv);
if(msg.message.equals("WORDS")){
break;
DatagramPacket packet = new DatagramPacket(buf, buf.length);
s.receive(packet);
System.out.println("WORDS RECEIVED");
String rcv = new String(packet.getData());
System.out.println(rcv);
if (rcv.startsWith("MESSAGE")) {
msg = Message.toMessage(rcv);
System.out.println(msg.sender);
Match match = Match.findMatchByPlayer(msg.sender);
threadPool.submit(new ComputeScore(msg.sender, msg.data, match));
}
}
Future<Integer> computeScore = threadPool.submit(new ComputeScore(msg.sender, match, msg.data));
//Se tutti hanno inviato le parole, blocca il timer e restituisci true
computeScore.get();
if(match.allPlayersSendedHisScore()){
match.setUndefinedScorePlayersToZero();
matchTimeout.cancel(true);
DatagramChannel.close();
return true;
}
return false;
}

File diff suppressed because it is too large Load diff

1159
server.log

File diff suppressed because it is too large Load diff