Browse Source

Release 28

master
Defend 7 years ago
parent
commit
2141837ed1
  1. 1050
      .idea/workspace (1).xml
  2. 730
      .idea/workspace.xml
  3. 17
      src/Protocol.java
  4. 151
      src/SocketMaps.java
  5. 284
      src/client.java
  6. 111
      src/console.java
  7. 8
      src/ctException.java
  8. 18
      src/ctServer.java
  9. 187
      src/eventHandler.java
  10. 188
      src/socketInfo.java

1050
.idea/workspace (1).xml

File diff suppressed because it is too large

730
.idea/workspace.xml

@ -1,5 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="BookmarkManager">
<bookmark url="uml://JAVA/" />
</component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="ef1cf760-9407-4380-a84e-9b438e35c16c" name="Default" comment="" /> <list default="true" id="ef1cf760-9407-4380-a84e-9b438e35c16c" name="Default" comment="" />
<ignored path="ctServer.iws" /> <ignored path="ctServer.iws" />
@ -14,6 +17,7 @@
<option name="LAST_RESOLUTION" value="IGNORE" /> <option name="LAST_RESOLUTION" value="IGNORE" />
</component> </component>
<component name="CoverageDataManager"> <component name="CoverageDataManager">
<SUITE FILE_PATH="coverage/ctServer$Debug.coverage" NAME="Debug Coverage Results" MODIFIED="1473774241735" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="idea" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" />
<SUITE FILE_PATH="coverage/ctServer$Unnamed.coverage" NAME="Unnamed Coverage Results" MODIFIED="1470865818918" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="idea" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" /> <SUITE FILE_PATH="coverage/ctServer$Unnamed.coverage" NAME="Unnamed Coverage Results" MODIFIED="1470865818918" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="idea" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" />
</component> </component>
<component name="CreatePatchCommitExecutor"> <component name="CreatePatchCommitExecutor">
@ -24,85 +28,72 @@
<favorites_list name="ctServer" /> <favorites_list name="ctServer" />
</component> </component>
<component name="FileEditorManager"> <component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300"> <splitter split-orientation="horizontal" split-proportion="0.5">
<file leaf-file-name="ctServer.java" pinned="false" current-in-tab="false"> <split-first>
<entry file="file://$PROJECT_DIR$/src/ctServer.java"> <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<provider selected="true" editor-type-id="text-editor"> <file leaf-file-name="CtServer.java" pinned="false" current-in-tab="false">
<state relative-caret-position="102"> <entry file="file://$PROJECT_DIR$/src/CtServer.java">
<caret line="6" column="26" selection-start-line="6" selection-start-column="26" selection-end-line="6" selection-end-column="26" /> <provider selected="true" editor-type-id="text-editor">
<folding> <state relative-caret-position="238">
<element signature="imports" expanded="true" /> <caret line="15" column="58" selection-start-line="15" selection-start-column="58" selection-end-line="15" selection-end-column="58" />
</folding> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="console.java" pinned="false" current-in-tab="true"> <file leaf-file-name="Console.java" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/console.java"> <entry file="file://$PROJECT_DIR$/src/Console.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="17"> <state relative-caret-position="688">
<caret line="3" column="23" selection-start-line="3" selection-start-column="23" selection-end-line="3" selection-end-column="23" /> <caret line="76" column="19" selection-start-line="76" selection-start-column="19" selection-end-line="76" selection-end-column="19" />
<folding> <folding />
<element signature="method#consoleListner#0;class#console#0" expanded="false" /> </state>
<element signature="method#out#0;class#console#0" expanded="false" /> </provider>
<element signature="method#socket#0;class#console#0" expanded="false" /> </entry>
<element signature="method#debug#0;class#console#0" expanded="false" /> </file>
<element signature="method#cList#0;class#console#0" expanded="false" /> <file leaf-file-name="Client.java" pinned="false" current-in-tab="false">
<element signature="method#cKick#0;class#console#0" expanded="false" /> <entry file="file://$PROJECT_DIR$/src/Client.java">
<element signature="method#cSend#0;class#console#0" expanded="false" /> <provider selected="true" editor-type-id="text-editor">
<element signature="method#cHelp#0;class#console#0" expanded="false" /> <state relative-caret-position="1955">
<element signature="method#cInfo#0;class#console#0" expanded="false" /> <caret line="128" column="5" selection-start-line="128" selection-start-column="5" selection-end-line="128" selection-end-column="5" />
<element signature="method#cRestart#0;class#console#0" expanded="false" /> <folding />
</folding> </state>
</state> </provider>
</provider> </entry>
</entry> </file>
</file> <file leaf-file-name="EventHandler.java" pinned="false" current-in-tab="false">
<file leaf-file-name="socketInfo.java" pinned="false" current-in-tab="false"> <entry file="file://$PROJECT_DIR$/src/EventHandler.java">
<entry file="file://$PROJECT_DIR$/src/socketInfo.java"> <provider selected="true" editor-type-id="text-editor">
<provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="289">
<state relative-caret-position="530"> <caret line="21" column="39" selection-start-line="21" selection-start-column="39" selection-end-line="21" selection-end-column="39" />
<caret line="182" column="24" selection-start-line="182" selection-start-column="24" selection-end-line="182" selection-end-column="24" /> <folding />
<folding> </state>
<element signature="imports" expanded="true" /> </provider>
</folding> </entry>
</state> </file>
</provider> </leaf>
</entry> </split-first>
</file> <split-second>
<file leaf-file-name="client.java" pinned="false" current-in-tab="false"> <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<entry file="file://$PROJECT_DIR$/src/client.java"> <file leaf-file-name="CtServer.java" pinned="false" current-in-tab="true">
<provider selected="true" editor-type-id="text-editor"> <entry file="file://$PROJECT_DIR$/src/CtServer.java">
<state relative-caret-position="340"> <provider selected="true" editor-type-id="text-editor">
<caret line="279" column="69" selection-start-line="279" selection-start-column="69" selection-end-line="279" selection-end-column="69" /> <state relative-caret-position="238">
<folding> <caret line="15" column="58" selection-start-line="15" selection-start-column="58" selection-end-line="15" selection-end-column="58" />
<element signature="imports" expanded="true" /> <folding />
<element signature="method#bytesToStringUTFCustom#0;class#client#0" expanded="false" /> </state>
<element signature="method#handshake#0;class#client#0" expanded="false" /> </provider>
</folding> </entry>
</state> </file>
</provider> </leaf>
</entry> </split-second>
</file> </splitter>
<file leaf-file-name="eventHandler.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/eventHandler.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="530">
<caret line="152" column="36" selection-start-line="152" selection-start-column="36" selection-end-line="152" selection-end-column="36" />
<folding>
<element signature="imports" expanded="true" />
<element signature="method#close#0;class#eventHandler#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
</file>
</leaf>
</component> </component>
<component name="FileTemplateManagerImpl"> <component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES"> <option name="RECENT_TEMPLATES">
<list> <list>
<option value="package-info" /> <option value="package-info" />
<option value="Enum" />
<option value="Class" /> <option value="Class" />
</list> </list>
</option> </option>
@ -117,11 +108,26 @@
<list> <list>
<option value="$PROJECT_DIR$/src/main.java" /> <option value="$PROJECT_DIR$/src/main.java" />
<option value="$PROJECT_DIR$/lib/javax.json.jar!/javax/json/stream/JsonParser.class" /> <option value="$PROJECT_DIR$/lib/javax.json.jar!/javax/json/stream/JsonParser.class" />
<option value="$PROJECT_DIR$/src/eventNames.java" />
<option value="$PROJECT_DIR$/src/regControl.java" />
<option value="$PROJECT_DIR$/src/socketEye.java" />
<option value="$PROJECT_DIR$/src/sEye.java" />
<option value="$PROJECT_DIR$/src/protocol.java" />
<option value="$PROJECT_DIR$/src/ctServer.java" />
<option value="$PROJECT_DIR$/src/console.java" />
<option value="$PROJECT_DIR$/src/socketInfo.java" /> <option value="$PROJECT_DIR$/src/socketInfo.java" />
<option value="$PROJECT_DIR$/src/client.java" /> <option value="$PROJECT_DIR$/src/client.java" />
<option value="$PROJECT_DIR$/src/Protocol.java" />
<option value="$PROJECT_DIR$/src/eventHandler.java" /> <option value="$PROJECT_DIR$/src/eventHandler.java" />
<option value="$PROJECT_DIR$/src/ctServer.java" /> <option value="$PROJECT_DIR$/src/clientException.java" />
<option value="$PROJECT_DIR$/src/console.java" /> <option value="$PROJECT_DIR$/src/Events.java" />
<option value="$PROJECT_DIR$/src/ctException.java" />
<option value="$PROJECT_DIR$/src/Console.java" />
<option value="$PROJECT_DIR$/src/EventHandler.java" />
<option value="$PROJECT_DIR$/src/Client.java" />
<option value="$PROJECT_DIR$/src/SocketMaps.java" />
<option value="$PROJECT_DIR$/src/SocketInfo.java" />
<option value="$PROJECT_DIR$/src/CtServer.java" />
</list> </list>
</option> </option>
</component> </component>
@ -134,8 +140,8 @@
<component name="ProjectFrameBounds"> <component name="ProjectFrameBounds">
<option name="x" value="-8" /> <option name="x" value="-8" />
<option name="y" value="-8" /> <option name="y" value="-8" />
<option name="width" value="1936" /> <option name="width" value="1456" />
<option name="height" value="1066" /> <option name="height" value="886" />
</component> </component>
<component name="ProjectLevelVcsManager" settingsEditedManually="false"> <component name="ProjectLevelVcsManager" settingsEditedManually="false">
<OptionsSetting value="true" id="Add" /> <OptionsSetting value="true" id="Add" />
@ -162,7 +168,6 @@
<foldersAlwaysOnTop value="true" /> <foldersAlwaysOnTop value="true" />
</navigator> </navigator>
<panes> <panes>
<pane id="PackagesPane" />
<pane id="Scratches" /> <pane id="Scratches" />
<pane id="Scope" /> <pane id="Scope" />
<pane id="ProjectPane"> <pane id="ProjectPane">
@ -197,40 +202,9 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
</PATH> </PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="ctServer" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ctServer" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="lib" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="javax.json.jar" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiFileNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="ctServer" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ctServer" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="lib" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
</subPane> </subPane>
</pane> </pane>
<pane id="PackagesPane" />
</panes> </panes>
</component> </component>
<component name="PropertiesComponent"> <component name="PropertiesComponent">
@ -243,9 +217,13 @@
<property name="GenerateAntBuildDialog.backupFiles" value="true" /> <property name="GenerateAntBuildDialog.backupFiles" value="true" />
<property name="GenerateAntBuildDialog.outputFileNameProperty" value="ctserver" /> <property name="GenerateAntBuildDialog.outputFileNameProperty" value="ctserver" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" /> <property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="extract.method.default.visibility" value="private" />
<property name="restartRequiresConfirmation" value="false" /> <property name="restartRequiresConfirmation" value="false" />
</component> </component>
<component name="RecentsManager">
<key name="ExtractSuperBase.RECENT_KEYS">
<recent name="" />
</key>
</component>
<component name="RunManager" selected="Application.Debug"> <component name="RunManager" selected="Application.Debug">
<configuration default="true" type="#com.intellij.j2meplugin.run.J2MEConfigurationType" factoryName="J2ME"> <configuration default="true" type="#com.intellij.j2meplugin.run.J2MEConfigurationType" factoryName="J2ME">
<module name="" /> <module name="" />
@ -690,7 +668,7 @@
</configuration> </configuration>
<configuration default="false" name="Debug" type="Application" factoryName="Application" singleton="true"> <configuration default="false" name="Debug" type="Application" factoryName="Application" singleton="true">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" /> <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
<option name="MAIN_CLASS_NAME" value="ctServer" /> <option name="MAIN_CLASS_NAME" value="CtServer" />
<option name="VM_PARAMETERS" value="" /> <option name="VM_PARAMETERS" value="" />
<option name="PROGRAM_PARAMETERS" value="" /> <option name="PROGRAM_PARAMETERS" value="" />
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" /> <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
@ -728,12 +706,22 @@
<workItem from="1471206887598" duration="5117000" /> <workItem from="1471206887598" duration="5117000" />
<workItem from="1471213151749" duration="371000" /> <workItem from="1471213151749" duration="371000" />
<workItem from="1471272205780" duration="2459000" /> <workItem from="1471272205780" duration="2459000" />
<workItem from="1471346121020" duration="38313000" /> <workItem from="1471346121020" duration="1145000" />
<workItem from="1473182381347" duration="4229000" />
<workItem from="1473440904946" duration="7868000" />
<workItem from="1473452237192" duration="2428000" />
<workItem from="1473537243622" duration="15311000" />
<workItem from="1473581346038" duration="40972000" />
<workItem from="1474184585685" duration="597000" />
<workItem from="1474185668428" duration="755000" />
<workItem from="1474466481625" duration="2072000" />
<workItem from="1478531241458" duration="1197000" />
<workItem from="1478536975212" duration="14000" />
</task> </task>
<servers /> <servers />
</component> </component>
<component name="TimeTrackingManager"> <component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="133385000" /> <option name="totallyTimeSpent" value="173143000" />
</component> </component>
<component name="TodoView"> <component name="TodoView">
<todo-panel id="selected-file"> <todo-panel id="selected-file">
@ -745,36 +733,64 @@
</todo-panel> </todo-panel>
</component> </component>
<component name="ToolWindowManager"> <component name="ToolWindowManager">
<frame x="-8" y="-8" width="1936" height="1066" extended-state="6" /> <frame x="-8" y="-8" width="1456" height="886" extended-state="6" />
<editor active="false" /> <editor active="false" />
<layout> <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="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.3290461" sideWeight="0.5" order="6" 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.32827735" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Messages" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.32690248" sideWeight="0.4792111" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Palette&#9;" 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="Palette&#9;" 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="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="3" 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="3" 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.3869239" sideWeight="0.5042644" order="8" side_tool="true" 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.32756758" sideWeight="0.50426894" 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="3" side_tool="false" 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="3" 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="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="7" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.17363344" sideWeight="0.45550162" order="5" side_tool="false" content_ui="tabs" /> <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.38325992" sideWeight="0.45550162" order="2" side_tool="false" 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.3279743" sideWeight="0.49573562" order="10" side_tool="false" content_ui="tabs" /> <window_info id="Terminal" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.26958832" sideWeight="0.49573106" order="7" 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="2" 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="2" side_tool="false" content_ui="tabs" />
<window_info id="Designer" 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="Designer" 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="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.08315565" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" /> <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.103151865" 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="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="3" 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="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="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="2" 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="2" 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.39935064" sideWeight="0.47708333" order="2" 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="2" side_tool="true" 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="2" side_tool="true" 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="3" 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.39838493" sideWeight="0.47708333" 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="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="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="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="4" 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.4064603" sideWeight="0.4792111" order="7" 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.32942432" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" /> <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="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3290461" sideWeight="0.5" order="1" 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.32904884" sideWeight="0.5" order="3" side_tool="true" 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.3270525" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
</layout> </layout>
<layout-to-restore>
<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="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="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32756758" sideWeight="0.50426894" 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="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="2" side_tool="false" content_ui="tabs" />
<window_info id="Designer" 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="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="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="6" 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="3" 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.39935064" sideWeight="0.47708333" 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.3290461" 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.32792208" sideWeight="0.4792111" order="8" side_tool="false" content_ui="tabs" />
<window_info id="Palette&#9;" 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="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="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="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.38528138" sideWeight="0.45550162" order="2" 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="9" 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.32942432" sideWeight="0.5" order="8" 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.32756758" sideWeight="0.49573106" order="10" 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.090618335" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32864866" sideWeight="0.5" order="1" 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="5" side_tool="true" content_ui="tabs" />
</layout-to-restore>
</component> </component>
<component name="Vcs.Log.UiProperties"> <component name="Vcs.Log.UiProperties">
<option name="RECENTLY_FILTERED_USER_GROUPS"> <option name="RECENTLY_FILTERED_USER_GROUPS">
@ -789,181 +805,52 @@
</component> </component>
<component name="XDebuggerManager"> <component name="XDebuggerManager">
<breakpoint-manager> <breakpoint-manager>
<breakpoints> <option name="time" value="72" />
<line-breakpoint enabled="true" type="java-line">
<url>file://$PROJECT_DIR$/src/console.java</url>
<line>17</line>
<properties />
<option name="timeStamp" value="40" />
</line-breakpoint>
</breakpoints>
<option name="time" value="50" />
</breakpoint-manager> </breakpoint-manager>
<watches-manager /> <watches-manager>
<configuration name="Application">
<watch expression="SocketMaps.getInfo(socketid).PROTOCOL" language="JAVA" />
<watch expression="SocketMaps.getCreator(120616799)" language="JAVA" />
<watch expression="SocketMaps.creator.size()" language="JAVA" />
<watch expression="SocketMaps.creator.keySet()" language="JAVA" />
<watch expression="SocketMaps.getPID(0)" language="JAVA" />
</configuration>
</watches-manager>
</component> </component>
<component name="antWorkspaceConfiguration"> <component name="antWorkspaceConfiguration">
<option name="IS_AUTOSCROLL_TO_SOURCE" value="false" /> <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
<option name="FILTER_TARGETS" value="false" /> <option name="FILTER_TARGETS" value="false" />
</component> </component>
<component name="editorHistoryManager"> <component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/src/ctServer.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="119">
<caret line="7" column="51" selection-start-line="7" selection-start-column="51" selection-end-line="7" selection-end-column="51" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/console.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="340">
<caret line="20" column="5" selection-start-line="20" selection-start-column="5" selection-end-line="20" selection-end-column="5" />
<folding>
<element signature="method#consoleListner#0;class#console#0" expanded="false" />
<element signature="method#out#0;class#console#0" expanded="false" />
<element signature="method#socket#0;class#console#0" expanded="false" />
<element signature="method#debug#0;class#console#0" expanded="false" />
<element signature="method#cList#0;class#console#0" expanded="false" />
<element signature="method#cKick#0;class#console#0" expanded="false" />
<element signature="method#cSend#0;class#console#0" expanded="false" />
<element signature="method#cHelp#0;class#console#0" expanded="false" />
<element signature="method#cInfo#0;class#console#0" expanded="false" />
<element signature="method#cRestart#0;class#console#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/socketInfo.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/client.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2720">
<caret line="160" column="15" selection-start-line="160" selection-start-column="15" selection-end-line="160" selection-end-column="15" />
<folding>
<element signature="imports" expanded="true" />
<element signature="method#bytesToStringUTFCustom#0;class#client#0" expanded="false" />
<element signature="method#handshake#0;class#client#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/ctServer.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="527">
<caret line="32" column="1" selection-start-line="32" selection-start-column="1" selection-end-line="32" selection-end-column="1" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/console.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1037">
<caret line="67" column="90" selection-start-line="67" selection-start-column="90" selection-end-line="67" selection-end-column="90" />
<folding>
<element signature="method#consoleListner#0;class#console#0" expanded="false" />
<element signature="method#out#0;class#console#0" expanded="false" />
<element signature="method#socket#0;class#console#0" expanded="false" />
<element signature="method#debug#0;class#console#0" expanded="false" />
<element signature="method#cList#0;class#console#0" expanded="false" />
<element signature="method#cKick#0;class#console#0" expanded="false" />
<element signature="method#cSend#0;class#console#0" expanded="false" />
<element signature="method#cHelp#0;class#console#0" expanded="false" />
<element signature="method#cInfo#0;class#console#0" expanded="false" />
<element signature="method#cRestart#0;class#console#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/socketInfo.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1496">
<caret line="89" column="37" selection-start-line="89" selection-start-column="37" selection-end-line="89" selection-end-column="37" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/client.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding>
<element signature="imports" expanded="true" />
<element signature="method#bytesToStringUTFCustom#0;class#client#0" expanded="false" />
<element signature="method#handshake#0;class#client#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/lib/javax.json.jar!/javax/json/stream/JsonParser.class"> <entry file="jar://$PROJECT_DIR$/lib/javax.json.jar!/javax/json/stream/JsonParser.class">
<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="425">
<caret line="30" column="16" selection-start-line="30" selection-start-column="16" selection-end-line="30" selection-end-column="16" /> <caret line="30" column="16" selection-start-line="30" selection-start-column="16" selection-end-line="30" selection-end-column="16" />
<folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/ctServer.java"> <entry file="file://$PROJECT_DIR$/src/CtServer.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="527"> <state relative-caret-position="527">
<caret line="32" column="1" selection-start-line="32" selection-start-column="1" selection-end-line="32" selection-end-column="1" /> <caret line="32" column="1" selection-start-line="32" selection-start-column="1" selection-end-line="32" selection-end-column="1" />
<folding> <folding />
<element signature="imports" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/console.java"> <entry file="file://$PROJECT_DIR$/src/Console.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1037"> <state relative-caret-position="1037">
<caret line="67" column="90" selection-start-line="67" selection-start-column="90" selection-end-line="67" selection-end-column="90" /> <caret line="67" column="90" selection-start-line="67" selection-start-column="90" selection-end-line="67" selection-end-column="90" />
<folding> <folding />
<element signature="method#consoleListner#0;class#console#0" expanded="false" />
<element signature="method#out#0;class#console#0" expanded="false" />
<element signature="method#socket#0;class#console#0" expanded="false" />
<element signature="method#debug#0;class#console#0" expanded="false" />
<element signature="method#cList#0;class#console#0" expanded="false" />
<element signature="method#cKick#0;class#console#0" expanded="false" />
<element signature="method#cSend#0;class#console#0" expanded="false" />
<element signature="method#cHelp#0;class#console#0" expanded="false" />
<element signature="method#cInfo#0;class#console#0" expanded="false" />
<element signature="method#cRestart#0;class#console#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/socketInfo.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1496">
<caret line="89" column="37" selection-start-line="89" selection-start-column="37" selection-end-line="89" selection-end-column="37" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/client.java"> <entry file="file://$PROJECT_DIR$/src/SocketInfo.java" />
<entry file="file://$PROJECT_DIR$/src/Client.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0"> <state relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding> <folding />
<element signature="imports" expanded="true" />
<element signature="method#bytesToStringUTFCustom#0;class#client#0" expanded="false" />
<element signature="method#handshake#0;class#client#0" expanded="false" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
@ -971,214 +858,128 @@
<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="425">
<caret line="30" column="16" selection-start-line="30" selection-start-column="16" selection-end-line="30" selection-end-column="16" /> <caret line="30" column="16" selection-start-line="30" selection-start-column="16" selection-end-line="30" selection-end-column="16" />
<folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/ctServer.java"> <entry file="file://$PROJECT_DIR$/src/CtServer.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="527"> <state relative-caret-position="527">
<caret line="32" column="1" selection-start-line="32" selection-start-column="1" selection-end-line="32" selection-end-column="1" /> <caret line="32" column="1" selection-start-line="32" selection-start-column="1" selection-end-line="32" selection-end-column="1" />
<folding> <folding />
<element signature="imports" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/console.java"> <entry file="file://$PROJECT_DIR$/src/Console.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0"> <state relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding> <folding />
<element signature="method#consoleListner#0;class#console#0" expanded="false" />
<element signature="method#out#0;class#console#0" expanded="false" />
<element signature="method#socket#0;class#console#0" expanded="false" />
<element signature="method#debug#0;class#console#0" expanded="false" />
<element signature="method#cList#0;class#console#0" expanded="false" />
<element signature="method#cKick#0;class#console#0" expanded="false" />
<element signature="method#cSend#0;class#console#0" expanded="false" />
<element signature="method#cHelp#0;class#console#0" expanded="false" />
<element signature="method#cInfo#0;class#console#0" expanded="false" />
<element signature="method#cRestart#0;class#console#0" expanded="false" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/client.java"> <entry file="file://$PROJECT_DIR$/src/Client.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="867"> <state relative-caret-position="867">
<caret line="62" column="9" selection-start-line="62" selection-start-column="9" selection-end-line="62" selection-end-column="9" /> <caret line="62" column="9" selection-start-line="62" selection-start-column="9" selection-end-line="62" selection-end-column="9" />
<folding> <folding />
<element signature="imports" expanded="true" />
<element signature="method#bytesToStringUTFCustom#0;class#client#0" expanded="false" />
<element signature="method#handshake#0;class#client#0" expanded="false" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/ctServer.java"> <entry file="file://$PROJECT_DIR$/src/CtServer.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0"> <state relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding> <folding />
<element signature="imports" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/console.java"> <entry file="file://$PROJECT_DIR$/src/Console.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1088"> <state relative-caret-position="1088">
<caret line="64" column="91" selection-start-line="64" selection-start-column="91" selection-end-line="64" selection-end-column="91" /> <caret line="64" column="91" selection-start-line="64" selection-start-column="91" selection-end-line="64" selection-end-column="91" />
<folding> <folding />
<element signature="method#consoleListner#0;class#console#0" expanded="false" />
<element signature="method#out#0;class#console#0" expanded="false" />
<element signature="method#socket#0;class#console#0" expanded="false" />
<element signature="method#debug#0;class#console#0" expanded="false" />
<element signature="method#cList#0;class#console#0" expanded="false" />
<element signature="method#cKick#0;class#console#0" expanded="false" />
<element signature="method#cSend#0;class#console#0" expanded="false" />
<element signature="method#cHelp#0;class#console#0" expanded="false" />
<element signature="method#cInfo#0;class#console#0" expanded="false" />
<element signature="method#cRestart#0;class#console#0" expanded="false" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/client.java"> <entry file="file://$PROJECT_DIR$/src/Client.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="918"> <state relative-caret-position="918">
<caret line="54" column="20" selection-start-line="54" selection-start-column="20" selection-end-line="54" selection-end-column="20" /> <caret line="54" column="20" selection-start-line="54" selection-start-column="20" selection-end-line="54" selection-end-column="20" />
<folding> <folding />
<element signature="imports" expanded="true" />
<element signature="method#bytesToStringUTFCustom#0;class#client#0" expanded="false" />
<element signature="method#handshake#0;class#client#0" expanded="false" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/ctServer.java"> <entry file="file://$PROJECT_DIR$/src/CtServer.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="221"> <state relative-caret-position="221">
<caret line="13" column="47" selection-start-line="13" selection-start-column="47" selection-end-line="13" selection-end-column="47" /> <caret line="13" column="47" selection-start-line="13" selection-start-column="47" selection-end-line="13" selection-end-column="47" />
<folding> <folding />
<element signature="imports" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/console.java"> <entry file="file://$PROJECT_DIR$/src/Console.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="578"> <state relative-caret-position="578">
<caret line="34" column="5" selection-start-line="34" selection-start-column="5" selection-end-line="34" selection-end-column="5" /> <caret line="34" column="5" selection-start-line="34" selection-start-column="5" selection-end-line="34" selection-end-column="5" />
<folding> <folding />
<element signature="method#consoleListner#0;class#console#0" expanded="false" />
<element signature="method#out#0;class#console#0" expanded="false" />
<element signature="method#socket#0;class#console#0" expanded="false" />
<element signature="method#debug#0;class#console#0" expanded="false" />
<element signature="method#cList#0;class#console#0" expanded="false" />
<element signature="method#cKick#0;class#console#0" expanded="false" />
<element signature="method#cSend#0;class#console#0" expanded="false" />
<element signature="method#cHelp#0;class#console#0" expanded="false" />
<element signature="method#cInfo#0;class#console#0" expanded="false" />
<element signature="method#cRestart#0;class#console#0" expanded="false" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/client.java"> <entry file="file://$PROJECT_DIR$/src/Client.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0"> <state relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding> <folding />
<element signature="imports" expanded="true" />
<element signature="method#bytesToStringUTFCustom#0;class#client#0" expanded="false" />
<element signature="method#handshake#0;class#client#0" expanded="false" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="jar://E:/ProfessionalPrograms/JDK8/src.zip!/java/lang/Thread.java" /> <entry file="jar://E:/ProfessionalPrograms/JDK8/src.zip!/java/lang/Thread.java" />
<entry file="file://$PROJECT_DIR$/src/ctServer.java"> <entry file="file://$PROJECT_DIR$/src/CtServer.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0"> <state relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding> <folding />
<element signature="imports" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/console.java"> <entry file="file://$PROJECT_DIR$/src/Console.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1003"> <state relative-caret-position="1003">
<caret line="67" column="13" selection-start-line="67" selection-start-column="13" selection-end-line="67" selection-end-column="13" /> <caret line="67" column="13" selection-start-line="67" selection-start-column="13" selection-end-line="67" selection-end-column="13" />
<folding> <folding />
<element signature="method#consoleListner#0;class#console#0" expanded="false" />
<element signature="method#out#0;class#console#0" expanded="false" />
<element signature="method#socket#0;class#console#0" expanded="false" />
<element signature="method#debug#0;class#console#0" expanded="false" />
<element signature="method#cList#0;class#console#0" expanded="false" />
<element signature="method#cKick#0;class#console#0" expanded="false" />
<element signature="method#cSend#0;class#console#0" expanded="false" />
<element signature="method#cHelp#0;class#console#0" expanded="false" />
<element signature="method#cInfo#0;class#console#0" expanded="false" />
<element signature="method#cRestart#0;class#console#0" expanded="false" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/client.java"> <entry file="file://$PROJECT_DIR$/src/Client.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1343"> <state relative-caret-position="1343">
<caret line="86" column="50" selection-start-line="86" selection-start-column="50" selection-end-line="86" selection-end-column="50" /> <caret line="86" column="50" selection-start-line="86" selection-start-column="50" selection-end-line="86" selection-end-column="50" />
<folding> <folding />
<element signature="imports" expanded="true" />
<element signature="method#bytesToStringUTFCustom#0;class#client#0" expanded="false" />
<element signature="method#handshake#0;class#client#0" expanded="false" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="jar://E:/ProfessionalPrograms/JDK8/src.zip!/java/lang/Thread.java" /> <entry file="jar://E:/ProfessionalPrograms/JDK8/src.zip!/java/lang/Thread.java" />
<entry file="file://$PROJECT_DIR$/src/ctServer.java"> <entry file="file://$PROJECT_DIR$/src/CtServer.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="221"> <state relative-caret-position="221">
<caret line="13" column="37" selection-start-line="13" selection-start-column="37" selection-end-line="13" selection-end-column="37" /> <caret line="13" column="37" selection-start-line="13" selection-start-column="37" selection-end-line="13" selection-end-column="37" />
<folding> <folding />
<element signature="imports" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/console.java"> <entry file="file://$PROJECT_DIR$/src/Console.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1139"> <state relative-caret-position="1139">
<caret line="67" column="13" selection-start-line="67" selection-start-column="13" selection-end-line="67" selection-end-column="13" /> <caret line="67" column="13" selection-start-line="67" selection-start-column="13" selection-end-line="67" selection-end-column="13" />
<folding> <folding />
<element signature="method#consoleListner#0;class#console#0" expanded="false" />
<element signature="method#out#0;class#console#0" expanded="false" />
<element signature="method#socket#0;class#console#0" expanded="false" />
<element signature="method#debug#0;class#console#0" expanded="false" />
<element signature="method#cList#0;class#console#0" expanded="false" />
<element signature="method#cKick#0;class#console#0" expanded="false" />
<element signature="method#cSend#0;class#console#0" expanded="false" />
<element signature="method#cHelp#0;class#console#0" expanded="false" />
<element signature="method#cInfo#0;class#console#0" expanded="false" />
<element signature="method#cRestart#0;class#console#0" expanded="false" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/client.java"> <entry file="file://$PROJECT_DIR$/src/Client.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="731"> <state relative-caret-position="731">
<caret line="43" column="30" selection-start-line="43" selection-start-column="30" selection-end-line="43" selection-end-column="30" /> <caret line="43" column="30" selection-start-line="43" selection-start-column="30" selection-end-line="43" selection-end-column="30" />
<folding> <folding />
<element signature="imports" expanded="true" />
<element signature="method#bytesToStringUTFCustom#0;class#client#0" expanded="false" />
<element signature="method#handshake#0;class#client#0" expanded="false" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
@ -1211,81 +1012,126 @@
<entry file="file://$PROJECT_DIR$/module_ctserver.xml" /> <entry file="file://$PROJECT_DIR$/module_ctserver.xml" />
<entry file="file://$PROJECT_DIR$/package-list" /> <entry file="file://$PROJECT_DIR$/package-list" />
<entry file="jar://E:/ProfessionalPrograms/JDK8/src.zip!/java/net/SocketInputStream.java" /> <entry file="jar://E:/ProfessionalPrograms/JDK8/src.zip!/java/net/SocketInputStream.java" />
<entry file="jar://$PROJECT_DIR$/lib/javax.json.jar!/javax/json/stream/JsonParser.class"> <entry file="uml://JAVA/socketInfo">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="UmlEditorProvider">
<state relative-caret-position="374"> <state>
<caret line="22" column="19" selection-start-line="22" selection-start-column="19" selection-end-line="22" selection-end-column="19" /> <ID>JAVA</ID>
<folding /> <OriginalElement>socketInfo</OriginalElement>
<nodes>
<node x="-398.0" y="-311.0">socketInfo</node>
<node x="569.75" y="313.75">socketInfo.findSocket</node>
</nodes>
<notes />
<edges>
<edge source="socketInfo.findSocket" target="socketInfo">
<point x="-47.0" y="-36.5" />
<point x="345.5" y="715.0" />
<point x="196.25" y="715.0" />
<point x="-196.25" y="345.0" />
</edge>
</edges>
<settings layout="Hierarchic Group" zoom="0.8" x="-562.0" y="73.0" />
<SelectedNodes>
<node>socketInfo</node>
</SelectedNodes>
<Categories>
<Category>Fields</Category>
<Category>Inner Classes</Category>
<Category>Constructors</Category>
<Category>Properties</Category>
<Category>Methods</Category>
</Categories>
<SCOPE>All</SCOPE>
<VISIBILITY>private</VISIBILITY>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="jar://C:/Program Files/Java/jdk1.8.0_102/src.zip!/java/util/ArrayList.java"> <entry file="uml://JAVA/">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="UmlEditorProvider">
<state relative-caret-position="185"> <state>
<caret line="430" column="0" selection-start-line="430" selection-start-column="0" selection-end-line="430" selection-end-column="0" /> <ID>JAVA</ID>
<folding /> <OriginalElement />
<nodes>
<node x="" y="">com</node>
<node x="" y="">console</node>
<node x="" y="">netscape</node>
<node x="" y="">oracle</node>
<node x="" y="">org</node>
<node x="" y="">sun</node>
<node x="" y="">META-INF</node>
<node x="" y="">jdk</node>
<node x="" y="">java</node>
<node x="" y="">javax</node>
<node x="" y="">socketInfo.findSocket</node>
<node x="" y="">client</node>
<node x="" y="">socketInfo</node>
<node x="" y="">eventNames</node>
<node x="" y="">ctServer</node>
<node x="" y="">javafx</node>
<node x="" y="">eventHandler</node>
</nodes>
<notes />
<edges />
<settings layout="Hierarchic Group" zoom="0.6262626262626263" x="672.0" y="683.0" />
<SelectedNodes />
<Categories>
<Category>Fields</Category>
<Category>Inner Classes</Category>
<Category>Constructors</Category>
<Category>Properties</Category>
<Category>Methods</Category>
</Categories>
<SCOPE>All</SCOPE>
<VISIBILITY>private</VISIBILITY>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/eventHandler.java"> <entry file="file://$PROJECT_DIR$/src/newInfo.java" />
<entry file="jar://C:/Program Files/Java/jdk1.8.0_102/src.zip!/java/util/ArrayList.java" />
<entry file="file://$PROJECT_DIR$/src/eventNames.java" />
<entry file="file://$PROJECT_DIR$/src/sEye.java" />
<entry file="file://$PROJECT_DIR$/src/Protocol.java" />
<entry file="jar://$PROJECT_DIR$/lib/javax.json.jar!/javax/json/stream/JsonParser.class">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="530"> <state relative-caret-position="493">
<caret line="152" column="36" selection-start-line="152" selection-start-column="36" selection-end-line="152" selection-end-column="36" /> <caret line="34" column="8" selection-start-line="34" selection-start-column="8" selection-end-line="34" selection-end-column="8" />
<folding>
<element signature="imports" expanded="true" />
<element signature="method#close#0;class#eventHandler#0" expanded="false" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/client.java"> <entry file="file://$PROJECT_DIR$/src/clientException.java" />
<entry file="file://$PROJECT_DIR$/src/Events.java" />
<entry file="file://$PROJECT_DIR$/src/ctException.java" />
<entry file="file://$PROJECT_DIR$/src/SocketMaps.java" />
<entry file="file://$PROJECT_DIR$/src/EventHandler.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="340"> <state relative-caret-position="289">
<caret line="279" column="69" selection-start-line="279" selection-start-column="69" selection-end-line="279" selection-end-column="69" /> <caret line="21" column="39" selection-start-line="21" selection-start-column="39" selection-end-line="21" selection-end-column="39" />
<folding> <folding />
<element signature="imports" expanded="true" />
<element signature="method#bytesToStringUTFCustom#0;class#client#0" expanded="false" />
<element signature="method#handshake#0;class#client#0" expanded="false" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/socketInfo.java"> <entry file="file://$PROJECT_DIR$/src/Client.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="530"> <state relative-caret-position="1955">
<caret line="182" column="24" selection-start-line="182" selection-start-column="24" selection-end-line="182" selection-end-column="24" /> <caret line="128" column="5" selection-start-line="128" selection-start-column="5" selection-end-line="128" selection-end-column="5" />
<folding> <folding />
<element signature="imports" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/ctServer.java"> <entry file="file://$PROJECT_DIR$/src/Console.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="102"> <state relative-caret-position="688">
<caret line="6" column="26" selection-start-line="6" selection-start-column="26" selection-end-line="6" selection-end-column="26" /> <caret line="76" column="19" selection-start-line="76" selection-start-column="19" selection-end-line="76" selection-end-column="19" />
<folding> <folding />
<element signature="imports" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/console.java"> <entry file="file://$PROJECT_DIR$/src/SocketInfo.java" />
<entry file="file://$PROJECT_DIR$/src/CtServer.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="17"> <state relative-caret-position="238">
<caret line="3" column="23" selection-start-line="3" selection-start-column="23" selection-end-line="3" selection-end-column="23" /> <caret line="15" column="58" selection-start-line="15" selection-start-column="58" selection-end-line="15" selection-end-column="58" />
<folding> <folding />
<element signature="method#consoleListner#0;class#console#0" expanded="false" />
<element signature="method#out#0;class#console#0" expanded="false" />
<element signature="method#socket#0;class#console#0" expanded="false" />
<element signature="method#debug#0;class#console#0" expanded="false" />
<element signature="method#cList#0;class#console#0" expanded="false" />
<element signature="method#cKick#0;class#console#0" expanded="false" />
<element signature="method#cSend#0;class#console#0" expanded="false" />
<element signature="method#cHelp#0;class#console#0" expanded="false" />
<element signature="method#cInfo#0;class#console#0" expanded="false" />
<element signature="method#cRestart#0;class#console#0" expanded="false" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>

17
src/Protocol.java

@ -0,0 +1,17 @@
/**
* Created by itsmy on 11.09.2016.
*/
public class Protocol {
static class _1A{
final static String EVENT = "EVENT";
final static String TIME = "TIME";
final static String AID = "AID";
final static String PLAYLIST = "PLAYLIST";
final static String TRACKTIME = "TRACKTIME";
final static String DURATION = "DURATION";
final static String AP = "AP";
final static String PS = "PS";
final static String ROLE = "ROLE";
final static String ONLINE = "ONLINE";
}
}

151
src/SocketMaps.java

@ -0,0 +1,151 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* Created by itsmy_000 on 12.09.2016.
*/
public class SocketMaps{
public enum Events{
CREATING, PLAY, PAUSE, REWIND, DISCONNECT
}
public enum Roles{
CREATOR, LISTNER
}
public enum Keys{
SOCKETID, PARTYID, EVENT, ROLE, CREATOR, CLIENT
}
private static Map<Integer, Client> SID;
private static Map<Integer, Integer> PID;
private static Map<Integer, Events> EID;
private static Map<Integer, Client.Info> info;
private static Map<Integer, Roles> role;
private static Map<Integer, Integer> creator; // 1 - SID, 2 - PID
private static Integer counter;
static void initMaps(){
counter = 0;
SID = new HashMap<>();
PID = new HashMap<>();
EID = new HashMap<>();
info = new HashMap<>();
role = new HashMap<>();
creator = new HashMap<>();
}
static Integer addClient(Client c, Client.Info i){
SID.put(counter, c);
info.put(counter, i);
PID.put(counter,null);
EID.put(counter,Events.CREATING);
return counter++;
}
static void removeClient(Integer socketid) throws ctException{
containSID(socketid);
Integer partyid = getPID(socketid);
if(getCreator(partyid) == socketid){
creator.remove(partyid);
}
SID.remove(socketid);
PID.remove(socketid);
EID.remove(socketid);
role.remove(socketid);
info.remove(socketid);
}
static void setPID(Integer socketid, Integer partyid) throws ctException{
containSID(socketid);
PID.put(socketid,partyid);
}
static void setEID(Integer socketid, Events event) throws ctException {
containSID(socketid);
EID.put(socketid, event);
}
static void setRole(Integer socketid, Roles r) throws ctException {
containSID(socketid);
role.put(socketid, r);
}
static void setCreator(Integer partyid, Integer creatorsid){
if(!creator.containsKey(partyid)) {
creator.put(partyid,creatorsid);
}
}
static Client getClient(Integer socketid) throws ctException{
containSID(socketid);
return SID.get(socketid);
}
static Client.Info getInfo(Integer socketid) throws ctException{
containSID(socketid);
return info.get(socketid);
}
static Integer getPID(Integer socketid) throws ctException {
containSID(socketid);
return PID.get(socketid);
}
static Roles getRole(Integer socketid) throws ctException {
containSID(socketid);
return role.get(socketid);
}
static Events getEID(Integer socketid) throws ctException {
containSID(socketid);
return EID.get(socketid);
}
static ArrayList<Integer> getAllClients(){
ArrayList<Integer> list = new ArrayList<>();
for (Integer integer : SID.keySet()) {
list.add(integer);
}
return list;
}
static ArrayList<Integer> getAllParty(Integer partyid){
ArrayList<Integer> list = new ArrayList<>();
Console.debug("Enter to getAllParty()");
for (int i = 0; i < PID.size(); i++) {
Map.Entry<Integer, Integer> temp = PID.entrySet().iterator().next();
if(temp.getValue() == partyid) {
list.add(temp.getKey());
Console.debug("getAllParty()|"+temp.getKey()+"|"+temp.getValue());
}
}
return list;
}
static Integer getCreator(Integer partyid){
int noCreator = 0;
try{
containPID(partyid);
return creator.get(partyid);
}
catch (ctException temp){
temp = null;
return noCreator;
}
}
private static void containSID(Integer socketid) throws ctException{
if(!SID.containsKey(socketid)){
throw new ctException("Not finded SID Key!");
}
}
private static void containPID(Integer partyid) throws ctException{
if(!PID.containsKey(partyid)){
throw new ctException("Not finded PID Key!");
}
}
}

284
src/client.java

@ -1,43 +1,71 @@
import javax.json.Json; import javax.json.Json;
import javax.json.stream.JsonParser; import javax.json.stream.JsonParser;
import javax.json.stream.JsonParsingException;
import javax.xml.bind.DatatypeConverter; import javax.xml.bind.DatatypeConverter;
import java.io.*; import java.io.*;
import java.math.BigDecimal;
import java.net.*; import java.net.*;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
import java.util.Scanner; import java.util.Scanner;
import java.util.concurrent.Exchanger;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
/** /**
* Created by itsmy on 08.08.2016. * Created by itsmy on 08.08.2016.
*/ */
public class client extends Thread { public class Client extends Thread {
public class Info{
Integer VKID,DURATION;
String PLAYLIST,PROTOCOL,AUDIOID;
BigDecimal TIME, TRACKTIME;
Boolean AP;
private void initInstance(){
VKID = 0;
DURATION = 0;
PLAYLIST = "";
PROTOCOL = "";
AUDIOID = "";
TIME = BigDecimal.ZERO;
TRACKTIME = BigDecimal.ZERO;
AP = false;
}
}
private Socket socket; private Socket socket;
private OutputStream out; private OutputStream out;
private InputStream in; private InputStream in;
private Integer socketid; private Integer socketid;
private Boolean isClosing = false; private Boolean _instanceClosed = false;
// private Boolean isClosing = false;
public void openSocket(Socket s) throws IOException { public void initSocket(Socket s) throws IOException {
socket = s; socket = s;
out = socket.getOutputStream(); out = socket.getOutputStream();
in = socket.getInputStream(); in = socket.getInputStream();
socketid = socketInfo.getNewID(); socketid = SocketMaps.addClient(this, new Info());
console.debug("Create new socket " + socketid); try {
socketInfo.create(this, socketid); SocketMaps.getInfo(socketid).initInstance();
}
catch (ctException e){
Console.socket(socketid,"Try to close!");
}
Console.debug("Create new socket " + socketid);
start(); start();
} }
public void run() { public void run() {
console.socket(socketid, "New connection"); Console.socket(socketid, "New connection");
wsControl(); runSocket();
} }
public void close() { public void closeSocket(){
if(!socketInfo.isOnline(socketid)){ if(!_instanceClosed){
_instanceClosed = true;
}
else{
return; return;
} }
try { try {
@ -46,46 +74,52 @@ public class client extends Thread {
socket.close(); socket.close();
} catch (IOException e) { } catch (IOException e) {
} }
console.socket(socketid, "Disconnected"); try {
socketInfo.close(socketid); SocketMaps.removeClient(socketid);
SocketMaps.removeClient(socketid);
Console.socket(socketid, "Disconnected");
}catch (ctException e){
Console.socket(socketid,e.toString());
}
} }
public void wsControl() { void checkProtocol(Integer socketid, String msg) throws ctException{
handshake(); if(SocketMaps.getInfo(socketid).PROTOCOL.equals("1A")){
if (!socketInfo.isHttpAuth(socketid)) {
return; }else{
} throw new ctException("Protocol verify failed!");
String msg = readSocket();
parseInput(msg);
if(!socketInfo.isProtocolAuth(socketid)){socketInfo.checkProtocol(socketid);}
if(!socketInfo.isProtocolAuth(socketid)){close(); return;}
eventHandler.connect(socketid);
while (socketInfo.isOnline(socketid)) {
msg = readSocket();
parseInput(msg);
eventExecute();
} }
} }
public void eventExecute(){ public void runSocket(){
int id = socketInfo.findSocket.bySID(socketid); try {
if(id == -1){return;} handshake();
switch (socketInfo.EVENT.get(id)){ String msg = readSocket();
case "play": eventHandler.play(socketid); parseInput(msg);
break; checkProtocol(socketid, msg);
case "pause": eventHandler.pause(socketid); SocketMaps.setRole(socketid, SocketMaps.Roles.LISTNER);
break; EventHandler.connect(socketid, SocketMaps.getPID(socketid));
case "next": eventHandler.next(socketid); while (!_instanceClosed) {
break; msg = readSocket();
case "prev": eventHandler.prev(socketid); parseInput(msg);
break; switch (SocketMaps.getRole(socketid)){
case "wind": eventHandler.wind(socketid); case CREATOR:
break; EventHandler.sendParty(socketid);
break;
case LISTNER:
break;
}
}
}catch (ctException e){
closeSocket();
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
} }
} }
private String bytesToStringUTFCustom(int[] ints) {
private String bytesToString(int[] ints) {
//TODO: добавить поддержку русского языка //TODO: добавить поддержку русского языка
char[] buffer = new char[ints.length]; char[] buffer = new char[ints.length];
for (int i = 0; i < buffer.length; i++) { for (int i = 0; i < buffer.length; i++) {
@ -95,57 +129,51 @@ public class client extends Thread {
return new String(buffer); return new String(buffer);
} }
private void handshake() { private void handshake() throws ctException {
if(!socketInfo.isOnline(socketid)){close(); return;}
try { try {
if (!socketInfo.isHttpAuth(socketid)) { socket.setSoTimeout(2000);
socket.setSoTimeout(2000); String data = new Scanner(in, "UTF-8").useDelimiter("\\r\\n\\r\\n").next();
String data = new Scanner(in, "UTF-8").useDelimiter("\\r\\n\\r\\n").next(); Matcher get = Pattern.compile("^GET").matcher(data);
Matcher get = Pattern.compile("^GET").matcher(data); if (get.find()) {
if (get.find()) { Matcher match = Pattern.compile("Sec-WebSocket-Key: (.*)").matcher(data);
Matcher match = Pattern.compile("Sec-WebSocket-Key: (.*)").matcher(data); match.find();
match.find(); try {
try { byte[] response = ("HTTP/1.1 101 Switching Protocols\r\n"
byte[] response = ("HTTP/1.1 101 Switching Protocols\r\n" + "Connection: Upgrade\r\n"
+ "Connection: Upgrade\r\n" + "Upgrade: websocket\r\n"
+ "Upgrade: websocket\r\n" + "Sec-WebSocket-Accept: "
+ "Sec-WebSocket-Accept: " + DatatypeConverter
+ DatatypeConverter .printBase64Binary(
.printBase64Binary( MessageDigest
MessageDigest .getInstance("SHA-1")
.getInstance("SHA-1") .digest((match.group(1) + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11")
.digest((match.group(1) + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11") .getBytes("UTF-8")))
.getBytes("UTF-8"))) + "\r\n\r\n")
+ "\r\n\r\n") .getBytes("UTF-8");
.getBytes("UTF-8"); out.write(response, 0, response.length);
out.write(response, 0, response.length); } catch (IOException | NoSuchAlgorithmException e) {
} catch (IOException | NoSuchAlgorithmException e) { Console.out("Server Error:", e.toString());
console.out("Server Error:", e.toString());
}
socket.setSoTimeout(0);
socketInfo.setHttpAuth(socketid, true);
console.socket(socketid, "Handshake accepted!");
} }
socket.setSoTimeout(0);
Console.socket(socketid, "Handshake accepted!");
} }
} catch (SocketException ignored) { } catch (SocketException ignored) {
} catch (NoSuchElementException e) { } catch (NoSuchElementException e) {
console.socket(socketid, "Handshake Timeout (2000ms)"); Console.socket(socketid, "Handshake Timeout (2000ms)");
socketInfo.setHttpAuth(socketid, false); closeSocket();
close();
} catch(IllegalStateException e){ } catch(IllegalStateException e){
console.socket(socketid, "Bad handshake request!"); Console.socket(socketid, "Bad handshake request!");
close(); closeSocket();
} }
} }
public Boolean sendSocket(String message) { public Boolean writeSocket(String message) {
if(!socketInfo.isOnline(socketid)){close(); return false;}
byte[] response; byte[] response;
byte[] r; byte[] r;
try { try {
response = message.getBytes("UTF-8"); response = message.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) { } catch (UnsupportedEncodingException e) {
console.socket(socketid, "Unsupported encoding!"); Console.socket(socketid, "Unsupported encoding!");
return false; return false;
} catch (NullPointerException e) { } catch (NullPointerException e) {
return false; return false;
@ -176,21 +204,20 @@ public class client extends Thread {
r[8] = (byte) (response.length >>> 8); r[8] = (byte) (response.length >>> 8);
r[9] = (byte) (response.length); r[9] = (byte) (response.length);
} else { } else {
console.out("Socket Exception", "Too long message for sending! (>64bit)"); Console.out("Socket Exception", "Too long message for sending! (>64bit)");
return false; return false;
} }
try { try {
out.write(r, 0, r.length); out.write(r, 0, r.length);
return true; return true;
} catch (IOException e) { } catch (IOException e) {
console.out("Socket Exeption", "Client socket is closed?! Closing socket connection!"); Console.out("Socket Exeption", "Client socket is closed?! Closing socket connection!");
close(); closeSocket();
return false; return false;
} }
} }
public String readSocket() { public String readSocket() {
if(!socketInfo.isOnline(socketid)){close(); return null;}
String out = ""; String out = "";
try { try {
int[] MSG = new int[0]; int[] MSG = new int[0];
@ -200,10 +227,10 @@ public class client extends Thread {
int OPCODE = in.read(); //читаем OPCODE byte int OPCODE = in.read(); //читаем OPCODE byte
switch (OPCODE) { switch (OPCODE) {
case -1: case -1:
close(); //закрываем чтение потока при -1 closeSocket(); //закрываем чтение потока при -1
return null; return null;
case 136: case 136:
close(); closeSocket();
return null; return null;
case 129: case 129:
LENGTH = in.read(); //читаем второй бит с данными о размере сообщения LENGTH = in.read(); //читаем второй бит с данными о размере сообщения
@ -246,23 +273,22 @@ public class client extends Thread {
MSG[j] = (byte) (enc ^ KEY[j & 0x3]); MSG[j] = (byte) (enc ^ KEY[j & 0x3]);
} }
if (MSG.length > 0) { if (MSG.length > 0) {
out = bytesToStringUTFCustom(MSG); out = bytesToString(MSG);
} else { } else {
return null; return null;
} }
} }
} catch (IOException e) { } catch (IOException e) {
console.out("Socket Exception", "Client socket is closed?! Closing socket connection!"); Console.out("Socket Exception", "Client socket is closed?! Closing socket connection!");
close(); closeSocket();
} }
if(!socketInfo.isOnline(socketid)){close(); return null;} Console.socket(socketid, "Получаю: " + out);
console.socket(socketid, "Получаю: " + out);
return out; return out;
} }
public Boolean parseInput(String input) { public Boolean parseInput(String input) throws ctException{
if(!socketInfo.isOnline(socketid)){close();return false;}
try { try {
Info inf = SocketMaps.getInfo(socketid);
String keyName = null; String keyName = null;
JsonParser jsonParser = Json.createParser(new StringReader(input)); JsonParser jsonParser = Json.createParser(new StringReader(input));
while (jsonParser.hasNext()) { while (jsonParser.hasNext()) {
@ -272,30 +298,86 @@ public class client extends Thread {
keyName = jsonParser.getString(); keyName = jsonParser.getString();
break; break;
case VALUE_STRING: case VALUE_STRING:
socketInfo.setString(socketid, keyName, jsonParser.getString()); setString(socketid, keyName, jsonParser.getString(), inf);
break; break;
case VALUE_NUMBER: case VALUE_NUMBER:
socketInfo.setInteger(socketid, keyName, jsonParser.getBigDecimal()); setInteger(socketid, keyName, jsonParser.getBigDecimal(), inf);
break; break;
case VALUE_FALSE: case VALUE_FALSE:
socketInfo.setBoolean(socketid, keyName, false); setBoolean(socketid, keyName, false, inf);
break; break;
case VALUE_TRUE: case VALUE_TRUE:
socketInfo.setBoolean(socketid, keyName, true); setBoolean(socketid, keyName, true, inf);
break; break;
case VALUE_NULL: case VALUE_NULL:
// don't set anything
break; break;
default: default:
// we are not looking for other events
break; break;
} }
} }
return true; return true;
}catch(NullPointerException e){ }catch(NullPointerException e){
console.socket(socketid,"Request parsing error!"); Console.socket(socketid,"Request parsing error!");
return false; return false;
} }catch(JsonParsingException e){
Console.socket(socketid, "JSON Parsing Error!");
return false;
}
}
public static void setString(Integer sid, String keyName, String value, Info inf) throws ctException {
switch (keyName) {
case "EVENT":
switch (value){
case "play":
SocketMaps.setEID(sid, SocketMaps.Events.PLAY);
break;
case "pause":
SocketMaps.setEID(sid, SocketMaps.Events.PAUSE);
break;
case "rewind":
SocketMaps.setEID(sid, SocketMaps.Events.REWIND);
break;
case "DISCONNECT":
SocketMaps.setEID(sid, SocketMaps.Events.DISCONNECT);
}
break;
case "AID":
inf.AUDIOID = value;
break;
case "PROTOCOL":
inf.PROTOCOL = value;
break;
case "PLAYLIST":
inf.PLAYLIST = value;
break;
}
} }
public static void setInteger(Integer sid, String keyName, BigDecimal value, Info inf)
throws ctException{
switch (keyName){
case "USERID": inf.VKID = value.intValueExact();
break;
case "TIME": inf.TIME = value;
break;
case "TRACKTIME": inf.TRACKTIME = value;
break;
case "PARTYID": SocketMaps.setPID(sid, value.intValueExact());
break;
case "DURATION": inf.DURATION = value.intValueExact();
break;
}
}
public static void setBoolean(Integer sid, String keyName, Boolean value, Info inf){
switch (keyName) {
case "AP":
inf.AP = value.booleanValue();
break;
}
}
} }

111
src/console.java

@ -1,6 +1,7 @@
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.net.Socket;
import java.time.Clock; import java.time.Clock;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -8,7 +9,7 @@ import java.util.regex.Pattern;
/** /**
* Created by itsmy on 08.08.2016. * Created by itsmy on 08.08.2016.
*/ */
public class console extends Thread{ public class Console extends Thread{
private BufferedReader in; private BufferedReader in;
private String line; private String line;
@ -52,7 +53,7 @@ public class console extends Thread{
} }
public void run() { public void run() {
console.out("Server", "Welcome to the ctServer/build25"); Console.out("Server", "Welcome to the CtServer[BUILD 030]");
while (line.equalsIgnoreCase("/stop") == false) { while (line.equalsIgnoreCase("/stop") == false) {
try{ try{
line = in.readLine(); line = in.readLine();
@ -80,109 +81,103 @@ public class console extends Thread{
case "/restart": case "/restart":
cRestart(); cRestart();
break; break;
default: console.out("Server","Введите /help для помощи"); default: Console.out("Server","Введите /help для помощи");
} }
}catch (IOException e){ }catch (IOException e){
console.out("Console","Something goes wrong..."); Console.out("Console","Something goes wrong...");
}catch (NumberFormatException e){ }catch (NumberFormatException e){
console.out("Console","Hey guy, don't be so crazy!!!"); Console.out("Console","Hey guy, don't be so crazy!!!");
}catch (ctException e){
} }
} }
for (int i = 0; i < socketInfo.SOCKETID.size(); i++) {
socketInfo.CLIENT.get(i).close();
}
} }
private void cHide() { private void cHide() {
if(!hide){hide = true;} else {hide = false;} if(!hide){hide = true;} else {hide = false;}
} }
private void cList() { private void cList() throws ctException {
Integer sid; Integer sid;
console.out("Server","/list"); Console.out("Server","/list");
for(int i = 0; socketInfo.SOCKETID.size() > i; i++){ for(int i = 0; SocketMaps.getAllClients().size() > i; i++){
sid = socketInfo.SOCKETID.get(i); sid = SocketMaps.getAllClients().get(i);
if(socketInfo.protocolAuth.get(i)) { if(SocketMaps.getInfo(sid).PROTOCOL == "1A") {
console.socket(sid,"VKID " + socketInfo.VKID.get(i) Console.socket(sid,"VKID " + SocketMaps.getInfo(sid).VKID
+ " PROTOCOL " + socketInfo.PROTOCOL.get(i) + " PROTOCOL " + SocketMaps.getInfo(sid).PROTOCOL
+ " EVENT " + socketInfo.EVENT.get(i) + " EVENT " + SocketMaps.getEID(sid)
+ " PARTYID " + socketInfo.PARTYID.get(i) + " PARTYID " + SocketMaps.getPID(sid)
+ " TIME " + socketInfo.TIME.get(i) + " TIME " + SocketMaps.getInfo(sid).TIME
+ " TRACKDURATION " + socketInfo.DURATION.get(i)); + " TRACKDURATION " + SocketMaps.getInfo(sid).DURATION);
}else{ }else{
console.socket(sid,"Protocol not checked!"); Console.socket(sid,"Protocol not checked!");
} }
} }
} }
private void cKick(String[] sx) { private void cKick(String[] sx) throws ctException{
Integer sid; Integer sid;
sid = Integer.valueOf(sx[1]); sid = Integer.valueOf(sx[1]);
if(socketInfo.findSocket.bySID(Integer.valueOf(sx[1])) != -1){ SocketMaps.getClient(sid).closeSocket();
socketInfo.getClient(sid).close();
}
} }
private void cSend(String[] sx) { private void cSend(String[] sx) throws ctException {
Integer sid; Integer sid;
sid = socketInfo.findSocket.bySID(Integer.valueOf(sx[1])); sid = Integer.valueOf(sx[1]);
if(sid != -1){ String msg = "";
String msg = ""; for (int i = 2; i < sx.length ; i++) {
for (int i = 2; i < sx.length ; i++) { msg += " ";
msg += " "; msg += sx[i];
msg += sx[i];
}
socketInfo.getClient(Integer.valueOf(sx[1])).sendSocket(msg);
} }
SocketMaps.getClient(sid).writeSocket(msg);
} }
private void cHelp() { private void cHelp() {
console.out("Server","/kick [socketid] для отключения сокета от сервера"); Console.out("Server","/kick [socketid] для отключения сокета от сервера");
console.out("Server","/list для отображения всех клиентов"); Console.out("Server","/list для отображения всех клиентов");
console.out("Server","/info pid/sid [id] для отображения полной информации о данном клиенте"); Console.out("Server","/info pid/sid [id] для отображения полной информации о данном клиенте");
console.out("Server","/send [socketid] [msg] отладочная команда"); Console.out("Server","/send [socketid] [msg] отладочная команда");
console.out("Server","ctServer Proto Defend Development 2016"); Console.out("Server","CtServer Proto Defend Development 2016");
} }
private void cInfo(String[] sx) { private void cInfo(String[] sx) throws ctException {
Integer sid; Integer sid;
Integer id;
if(sx.length < 3){ if(sx.length < 3){
console.out("Server","/info [pid/sid] <id>"); Console.out("Server","/info [pid/sid] <id>");
} else { } else {
switch (sx[1]) { switch (sx[1]) {
case "sid": case "sid":
sid = Integer.valueOf(sx[2]); sid = Integer.valueOf(sx[2]);
id = socketInfo.findSocket.bySID(sid); Console.socket(sid,"VKID " + SocketMaps.getInfo(sid).VKID
if(id == -1){break;} + " PROTOCOL " + SocketMaps.getInfo(sid).PROTOCOL
console.socket(sid,"VKID " + socketInfo.VKID.get(id) + " EVENT " + SocketMaps.getEID(sid)
+ " PROTOCOL " + socketInfo.PROTOCOL.get(id) + " PARTYID " + SocketMaps.getPID(sid)
+ " EVENT " + socketInfo.EVENT.get(id) + " TRACKDURATION " + SocketMaps.getInfo(sid).DURATION);
+ " PARTYID " + socketInfo.PARTYID.get(id)
+ " TRACKDURATION " + socketInfo.DURATION.get(id));
break; break;
case "pid": case "pid":
ArrayList<Integer> a = socketInfo.findSocket.byPID(Integer.valueOf(sx[2])); Integer pid = Integer.valueOf(sx[2]);
ArrayList<Integer> a = SocketMaps.getAllParty(pid);
for (int i = 0; i < a.size(); i++) { for (int i = 0; i < a.size(); i++) {
id = a.get(i); Console.socket(a.get(i),"VKID " + SocketMaps.getInfo(a.get(i)).VKID
console.socket(socketInfo.SOCKETID.get(id),"VKID " + socketInfo.VKID.get(id) + " PROTOCOL " + SocketMaps.getInfo(a.get(i)).PROTOCOL
+ " PROTOCOL " + socketInfo.PROTOCOL.get(id) + " EVENT " + SocketMaps.getEID(a.get(i))
+ " EVENT " + socketInfo.EVENT.get(id) + " PARTYID " + SocketMaps.getPID(a.get(i))
+ " PARTYID " + socketInfo.PARTYID.get(id) + " TRACKDURATION " + SocketMaps.getInfo(a.get(i)).DURATION);
+ " TRACKDURATION " + socketInfo.DURATION.get(id));
} }
break; break;
default: default:
console.out("Server", "/info [pid/sid] <id>"); Console.out("Server", "/info [pid/sid] <id>");
break; break;
} }
} }
} }
private void cRestart(){ private void cRestart(){
for (int i = 0; i < socketInfo.SOCKETID.size(); i++) { ArrayList<Integer> TempList= SocketMaps.getAllClients();
socketInfo.CLIENT.get(i).sendSocket("{\"EVENT\":\"RESTART\"}"); for (int i = 0; i < TempList.size(); i++) {
try{
SocketMaps.getClient(TempList.get(i)).writeSocket("{\"EVENT\":\"RESTART\"}");
}catch (ctException ct){}
} }
System.exit(99); System.exit(99);
} }

8
src/ctException.java

@ -0,0 +1,8 @@
/**
* Created by itsmy_000 on 12.09.2016.
*/
class ctException extends Exception {
ctException(String message) {
super(message);
}
}

18
src/ctServer.java

@ -1,29 +1,29 @@
import java.net.*; import java.net.*;
import java.io.*; import java.io.*;
public class ctServer { public class CtServer {
public static void main(String[] args) throws IOException{ public static void main(String[] args) throws IOException{
socketInfo.init(); SocketMaps.initMaps();
try{ try{
new console().consoleListner(); new Console().consoleListner();
} }
catch (IOException ignored){} catch (IOException ignored){}
int port = 80; int port = 80;
console.out("Socket Port", port+""); Console.out("Socket Port", port+"");
ServerSocket ss = new ServerSocket(port); ServerSocket instance = new ServerSocket(port);
try { try {
console.out("Server", "Waiting for a client"); Console.out("Server", "Waiting for a Client");
while(true) { while(true) {
Socket socket = ss.accept(); Socket socket = instance.accept();
try { try {
new client().openSocket(socket); new Client().initSocket(socket);
} catch (IOException e) { } catch (IOException e) {
socket.close(); socket.close();
} }
} }
} finally { } finally {
ss.close(); instance.close();
} }
} }

187
src/eventHandler.java

@ -1,159 +1,96 @@
import jdk.nashorn.internal.parser.JSONParser;
import javax.json.Json; import javax.json.Json;
import javax.json.JsonObject; import javax.json.JsonObject;
import javax.json.JsonObjectBuilder; import javax.json.JsonObjectBuilder;
import java.net.Socket;
import java.util.ArrayList; import java.util.ArrayList;
/** /**
* Created by itsmy on 15.08.2016. * Created by itsmy on 15.08.2016.
*/ */
public class eventHandler { public class EventHandler {
/*TODO: разделить метод на несколько методов
//TODO: переписать почти весь код здесь * Метод записи ролей
//Нужно покончить с этим быдланством * Метод сборки JSON
public static synchronized void connect(Integer sid){ * Метод рассылки по клиентам
JsonObjectBuilder creator = Json.createObjectBuilder(); */
creator.add("EVENT","SERVICE"); public static synchronized void connect(Integer socketid, Integer partyid) throws ctException{
int id = socketInfo.findSocket.bySID(sid); ArrayList<Integer> a = SocketMaps.getAllParty(partyid);
if(id == -1){return;} if(a.size() == 1) {
ArrayList<Integer> a = socketInfo.findSocket.byPID(socketInfo.PARTYID.get(id)); //Если клиент первым подключился, то он управляет
if(a.size() == 1) { //Если клиент первым подключился, то он управляет SocketMaps.setCreator(partyid, socketid);
SocketMaps.setRole(socketid, SocketMaps.Roles.CREATOR);
JsonObjectBuilder creator = Json.createObjectBuilder();
creator.add("EVENT","SERVICE");
creator.add("ROLE", 0); creator.add("ROLE", 0);
creator.add("ONLINE", 0); creator.add("ONLINE", 0);
socketInfo.ROLE.set(id, 0);
JsonObject cc = creator.build(); JsonObject cc = creator.build();
socketInfo.CLIENT.get(id).sendSocket(cc.toString()); SocketMaps.getClient(socketid).writeSocket(cc.toString());
} else if(a.size() > 1) { //Если клиент уже не первый, то всем остальным клиентам идет рассылка о новом подключении } else if(a.size() > 1) {
socketInfo.ROLE.set(id, 1); //Если клиент уже не первый, то всем остальным клиентам идет рассылка о новом подключении
SocketMaps.setRole(socketid, SocketMaps.Roles.LISTNER);
JsonObjectBuilder creator = Json.createObjectBuilder();
creator.add("ONLINE" , a.size()-1); creator.add("ONLINE" , a.size()-1);
for (int i = 0; i < a.size(); i++) { for (int i = 0; i < a.size(); i++) {
if(socketInfo.ROLE.get(i) == 0){ switch (SocketMaps.getRole(a.get(i))) {
JsonObject cc = creator.build(); case CREATOR:
socketInfo.CLIENT.get(a.get(i)).sendSocket(cc.toString()); JsonObject cc = creator.build();
} SocketMaps.getClient(a.get(i)).writeSocket(cc.toString());
else{ break;
JsonObjectBuilder listner = Json.createObjectBuilder(); case LISTNER:
listner.add("EVENT","SERVICE"); JsonObjectBuilder listner = Json.createObjectBuilder();
listner.add("ROLE", 1); listner.add("EVENT", "SERVICE");
listner.add("ONLINE" , a.size()-1); listner.add("ROLE", 1);
JsonObject lc = listner.build(); listner.add("ONLINE", a.size() - 1);
socketInfo.CLIENT.get(a.get(i)).sendSocket(lc.toString()); JsonObject lc = listner.build();
SocketMaps.getClient(a.get(i)).writeSocket(lc.toString());
break;
} }
} }
socketInfo.CLIENT.get(id).eventExecute();
} }
} }
public static void close(Integer sid){
JsonObjectBuilder c = Json.createObjectBuilder();
c.add("EVENT","SERVICE");
int id = socketInfo.findSocket.bySID(sid);
ArrayList<Integer> a = socketInfo.findSocket.byPID(socketInfo.PARTYID.get(id));
if(a.size() < 2){return;}
if(socketInfo.ROLE.get(id) == 0){
for (int i = 0; i < socketInfo.ROLE.size() ; i++) {
if(id != i){
socketInfo.ROLE.set(i, 0);
JsonObjectBuilder creator = Json.createObjectBuilder();
creator.add("EVENT","SERVICE");
creator.add("ROLE", 1);
creator.add("ONLINE" , a.size()-2);
JsonObject lc = creator.build();
socketInfo.CLIENT.get(i).sendSocket(lc.toString());
break;
}
}
}
for (int i = 0; i < a.size(); i++) {
// JsonObjectBuilder listner = Json.createObjectBuilder();
// listner.add("EVENT","SERVICE");
// listner.add("ROLE", 1);
// listner.add("ONLINE" , a.size()-1);
// JsonObject lc = listner.build();
// socketInfo.CLIENT.get(i).sendSocket(lc.toString());
}
}
public static void play(Integer sid){
int id = socketInfo.findSocket.bySID(sid);
if(id == -1){return;}
JsonObjectBuilder creator = Json.createObjectBuilder();
creator.add("EVENT", "play");
creator.add("tm",socketInfo.TIME.get(id));
creator.add("tI", socketInfo.TRACKID.get(id));
creator.add("li", "main");
creator.add("tT", socketInfo.TRACKTIME.get(id));
creator.add("tD", socketInfo.DURATION.get(id));
creator.add("aP", socketInfo.AUTOPLAY.get(id));
eventSender(id,creator);
}
public static void next(Integer sid){
int id = socketInfo.findSocket.bySID(sid);
if(id == -1){return;}
JsonObjectBuilder creator = Json.createObjectBuilder();
creator.add("EVENT", "next");
creator.add("tm",socketInfo.TIME.get(id));
creator.add("tI", socketInfo.TRACKID.get(id));
creator.add("li", "main");
creator.add("tT", socketInfo.TRACKTIME.get(id));
creator.add("tD", socketInfo.DURATION.get(id));
creator.add("aP", socketInfo.AUTOPLAY.get(id));
eventSender(id,creator);
}
public static void prev(Integer sid){ public static JsonObject buildEvent(Integer socketid) throws ctException{
int id = socketInfo.findSocket.bySID(sid);
if(id == -1){return;}
JsonObjectBuilder creator = Json.createObjectBuilder(); JsonObjectBuilder creator = Json.createObjectBuilder();
creator.add("EVENT", "prev"); Integer pid = SocketMaps.getPID(socketid);
creator.add("tm",socketInfo.TIME.get(id)); switch (SocketMaps.getEID(SocketMaps.getCreator(pid))){
creator.add("tI", socketInfo.TRACKID.get(id)); case PLAY: creator.add("EVENT", "play");
creator.add("li", "main"); break;
creator.add("tT", socketInfo.TRACKTIME.get(id)); case PAUSE: creator.add("EVENT", "pause");
creator.add("tD", socketInfo.DURATION.get(id)); break;
creator.add("aP", socketInfo.AUTOPLAY.get(id)); case REWIND: creator.add("EVENT", "rewind");
eventSender(id,creator); break;
case DISCONNECT: SocketMaps.getClient(socketid).closeSocket();
return null;
}
creator.add(Protocol._1A.TIME, SocketMaps.getInfo(socketid).TIME);
creator.add(Protocol._1A.AID, SocketMaps.getInfo(socketid).AUDIOID);
creator.add(Protocol._1A.TRACKTIME, SocketMaps.getInfo(socketid).TRACKTIME);
creator.add(Protocol._1A.DURATION, SocketMaps.getInfo(socketid).DURATION);
creator.add(Protocol._1A.PLAYLIST, SocketMaps.getInfo(socketid).PLAYLIST);
creator.add(Protocol._1A.AP, SocketMaps.getInfo(socketid).AP);
JsonObject main = creator.build();
return main;
} }
public static void pause(Integer sid){ public static void sendClient(Integer socketid) throws ctException{
int id = socketInfo.findSocket.bySID(sid); JsonObject main = buildEvent(socketid);
if(id == -1){return;} SocketMaps.getClient(socketid).writeSocket(main.toString());
JsonObjectBuilder creator = Json.createObjectBuilder();
creator.add("EVENT", "pause");
creator.add("tm",socketInfo.TIME.get(id));
creator.add("tI", socketInfo.TRACKID.get(id));
creator.add("li", "main");
creator.add("tT", socketInfo.TRACKTIME.get(id));
creator.add("tD", socketInfo.DURATION.get(id));
creator.add("aP", socketInfo.AUTOPLAY.get(id));
eventSender(id,creator);
} }
public static void eventSender(Integer id, JsonObjectBuilder creator){ public static void sendParty(Integer socketid) throws ctException{
ArrayList<Integer> a = socketInfo.findSocket.byPID(socketInfo.PARTYID.get(id)); JsonObject main = buildEvent(socketid);
if(main == null){return;}
ArrayList<Integer> a = SocketMaps.getAllParty(SocketMaps.getPID(socketid));
for (int i = 0; i < a.size(); i++) { for (int i = 0; i < a.size(); i++) {
JsonObject c = creator.build(); SocketMaps.getClient(a.get(i)).writeSocket(main.toString());
socketInfo.CLIENT.get(a.get(i)).sendSocket(c.toString()); Console.socket(a.get(i),main.toString());
} }
} }
public static void wind(Integer sid){
int id = socketInfo.findSocket.bySID(sid);
if(id == -1){return;}
JsonObjectBuilder creator = Json.createObjectBuilder();
creator.add("EVENT", "wind");
creator.add("tm",socketInfo.TIME.get(id));
creator.add("tI", socketInfo.TRACKID.get(id));
creator.add("tT", socketInfo.TRACKTIME.get(id));
creator.add("tD", socketInfo.DURATION.get(id));
creator.add("ps", false);
eventSender(id,creator);
}
} }

188
src/socketInfo.java

@ -1,188 +0,0 @@
import com.sun.istack.internal.NotNull;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.function.BooleanSupplier;
/**
* Created by itsmy_000 on 13.08.2016.
*/
public class socketInfo {
// public enum EVENT{PLAY,NEXT,REWIND,PAUSE,PREV,SCROB}
// public static ArrayList<EVENT> EVENTS;
public static ArrayList<BigDecimal> TIME, TRACKTIME;
public static ArrayList<String> PROTOCOL, EVENT, TRACKID;
public static ArrayList<Integer> ROLE, VKID, SOCKETID, PARTYID, DURATION;
public static ArrayList<Boolean> ONLINE, httpAuth, protocolAuth, AUTOPLAY;
public static ArrayList<client> CLIENT;
public static Integer sid;
public static void init(){
sid = 0;
VKID = new ArrayList<>();
TIME = new ArrayList<>();
TRACKTIME = new ArrayList<>();
ROLE = new ArrayList<>();
EVENT = new ArrayList<>();
CLIENT = new ArrayList<>();
PARTYID = new ArrayList<>();
TRACKID = new ArrayList<>();
PROTOCOL = new ArrayList<>();
DURATION = new ArrayList<>();
SOCKETID = new ArrayList<>();
ONLINE = new ArrayList<>();
httpAuth = new ArrayList<>();
protocolAuth = new ArrayList<>();
AUTOPLAY = new ArrayList<>();
}
public static void create(client c, Integer sid){
VKID.add(0);
TIME.add(BigDecimal.ZERO);
TRACKTIME.add(BigDecimal.ZERO);
ROLE.add(1);
EVENT.add("");
ONLINE.add(true);
CLIENT.add(c);
TRACKID.add("");
PROTOCOL.add("");
PARTYID.add(0);
DURATION.add(0);
SOCKETID.add(sid);
httpAuth.add(false);
protocolAuth.add(false);
AUTOPLAY.add(false);
}
public static void close(Integer sid){
int s = findSocket.bySID(sid);
VKID.remove(s);
ROLE.remove(s);
PROTOCOL.remove(s);
EVENT.remove(s);
TRACKID.remove(s);
SOCKETID.remove(s);
TIME.remove(s);
TRACKTIME.remove(s);
DURATION.remove(s);
PARTYID.remove(s);
CLIENT.remove(s);
ONLINE.remove(s);
httpAuth.remove(s);
protocolAuth.remove(s);
AUTOPLAY.remove(s);
}
public static Integer getNewID(){
sid++;
return sid;
}
public static class findSocket extends socketInfo{
public static Integer bySID(Integer s){
int id = -1;
for (int i = 0; i < SOCKETID.size(); i++) {
if(SOCKETID.get(i).equals(s)){
id = i;
}
}
return id;
}
public static ArrayList<Integer> byPID(Integer pid){
ArrayList<Integer> a = new ArrayList<>();
for (int i = 0; i < PARTYID.size(); i++) {
if(PARTYID.get(i).equals(pid)){
a.add(i);
}
}
return a;
}
}
public static void setHttpAuth(Integer sid, Boolean b){
int s = findSocket.bySID(sid);
if(s == -1) return;
httpAuth.set(s, b);
}
public static void checkProtocol(Integer sid){
int s = findSocket.bySID(sid);
if(s == -1) return;
if(PROTOCOL.get(s).equals("1A")){
protocolAuth.set(s, true);
}
}
public static Boolean isProtocolAuth(Integer sid){
int s = findSocket.bySID(sid);
if(s == -1) return Boolean.FALSE;
return protocolAuth.get(s);
}
public static Boolean isHttpAuth(Integer sid){
int s = findSocket.bySID(sid);
if(s == -1) return Boolean.FALSE;
return httpAuth.get(s);
}
public static Boolean isOnline(Integer sid){
int s = findSocket.bySID(sid);
if(s == -1) return Boolean.FALSE;
return ONLINE.get(s);
}
public static client getClient(Integer sid){
int s = findSocket.bySID(sid);
if(s == -1) return null;
return socketInfo.CLIENT.get(s);
}
public static void setString(Integer sid, String keyName, String value) {
int s = findSocket.bySID(sid);
if (s == -1) return;
switch (keyName) {
case "EVENT":
EVENT.set(s, value);
break;
case "tI":
TRACKID.set(s, value);
break;
case "protocol":
PROTOCOL.set(s, value);
break;
}
}
public static void setInteger(Integer sid, String keyName, BigDecimal value){
int s = findSocket.bySID(sid);
if(s == -1) return;
switch (keyName){
case "vk_id": VKID.set(s, value.intValueExact());
break;
case "tm": TIME.set(s, value);
break;
case "tT": TRACKTIME.set(s, value);
break;
case "partyId": PARTYID.set(s, value.intValueExact());
break;
case "tD": DURATION.set(s, value.intValueExact());
break;
}
}
public static void setBoolean(Integer sid, String keyName, Boolean value){
int s = findSocket.bySID(sid);
if(s == -1) return;
switch (keyName) {
case "aP":
AUTOPLAY.set(s, value.booleanValue());
break;
}
}
}
Loading…
Cancel
Save