diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index 7fa5e4b..8bc19c7 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -6,8 +6,18 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
index 4e45a59..60bcd90 100644
--- a/.idea/encodings.xml
+++ b/.idea/encodings.xml
@@ -1,7 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index c556eb8..831be57 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -5,6 +5,12 @@
diff --git a/data_cache/target/classes/com/data/bean/AccountBean.class b/data_cache/target/classes/com/data/bean/AccountBean.class
new file mode 100644
index 0000000..f675d44
Binary files /dev/null and b/data_cache/target/classes/com/data/bean/AccountBean.class differ
diff --git a/data_cache/target/classes/com/data/bean/BaseBean.class b/data_cache/target/classes/com/data/bean/BaseBean.class
new file mode 100644
index 0000000..de6d1f9
Binary files /dev/null and b/data_cache/target/classes/com/data/bean/BaseBean.class differ
diff --git a/data_cache/target/classes/com/data/bean/GameBean.class b/data_cache/target/classes/com/data/bean/GameBean.class
new file mode 100644
index 0000000..82218b3
Binary files /dev/null and b/data_cache/target/classes/com/data/bean/GameBean.class differ
diff --git a/data_cache/target/classes/com/data/bean/GroupBean.class b/data_cache/target/classes/com/data/bean/GroupBean.class
new file mode 100644
index 0000000..9e4757c
Binary files /dev/null and b/data_cache/target/classes/com/data/bean/GroupBean.class differ
diff --git a/data_cache/target/classes/com/data/bean/GroupMemberBean.class b/data_cache/target/classes/com/data/bean/GroupMemberBean.class
new file mode 100644
index 0000000..23b3ae1
Binary files /dev/null and b/data_cache/target/classes/com/data/bean/GroupMemberBean.class differ
diff --git a/data_cache/target/classes/com/data/bean/GroupPlayBean.class b/data_cache/target/classes/com/data/bean/GroupPlayBean.class
new file mode 100644
index 0000000..443f0af
Binary files /dev/null and b/data_cache/target/classes/com/data/bean/GroupPlayBean.class differ
diff --git a/data_cache/target/classes/com/data/cache/AccountCache.class b/data_cache/target/classes/com/data/cache/AccountCache.class
new file mode 100644
index 0000000..876a4c8
Binary files /dev/null and b/data_cache/target/classes/com/data/cache/AccountCache.class differ
diff --git a/data_cache/target/classes/com/data/cache/BaseCache.class b/data_cache/target/classes/com/data/cache/BaseCache.class
new file mode 100644
index 0000000..dffae27
Binary files /dev/null and b/data_cache/target/classes/com/data/cache/BaseCache.class differ
diff --git a/data_cache/target/classes/com/data/cache/GameCache.class b/data_cache/target/classes/com/data/cache/GameCache.class
new file mode 100644
index 0000000..e3db4a7
Binary files /dev/null and b/data_cache/target/classes/com/data/cache/GameCache.class differ
diff --git a/data_cache/target/classes/com/data/cache/GroupCache.class b/data_cache/target/classes/com/data/cache/GroupCache.class
new file mode 100644
index 0000000..a3f2c6b
Binary files /dev/null and b/data_cache/target/classes/com/data/cache/GroupCache.class differ
diff --git a/data_cache/target/classes/com/data/cache/GroupMemberCache.class b/data_cache/target/classes/com/data/cache/GroupMemberCache.class
new file mode 100644
index 0000000..60bcc18
Binary files /dev/null and b/data_cache/target/classes/com/data/cache/GroupMemberCache.class differ
diff --git a/data_cache/target/classes/com/data/cache/GroupPlayCache.class b/data_cache/target/classes/com/data/cache/GroupPlayCache.class
new file mode 100644
index 0000000..708cb59
Binary files /dev/null and b/data_cache/target/classes/com/data/cache/GroupPlayCache.class differ
diff --git a/data_cache/target/classes/com/data/util/ConsumeCode.class b/data_cache/target/classes/com/data/util/ConsumeCode.class
new file mode 100644
index 0000000..ac467cb
Binary files /dev/null and b/data_cache/target/classes/com/data/util/ConsumeCode.class differ
diff --git a/data_cache/target/classes/com/data/util/CountUtil.class b/data_cache/target/classes/com/data/util/CountUtil.class
new file mode 100644
index 0000000..056fce3
Binary files /dev/null and b/data_cache/target/classes/com/data/util/CountUtil.class differ
diff --git a/data_cache/target/classes/com/data/util/ErrorCode.class b/data_cache/target/classes/com/data/util/ErrorCode.class
new file mode 100644
index 0000000..4d9b67f
Binary files /dev/null and b/data_cache/target/classes/com/data/util/ErrorCode.class differ
diff --git a/data_cache/target/classes/com/data/util/EventType.class b/data_cache/target/classes/com/data/util/EventType.class
new file mode 100644
index 0000000..4a96baf
Binary files /dev/null and b/data_cache/target/classes/com/data/util/EventType.class differ
diff --git a/data_cache/target/classes/com/data/util/Utility.class b/data_cache/target/classes/com/data/util/Utility.class
new file mode 100644
index 0000000..1d932bb
Binary files /dev/null and b/data_cache/target/classes/com/data/util/Utility.class differ
diff --git a/data_cache/target/data_cache.jar b/data_cache/target/data_cache.jar
new file mode 100644
index 0000000..880a688
Binary files /dev/null and b/data_cache/target/data_cache.jar differ
diff --git a/data_cache/target/maven-archiver/pom.properties b/data_cache/target/maven-archiver/pom.properties
new file mode 100644
index 0000000..d81d2e7
--- /dev/null
+++ b/data_cache/target/maven-archiver/pom.properties
@@ -0,0 +1,3 @@
+artifactId=data_cache
+groupId=com.data
+version=1.0.1
diff --git a/data_cache/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/data_cache/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
new file mode 100644
index 0000000..902d1e5
--- /dev/null
+++ b/data_cache/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -0,0 +1,17 @@
+com\data\bean\AccountBean.class
+com\data\bean\GameBean.class
+com\data\util\Utility.class
+com\data\cache\AccountCache.class
+com\data\cache\GroupMemberCache.class
+com\data\cache\GroupCache.class
+com\data\cache\BaseCache.class
+com\data\bean\GroupBean.class
+com\data\cache\GameCache.class
+com\data\util\ConsumeCode.class
+com\data\bean\GroupPlayBean.class
+com\data\bean\GroupMemberBean.class
+com\data\bean\BaseBean.class
+com\data\util\EventType.class
+com\data\cache\GroupPlayCache.class
+com\data\util\CountUtil.class
+com\data\util\ErrorCode.class
diff --git a/data_cache/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/data_cache/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
new file mode 100644
index 0000000..105887a
--- /dev/null
+++ b/data_cache/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,17 @@
+D:\cuican\server\data_cache\src\main\java\com\data\cache\GroupMemberCache.java
+D:\cuican\server\data_cache\src\main\java\com\data\cache\GameCache.java
+D:\cuican\server\data_cache\src\main\java\com\data\cache\GroupCache.java
+D:\cuican\server\data_cache\src\main\java\com\data\bean\GameBean.java
+D:\cuican\server\data_cache\src\main\java\com\data\cache\GroupPlayCache.java
+D:\cuican\server\data_cache\src\main\java\com\data\util\CountUtil.java
+D:\cuican\server\data_cache\src\main\java\com\data\util\ErrorCode.java
+D:\cuican\server\data_cache\src\main\java\com\data\bean\GroupBean.java
+D:\cuican\server\data_cache\src\main\java\com\data\bean\BaseBean.java
+D:\cuican\server\data_cache\src\main\java\com\data\cache\BaseCache.java
+D:\cuican\server\data_cache\src\main\java\com\data\util\Utility.java
+D:\cuican\server\data_cache\src\main\java\com\data\util\ConsumeCode.java
+D:\cuican\server\data_cache\src\main\java\com\data\bean\AccountBean.java
+D:\cuican\server\data_cache\src\main\java\com\data\bean\GroupPlayBean.java
+D:\cuican\server\data_cache\src\main\java\com\data\cache\AccountCache.java
+D:\cuican\server\data_cache\src\main\java\com\data\bean\GroupMemberBean.java
+D:\cuican\server\data_cache\src\main\java\com\data\util\EventType.java
diff --git a/game_common/target/classes/com/game/ActionEvent.class b/game_common/target/classes/com/game/ActionEvent.class
new file mode 100644
index 0000000..d4f05ff
Binary files /dev/null and b/game_common/target/classes/com/game/ActionEvent.class differ
diff --git a/game_common/target/classes/com/game/Constant.class b/game_common/target/classes/com/game/Constant.class
new file mode 100644
index 0000000..a0cc040
Binary files /dev/null and b/game_common/target/classes/com/game/Constant.class differ
diff --git a/game_common/target/classes/com/game/EventController.class b/game_common/target/classes/com/game/EventController.class
new file mode 100644
index 0000000..ff02193
Binary files /dev/null and b/game_common/target/classes/com/game/EventController.class differ
diff --git a/game_common/target/classes/com/game/GPSUtil.class b/game_common/target/classes/com/game/GPSUtil.class
new file mode 100644
index 0000000..b723a3a
Binary files /dev/null and b/game_common/target/classes/com/game/GPSUtil.class differ
diff --git a/game_common/target/classes/com/game/GameController.class b/game_common/target/classes/com/game/GameController.class
new file mode 100644
index 0000000..09f69fc
Binary files /dev/null and b/game_common/target/classes/com/game/GameController.class differ
diff --git a/game_common/target/classes/com/game/GameInterceptor$1.class b/game_common/target/classes/com/game/GameInterceptor$1.class
new file mode 100644
index 0000000..df444e6
Binary files /dev/null and b/game_common/target/classes/com/game/GameInterceptor$1.class differ
diff --git a/game_common/target/classes/com/game/GameInterceptor.class b/game_common/target/classes/com/game/GameInterceptor.class
new file mode 100644
index 0000000..1db8ea5
Binary files /dev/null and b/game_common/target/classes/com/game/GameInterceptor.class differ
diff --git a/game_common/target/classes/com/game/Global.class b/game_common/target/classes/com/game/Global.class
new file mode 100644
index 0000000..a3ee63d
Binary files /dev/null and b/game_common/target/classes/com/game/Global.class differ
diff --git a/game_common/target/classes/com/game/GroupPublisherService.class b/game_common/target/classes/com/game/GroupPublisherService.class
new file mode 100644
index 0000000..bc152e5
Binary files /dev/null and b/game_common/target/classes/com/game/GroupPublisherService.class differ
diff --git a/game_common/target/classes/com/game/MainServer$1.class b/game_common/target/classes/com/game/MainServer$1.class
new file mode 100644
index 0000000..02cc247
Binary files /dev/null and b/game_common/target/classes/com/game/MainServer$1.class differ
diff --git a/game_common/target/classes/com/game/MainServer$2.class b/game_common/target/classes/com/game/MainServer$2.class
new file mode 100644
index 0000000..4fe9df3
Binary files /dev/null and b/game_common/target/classes/com/game/MainServer$2.class differ
diff --git a/game_common/target/classes/com/game/MainServer$GameSetting.class b/game_common/target/classes/com/game/MainServer$GameSetting.class
new file mode 100644
index 0000000..0d7b220
Binary files /dev/null and b/game_common/target/classes/com/game/MainServer$GameSetting.class differ
diff --git a/game_common/target/classes/com/game/MainServer.class b/game_common/target/classes/com/game/MainServer.class
new file mode 100644
index 0000000..89879b3
Binary files /dev/null and b/game_common/target/classes/com/game/MainServer.class differ
diff --git a/game_common/target/classes/com/game/Router.class b/game_common/target/classes/com/game/Router.class
new file mode 100644
index 0000000..9a04288
Binary files /dev/null and b/game_common/target/classes/com/game/Router.class differ
diff --git a/game_common/target/classes/com/game/Util.class b/game_common/target/classes/com/game/Util.class
new file mode 100644
index 0000000..6431bf1
Binary files /dev/null and b/game_common/target/classes/com/game/Util.class differ
diff --git a/game_common/target/classes/com/game/data/BasePlayBack.class b/game_common/target/classes/com/game/data/BasePlayBack.class
new file mode 100644
index 0000000..e1b8e28
Binary files /dev/null and b/game_common/target/classes/com/game/data/BasePlayBack.class differ
diff --git a/game_common/target/classes/com/game/data/Hp.class b/game_common/target/classes/com/game/data/Hp.class
new file mode 100644
index 0000000..735f1a7
Binary files /dev/null and b/game_common/target/classes/com/game/data/Hp.class differ
diff --git a/game_common/target/classes/com/game/data/JoinRoomData.class b/game_common/target/classes/com/game/data/JoinRoomData.class
new file mode 100644
index 0000000..f93619e
Binary files /dev/null and b/game_common/target/classes/com/game/data/JoinRoomData.class differ
diff --git a/game_common/target/classes/com/game/data/Player$1.class b/game_common/target/classes/com/game/data/Player$1.class
new file mode 100644
index 0000000..92222ee
Binary files /dev/null and b/game_common/target/classes/com/game/data/Player$1.class differ
diff --git a/game_common/target/classes/com/game/data/Player$2.class b/game_common/target/classes/com/game/data/Player$2.class
new file mode 100644
index 0000000..e7cbe3b
Binary files /dev/null and b/game_common/target/classes/com/game/data/Player$2.class differ
diff --git a/game_common/target/classes/com/game/data/Player.class b/game_common/target/classes/com/game/data/Player.class
new file mode 100644
index 0000000..0d900c0
Binary files /dev/null and b/game_common/target/classes/com/game/data/Player.class differ
diff --git a/game_common/target/classes/com/game/data/Room.class b/game_common/target/classes/com/game/data/Room.class
new file mode 100644
index 0000000..ab3ccbd
Binary files /dev/null and b/game_common/target/classes/com/game/data/Room.class differ
diff --git a/game_common/target/classes/com/game/data/RoomDismiss$1.class b/game_common/target/classes/com/game/data/RoomDismiss$1.class
new file mode 100644
index 0000000..841db89
Binary files /dev/null and b/game_common/target/classes/com/game/data/RoomDismiss$1.class differ
diff --git a/game_common/target/classes/com/game/data/RoomDismiss.class b/game_common/target/classes/com/game/data/RoomDismiss.class
new file mode 100644
index 0000000..e78b9e9
Binary files /dev/null and b/game_common/target/classes/com/game/data/RoomDismiss.class differ
diff --git a/game_common/target/classes/com/game/data/Score.class b/game_common/target/classes/com/game/data/Score.class
new file mode 100644
index 0000000..52833df
Binary files /dev/null and b/game_common/target/classes/com/game/data/Score.class differ
diff --git a/game_common/target/classes/com/game/data/Timer$ITaskHandler.class b/game_common/target/classes/com/game/data/Timer$ITaskHandler.class
new file mode 100644
index 0000000..d3c0fc5
Binary files /dev/null and b/game_common/target/classes/com/game/data/Timer$ITaskHandler.class differ
diff --git a/game_common/target/classes/com/game/data/Timer.class b/game_common/target/classes/com/game/data/Timer.class
new file mode 100644
index 0000000..4a5e9b1
Binary files /dev/null and b/game_common/target/classes/com/game/data/Timer.class differ
diff --git a/game_common/target/classes/com/game/manager/RoomManager$1.class b/game_common/target/classes/com/game/manager/RoomManager$1.class
new file mode 100644
index 0000000..933bb13
Binary files /dev/null and b/game_common/target/classes/com/game/manager/RoomManager$1.class differ
diff --git a/game_common/target/classes/com/game/manager/RoomManager.class b/game_common/target/classes/com/game/manager/RoomManager.class
new file mode 100644
index 0000000..9bb244a
Binary files /dev/null and b/game_common/target/classes/com/game/manager/RoomManager.class differ
diff --git a/game_common/target/classes/com/game/manager/SessionManager$1.class b/game_common/target/classes/com/game/manager/SessionManager$1.class
new file mode 100644
index 0000000..c4c2334
Binary files /dev/null and b/game_common/target/classes/com/game/manager/SessionManager$1.class differ
diff --git a/game_common/target/classes/com/game/manager/SessionManager.class b/game_common/target/classes/com/game/manager/SessionManager.class
new file mode 100644
index 0000000..594098e
Binary files /dev/null and b/game_common/target/classes/com/game/manager/SessionManager.class differ
diff --git a/game_common/target/classes/com/game/player/state/PlayerEndState.class b/game_common/target/classes/com/game/player/state/PlayerEndState.class
new file mode 100644
index 0000000..137b3a6
Binary files /dev/null and b/game_common/target/classes/com/game/player/state/PlayerEndState.class differ
diff --git a/game_common/target/classes/com/game/player/state/PlayerInitState.class b/game_common/target/classes/com/game/player/state/PlayerInitState.class
new file mode 100644
index 0000000..54a6a67
Binary files /dev/null and b/game_common/target/classes/com/game/player/state/PlayerInitState.class differ
diff --git a/game_common/target/classes/com/game/player/state/PlayerPauseState.class b/game_common/target/classes/com/game/player/state/PlayerPauseState.class
new file mode 100644
index 0000000..b439601
Binary files /dev/null and b/game_common/target/classes/com/game/player/state/PlayerPauseState.class differ
diff --git a/game_common/target/classes/com/game/player/state/PlayerPopupState.class b/game_common/target/classes/com/game/player/state/PlayerPopupState.class
new file mode 100644
index 0000000..3159654
Binary files /dev/null and b/game_common/target/classes/com/game/player/state/PlayerPopupState.class differ
diff --git a/game_common/target/classes/com/game/player/state/PlayerReadyState.class b/game_common/target/classes/com/game/player/state/PlayerReadyState.class
new file mode 100644
index 0000000..3a3ba45
Binary files /dev/null and b/game_common/target/classes/com/game/player/state/PlayerReadyState.class differ
diff --git a/game_common/target/classes/com/game/player/state/PlayerReloadState.class b/game_common/target/classes/com/game/player/state/PlayerReloadState.class
new file mode 100644
index 0000000..9a277da
Binary files /dev/null and b/game_common/target/classes/com/game/player/state/PlayerReloadState.class differ
diff --git a/game_common/target/classes/com/game/player/state/PlayerSpectatorState.class b/game_common/target/classes/com/game/player/state/PlayerSpectatorState.class
new file mode 100644
index 0000000..9ee7947
Binary files /dev/null and b/game_common/target/classes/com/game/player/state/PlayerSpectatorState.class differ
diff --git a/game_common/target/classes/com/game/player/state/PlayerWaitState.class b/game_common/target/classes/com/game/player/state/PlayerWaitState.class
new file mode 100644
index 0000000..911b965
Binary files /dev/null and b/game_common/target/classes/com/game/player/state/PlayerWaitState.class differ
diff --git a/game_common/target/classes/com/game/room/state/RoomDestoryGameState.class b/game_common/target/classes/com/game/room/state/RoomDestoryGameState.class
new file mode 100644
index 0000000..a225420
Binary files /dev/null and b/game_common/target/classes/com/game/room/state/RoomDestoryGameState.class differ
diff --git a/game_common/target/classes/com/game/room/state/RoomEndState.class b/game_common/target/classes/com/game/room/state/RoomEndState.class
new file mode 100644
index 0000000..3eb7673
Binary files /dev/null and b/game_common/target/classes/com/game/room/state/RoomEndState.class differ
diff --git a/game_common/target/classes/com/game/room/state/RoomInitState.class b/game_common/target/classes/com/game/room/state/RoomInitState.class
new file mode 100644
index 0000000..ecfa548
Binary files /dev/null and b/game_common/target/classes/com/game/room/state/RoomInitState.class differ
diff --git a/game_common/target/classes/com/game/room/state/RoomReloadState.class b/game_common/target/classes/com/game/room/state/RoomReloadState.class
new file mode 100644
index 0000000..c7f9f8f
Binary files /dev/null and b/game_common/target/classes/com/game/room/state/RoomReloadState.class differ
diff --git a/game_common/target/classes/com/game/room/state/RoomStartGameState.class b/game_common/target/classes/com/game/room/state/RoomStartGameState.class
new file mode 100644
index 0000000..bef5523
Binary files /dev/null and b/game_common/target/classes/com/game/room/state/RoomStartGameState.class differ
diff --git a/game_common/target/classes/com/game/room/state/RoomWaitState.class b/game_common/target/classes/com/game/room/state/RoomWaitState.class
new file mode 100644
index 0000000..d15c3bd
Binary files /dev/null and b/game_common/target/classes/com/game/room/state/RoomWaitState.class differ
diff --git a/game_common/target/classes/com/game/state/StateBase.class b/game_common/target/classes/com/game/state/StateBase.class
new file mode 100644
index 0000000..cffad09
Binary files /dev/null and b/game_common/target/classes/com/game/state/StateBase.class differ
diff --git a/game_common/target/classes/com/game/state/StateMachine.class b/game_common/target/classes/com/game/state/StateMachine.class
new file mode 100644
index 0000000..f5b2ac3
Binary files /dev/null and b/game_common/target/classes/com/game/state/StateMachine.class differ
diff --git a/game_common/target/game_common-1.0.0.jar b/game_common/target/game_common-1.0.0.jar
new file mode 100644
index 0000000..0c77411
Binary files /dev/null and b/game_common/target/game_common-1.0.0.jar differ
diff --git a/game_common/target/maven-archiver/pom.properties b/game_common/target/maven-archiver/pom.properties
new file mode 100644
index 0000000..2f11a74
--- /dev/null
+++ b/game_common/target/maven-archiver/pom.properties
@@ -0,0 +1,3 @@
+artifactId=game_common
+groupId=com.game
+version=1.0.0
diff --git a/game_common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/game_common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
new file mode 100644
index 0000000..705ad43
--- /dev/null
+++ b/game_common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -0,0 +1,47 @@
+com\game\Constant.class
+com\game\room\state\RoomStartGameState.class
+com\game\data\Score.class
+com\game\player\state\PlayerReadyState.class
+com\game\data\RoomDismiss.class
+com\game\room\state\RoomReloadState.class
+com\game\MainServer$GameSetting.class
+com\game\player\state\PlayerInitState.class
+com\game\data\BasePlayBack.class
+com\game\state\StateBase.class
+com\game\room\state\RoomDestoryGameState.class
+com\game\player\state\PlayerPopupState.class
+com\game\GameController.class
+com\game\Global.class
+com\game\Router.class
+com\game\data\Room.class
+com\game\data\RoomDismiss$1.class
+com\game\manager\SessionManager$1.class
+com\game\manager\RoomManager.class
+com\game\player\state\PlayerSpectatorState.class
+com\game\player\state\PlayerWaitState.class
+com\game\MainServer$2.class
+com\game\GameInterceptor.class
+com\game\state\StateMachine.class
+com\game\manager\RoomManager$1.class
+com\game\GPSUtil.class
+com\game\room\state\RoomWaitState.class
+com\game\room\state\RoomEndState.class
+com\game\data\JoinRoomData.class
+com\game\data\Player$1.class
+com\game\player\state\PlayerReloadState.class
+com\game\GameInterceptor$1.class
+com\game\player\state\PlayerEndState.class
+com\game\ActionEvent.class
+com\game\data\Player.class
+com\game\data\Hp.class
+com\game\manager\SessionManager.class
+com\game\Util.class
+com\game\MainServer.class
+com\game\EventController.class
+com\game\MainServer$1.class
+com\game\GroupPublisherService.class
+com\game\data\Timer$ITaskHandler.class
+com\game\room\state\RoomInitState.class
+com\game\data\Player$2.class
+com\game\player\state\PlayerPauseState.class
+com\game\data\Timer.class
diff --git a/game_common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/game_common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
new file mode 100644
index 0000000..19085dd
--- /dev/null
+++ b/game_common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,37 @@
+D:\cuican\server\game_common\src\main\java\com\game\GPSUtil.java
+D:\cuican\server\game_common\src\main\java\com\game\GameInterceptor.java
+D:\cuican\server\game_common\src\main\java\com\game\data\RoomDismiss.java
+D:\cuican\server\game_common\src\main\java\com\game\Global.java
+D:\cuican\server\game_common\src\main\java\com\game\room\state\RoomDestoryGameState.java
+D:\cuican\server\game_common\src\main\java\com\game\Constant.java
+D:\cuican\server\game_common\src\main\java\com\game\data\Score.java
+D:\cuican\server\game_common\src\main\java\com\game\player\state\PlayerPauseState.java
+D:\cuican\server\game_common\src\main\java\com\game\Router.java
+D:\cuican\server\game_common\src\main\java\com\game\player\state\PlayerReloadState.java
+D:\cuican\server\game_common\src\main\java\com\game\manager\RoomManager.java
+D:\cuican\server\game_common\src\main\java\com\game\room\state\RoomEndState.java
+D:\cuican\server\game_common\src\main\java\com\game\data\Timer.java
+D:\cuican\server\game_common\src\main\java\com\game\EventController.java
+D:\cuican\server\game_common\src\main\java\com\game\state\StateBase.java
+D:\cuican\server\game_common\src\main\java\com\game\room\state\RoomWaitState.java
+D:\cuican\server\game_common\src\main\java\com\game\data\Player.java
+D:\cuican\server\game_common\src\main\java\com\game\player\state\PlayerWaitState.java
+D:\cuican\server\game_common\src\main\java\com\game\state\StateMachine.java
+D:\cuican\server\game_common\src\main\java\com\game\GameController.java
+D:\cuican\server\game_common\src\main\java\com\game\player\state\PlayerEndState.java
+D:\cuican\server\game_common\src\main\java\com\game\room\state\RoomStartGameState.java
+D:\cuican\server\game_common\src\main\java\com\game\GroupPublisherService.java
+D:\cuican\server\game_common\src\main\java\com\game\ActionEvent.java
+D:\cuican\server\game_common\src\main\java\com\game\player\state\PlayerPopupState.java
+D:\cuican\server\game_common\src\main\java\com\game\Util.java
+D:\cuican\server\game_common\src\main\java\com\game\player\state\PlayerSpectatorState.java
+D:\cuican\server\game_common\src\main\java\com\game\data\BasePlayBack.java
+D:\cuican\server\game_common\src\main\java\com\game\manager\SessionManager.java
+D:\cuican\server\game_common\src\main\java\com\game\room\state\RoomReloadState.java
+D:\cuican\server\game_common\src\main\java\com\game\player\state\PlayerInitState.java
+D:\cuican\server\game_common\src\main\java\com\game\MainServer.java
+D:\cuican\server\game_common\src\main\java\com\game\room\state\RoomInitState.java
+D:\cuican\server\game_common\src\main\java\com\game\data\Room.java
+D:\cuican\server\game_common\src\main\java\com\game\data\Hp.java
+D:\cuican\server\game_common\src\main\java\com\game\data\JoinRoomData.java
+D:\cuican\server\game_common\src\main\java\com\game\player\state\PlayerReadyState.java
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/Main.class b/taurus-permanent/target/classes/com/taurus/permanent/Main.class
new file mode 100644
index 0000000..bcd38cb
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/Main.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/TPServer$1.class b/taurus-permanent/target/classes/com/taurus/permanent/TPServer$1.class
new file mode 100644
index 0000000..0fd56d3
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/TPServer$1.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/TPServer$NetworkEvtListener.class b/taurus-permanent/target/classes/com/taurus/permanent/TPServer$NetworkEvtListener.class
new file mode 100644
index 0000000..29cfdd9
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/TPServer$NetworkEvtListener.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/TPServer$TPThreadFactory.class b/taurus-permanent/target/classes/com/taurus/permanent/TPServer$TPThreadFactory.class
new file mode 100644
index 0000000..c97905a
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/TPServer$TPThreadFactory.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/TPServer.class b/taurus-permanent/target/classes/com/taurus/permanent/TPServer.class
new file mode 100644
index 0000000..fa8f3e0
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/TPServer.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/core/BaseCoreService.class b/taurus-permanent/target/classes/com/taurus/permanent/core/BaseCoreService.class
new file mode 100644
index 0000000..e3f82e6
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/core/BaseCoreService.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/core/BitSwarmEngine$1.class b/taurus-permanent/target/classes/com/taurus/permanent/core/BitSwarmEngine$1.class
new file mode 100644
index 0000000..dc5ffe0
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/core/BitSwarmEngine$1.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/core/BitSwarmEngine$PacketWriteWork.class b/taurus-permanent/target/classes/com/taurus/permanent/core/BitSwarmEngine$PacketWriteWork.class
new file mode 100644
index 0000000..daa8f29
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/core/BitSwarmEngine$PacketWriteWork.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/core/BitSwarmEngine.class b/taurus-permanent/target/classes/com/taurus/permanent/core/BitSwarmEngine.class
new file mode 100644
index 0000000..efbac1d
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/core/BitSwarmEngine.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/core/ConnectionFilter.class b/taurus-permanent/target/classes/com/taurus/permanent/core/ConnectionFilter.class
new file mode 100644
index 0000000..c4a2e41
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/core/ConnectionFilter.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/core/DefaultConstants.class b/taurus-permanent/target/classes/com/taurus/permanent/core/DefaultConstants.class
new file mode 100644
index 0000000..40587e8
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/core/DefaultConstants.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/core/IConnectionFilter.class b/taurus-permanent/target/classes/com/taurus/permanent/core/IConnectionFilter.class
new file mode 100644
index 0000000..f73b19d
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/core/IConnectionFilter.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$ExecutorConfig.class b/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$ExecutorConfig.class
new file mode 100644
index 0000000..727245d
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$ExecutorConfig.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$ExtensionConfig.class b/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$ExtensionConfig.class
new file mode 100644
index 0000000..6d94327
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$ExtensionConfig.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$IpFilterConfig.class b/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$IpFilterConfig.class
new file mode 100644
index 0000000..037a2ce
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$IpFilterConfig.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$SocketAddress.class b/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$SocketAddress.class
new file mode 100644
index 0000000..b9c7d30
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$SocketAddress.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$WebSocketConfig.class b/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$WebSocketConfig.class
new file mode 100644
index 0000000..601f73c
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$WebSocketConfig.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig.class b/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig.class
new file mode 100644
index 0000000..9bbe8cc
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/core/ServerState.class b/taurus-permanent/target/classes/com/taurus/permanent/core/ServerState.class
new file mode 100644
index 0000000..17c35c9
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/core/ServerState.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/core/SessionManager$1.class b/taurus-permanent/target/classes/com/taurus/permanent/core/SessionManager$1.class
new file mode 100644
index 0000000..bba2e55
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/core/SessionManager$1.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/core/SessionManager$SessionCleaner.class b/taurus-permanent/target/classes/com/taurus/permanent/core/SessionManager$SessionCleaner.class
new file mode 100644
index 0000000..85b91f1
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/core/SessionManager$SessionCleaner.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/core/SessionManager.class b/taurus-permanent/target/classes/com/taurus/permanent/core/SessionManager.class
new file mode 100644
index 0000000..a04e759
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/core/SessionManager.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/core/SystemController$1.class b/taurus-permanent/target/classes/com/taurus/permanent/core/SystemController$1.class
new file mode 100644
index 0000000..c33e671
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/core/SystemController$1.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/core/SystemController$2.class b/taurus-permanent/target/classes/com/taurus/permanent/core/SystemController$2.class
new file mode 100644
index 0000000..51ab255
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/core/SystemController$2.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/core/SystemController.class b/taurus-permanent/target/classes/com/taurus/permanent/core/SystemController.class
new file mode 100644
index 0000000..e4273de
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/core/SystemController.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/core/TPEvents.class b/taurus-permanent/target/classes/com/taurus/permanent/core/TPEvents.class
new file mode 100644
index 0000000..e2cf056
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/core/TPEvents.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/data/BindableSocket.class b/taurus-permanent/target/classes/com/taurus/permanent/data/BindableSocket.class
new file mode 100644
index 0000000..dfa9fbd
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/data/BindableSocket.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/data/IPacketQueue.class b/taurus-permanent/target/classes/com/taurus/permanent/data/IPacketQueue.class
new file mode 100644
index 0000000..a839197
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/data/IPacketQueue.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/data/ISocketChannel.class b/taurus-permanent/target/classes/com/taurus/permanent/data/ISocketChannel.class
new file mode 100644
index 0000000..71f2370
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/data/ISocketChannel.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/data/NonBlockingPacketQueue.class b/taurus-permanent/target/classes/com/taurus/permanent/data/NonBlockingPacketQueue.class
new file mode 100644
index 0000000..13aabb6
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/data/NonBlockingPacketQueue.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/data/PackDataType.class b/taurus-permanent/target/classes/com/taurus/permanent/data/PackDataType.class
new file mode 100644
index 0000000..1dc926c
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/data/PackDataType.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/data/Packet.class b/taurus-permanent/target/classes/com/taurus/permanent/data/Packet.class
new file mode 100644
index 0000000..58340e4
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/data/Packet.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/data/Session.class b/taurus-permanent/target/classes/com/taurus/permanent/data/Session.class
new file mode 100644
index 0000000..25ddbc9
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/data/Session.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/data/SessionType.class b/taurus-permanent/target/classes/com/taurus/permanent/data/SessionType.class
new file mode 100644
index 0000000..ca9602f
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/data/SessionType.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/io/BinaryIoHandler.class b/taurus-permanent/target/classes/com/taurus/permanent/io/BinaryIoHandler.class
new file mode 100644
index 0000000..5a3a352
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/io/BinaryIoHandler.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/io/IOHandler.class b/taurus-permanent/target/classes/com/taurus/permanent/io/IOHandler.class
new file mode 100644
index 0000000..cf7d569
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/io/IOHandler.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/io/PacketReadState.class b/taurus-permanent/target/classes/com/taurus/permanent/io/PacketReadState.class
new file mode 100644
index 0000000..3ba5680
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/io/PacketReadState.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/io/PendingPacket.class b/taurus-permanent/target/classes/com/taurus/permanent/io/PendingPacket.class
new file mode 100644
index 0000000..4bef9ac
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/io/PendingPacket.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/io/ProcessedPacket.class b/taurus-permanent/target/classes/com/taurus/permanent/io/ProcessedPacket.class
new file mode 100644
index 0000000..a8371b4
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/io/ProcessedPacket.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/io/ProtocolHandler.class b/taurus-permanent/target/classes/com/taurus/permanent/io/ProtocolHandler.class
new file mode 100644
index 0000000..faca5b7
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/io/ProtocolHandler.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/normal/NormalSocketChannel.class b/taurus-permanent/target/classes/com/taurus/permanent/normal/NormalSocketChannel.class
new file mode 100644
index 0000000..db5406e
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/normal/NormalSocketChannel.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/normal/SocketAcceptor.class b/taurus-permanent/target/classes/com/taurus/permanent/normal/SocketAcceptor.class
new file mode 100644
index 0000000..34b2814
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/normal/SocketAcceptor.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/normal/SocketReader$PacketReaderWork.class b/taurus-permanent/target/classes/com/taurus/permanent/normal/SocketReader$PacketReaderWork.class
new file mode 100644
index 0000000..526f75e
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/normal/SocketReader$PacketReaderWork.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/normal/SocketReader.class b/taurus-permanent/target/classes/com/taurus/permanent/normal/SocketReader.class
new file mode 100644
index 0000000..d534d50
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/normal/SocketReader.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/normal/SocketWriter.class b/taurus-permanent/target/classes/com/taurus/permanent/normal/SocketWriter.class
new file mode 100644
index 0000000..6cde0ff
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/normal/SocketWriter.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/util/GhostUserHunter.class b/taurus-permanent/target/classes/com/taurus/permanent/util/GhostUserHunter.class
new file mode 100644
index 0000000..6f57b9d
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/util/GhostUserHunter.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/websocket/UndertowWebSocketChannel.class b/taurus-permanent/target/classes/com/taurus/permanent/websocket/UndertowWebSocketChannel.class
new file mode 100644
index 0000000..3b5ae48
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/websocket/UndertowWebSocketChannel.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/websocket/WebSocketService$WSConnectionListener.class b/taurus-permanent/target/classes/com/taurus/permanent/websocket/WebSocketService$WSConnectionListener.class
new file mode 100644
index 0000000..fd548d1
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/websocket/WebSocketService$WSConnectionListener.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/websocket/WebSocketService$WSListener.class b/taurus-permanent/target/classes/com/taurus/permanent/websocket/WebSocketService$WSListener.class
new file mode 100644
index 0000000..b7211dd
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/websocket/WebSocketService$WSListener.class differ
diff --git a/taurus-permanent/target/classes/com/taurus/permanent/websocket/WebSocketService.class b/taurus-permanent/target/classes/com/taurus/permanent/websocket/WebSocketService.class
new file mode 100644
index 0000000..f068b49
Binary files /dev/null and b/taurus-permanent/target/classes/com/taurus/permanent/websocket/WebSocketService.class differ
diff --git a/taurus-permanent/target/maven-archiver/pom.properties b/taurus-permanent/target/maven-archiver/pom.properties
new file mode 100644
index 0000000..5314af1
--- /dev/null
+++ b/taurus-permanent/target/maven-archiver/pom.properties
@@ -0,0 +1,3 @@
+artifactId=taurus-permanent
+groupId=com.taurus
+version=1.0.1
diff --git a/taurus-permanent/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/taurus-permanent/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
new file mode 100644
index 0000000..01c49fb
--- /dev/null
+++ b/taurus-permanent/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -0,0 +1,50 @@
+com\taurus\permanent\core\ConnectionFilter.class
+com\taurus\permanent\core\SystemController$2.class
+com\taurus\permanent\core\TPEvents.class
+com\taurus\permanent\core\BitSwarmEngine$1.class
+com\taurus\permanent\core\BitSwarmEngine.class
+com\taurus\permanent\core\BitSwarmEngine$PacketWriteWork.class
+com\taurus\permanent\io\IOHandler.class
+com\taurus\permanent\io\BinaryIoHandler.class
+com\taurus\permanent\data\Session.class
+com\taurus\permanent\websocket\WebSocketService.class
+com\taurus\permanent\TPServer.class
+com\taurus\permanent\io\PacketReadState.class
+com\taurus\permanent\core\BaseCoreService.class
+com\taurus\permanent\data\NonBlockingPacketQueue.class
+com\taurus\permanent\data\Packet.class
+com\taurus\permanent\core\ServerConfig$IpFilterConfig.class
+com\taurus\permanent\TPServer$1.class
+com\taurus\permanent\core\SessionManager$SessionCleaner.class
+com\taurus\permanent\websocket\WebSocketService$WSListener.class
+com\taurus\permanent\io\ProcessedPacket.class
+com\taurus\permanent\core\ServerConfig.class
+com\taurus\permanent\data\IPacketQueue.class
+com\taurus\permanent\util\GhostUserHunter.class
+com\taurus\permanent\websocket\WebSocketService$WSConnectionListener.class
+com\taurus\permanent\Main.class
+com\taurus\permanent\core\SessionManager$1.class
+com\taurus\permanent\normal\NormalSocketChannel.class
+com\taurus\permanent\TPServer$TPThreadFactory.class
+com\taurus\permanent\data\ISocketChannel.class
+com\taurus\permanent\io\ProtocolHandler.class
+com\taurus\permanent\normal\SocketReader.class
+com\taurus\permanent\core\SessionManager.class
+com\taurus\permanent\core\ServerConfig$ExtensionConfig.class
+com\taurus\permanent\data\PackDataType.class
+com\taurus\permanent\normal\SocketAcceptor.class
+com\taurus\permanent\core\SystemController$1.class
+com\taurus\permanent\data\BindableSocket.class
+com\taurus\permanent\io\PendingPacket.class
+com\taurus\permanent\core\ServerConfig$WebSocketConfig.class
+com\taurus\permanent\core\ServerConfig$SocketAddress.class
+com\taurus\permanent\core\ServerConfig$ExecutorConfig.class
+com\taurus\permanent\core\SystemController.class
+com\taurus\permanent\websocket\UndertowWebSocketChannel.class
+com\taurus\permanent\normal\SocketReader$PacketReaderWork.class
+com\taurus\permanent\core\IConnectionFilter.class
+com\taurus\permanent\normal\SocketWriter.class
+com\taurus\permanent\core\DefaultConstants.class
+com\taurus\permanent\TPServer$NetworkEvtListener.class
+com\taurus\permanent\core\ServerState.class
+com\taurus\permanent\data\SessionType.class
diff --git a/taurus-permanent/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/taurus-permanent/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
new file mode 100644
index 0000000..ba73987
--- /dev/null
+++ b/taurus-permanent/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,33 @@
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\core\SystemController.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\io\ProcessedPacket.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\util\GhostUserHunter.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\Main.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\normal\SocketAcceptor.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\data\NonBlockingPacketQueue.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\data\SessionType.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\normal\SocketReader.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\data\IPacketQueue.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\data\PackDataType.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\io\PendingPacket.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\normal\SocketWriter.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\core\ServerConfig.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\data\ISocketChannel.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\TPServer.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\io\PacketReadState.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\core\TPEvents.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\normal\NormalSocketChannel.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\data\Session.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\websocket\UndertowWebSocketChannel.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\core\IConnectionFilter.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\data\BindableSocket.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\data\Packet.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\io\IOHandler.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\core\ConnectionFilter.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\core\DefaultConstants.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\core\ServerState.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\core\SessionManager.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\io\ProtocolHandler.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\core\BaseCoreService.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\core\BitSwarmEngine.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\websocket\WebSocketService.java
+D:\cuican\server\taurus-server\taurus-permanent\src\main\java\com\taurus\permanent\io\BinaryIoHandler.java
diff --git a/taurus-permanent/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/taurus-permanent/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
new file mode 100644
index 0000000..a99516d
--- /dev/null
+++ b/taurus-permanent/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
@@ -0,0 +1,3 @@
+com\taurus\T1Controller.class
+com\taurus\TestExtension.class
+com\taurus\T2Controller.class
diff --git a/taurus-permanent/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/taurus-permanent/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
new file mode 100644
index 0000000..afefdc5
--- /dev/null
+++ b/taurus-permanent/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
@@ -0,0 +1,3 @@
+D:\cuican\server\taurus-server\taurus-permanent\src\test\java\com\taurus\T1Controller.java
+D:\cuican\server\taurus-server\taurus-permanent\src\test\java\com\taurus\T2Controller.java
+D:\cuican\server\taurus-server\taurus-permanent\src\test\java\com\taurus\TestExtension.java
diff --git a/taurus-permanent/target/surefire-reports/2026-06-16T00-56-20_309.dumpstream b/taurus-permanent/target/surefire-reports/2026-06-16T00-56-20_309.dumpstream
new file mode 100644
index 0000000..b65f890
--- /dev/null
+++ b/taurus-permanent/target/surefire-reports/2026-06-16T00-56-20_309.dumpstream
@@ -0,0 +1,5 @@
+# Created at 2026-06-16T00:56:21.373
+Boot Manifest-JAR contains absolute paths in classpath 'D:\cuican\server\taurus-server\taurus-permanent\target\test-classes'
+Hint: -Djdk.net.URLClassPath.disableClassPathURLCheck=true
+'other' has different root
+
diff --git a/taurus-permanent/target/surefire-reports/TEST-com.taurus.TestExtension.xml b/taurus-permanent/target/surefire-reports/TEST-com.taurus.TestExtension.xml
new file mode 100644
index 0000000..dc8c962
--- /dev/null
+++ b/taurus-permanent/target/surefire-reports/TEST-com.taurus.TestExtension.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/taurus-permanent/target/surefire-reports/com.taurus.TestExtension.txt b/taurus-permanent/target/surefire-reports/com.taurus.TestExtension.txt
new file mode 100644
index 0000000..65ebd11
--- /dev/null
+++ b/taurus-permanent/target/surefire-reports/com.taurus.TestExtension.txt
@@ -0,0 +1,4 @@
+-------------------------------------------------------------------------------
+Test set: com.taurus.TestExtension
+-------------------------------------------------------------------------------
+Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.004 s -- in com.taurus.TestExtension
diff --git a/taurus-permanent/target/taurus-permanent-1.0.1.jar b/taurus-permanent/target/taurus-permanent-1.0.1.jar
new file mode 100644
index 0000000..f024577
Binary files /dev/null and b/taurus-permanent/target/taurus-permanent-1.0.1.jar differ
diff --git a/taurus-permanent/target/test-classes/com/taurus/T1Controller.class b/taurus-permanent/target/test-classes/com/taurus/T1Controller.class
new file mode 100644
index 0000000..4e8fff3
Binary files /dev/null and b/taurus-permanent/target/test-classes/com/taurus/T1Controller.class differ
diff --git a/taurus-permanent/target/test-classes/com/taurus/T2Controller.class b/taurus-permanent/target/test-classes/com/taurus/T2Controller.class
new file mode 100644
index 0000000..dcf7ddc
Binary files /dev/null and b/taurus-permanent/target/test-classes/com/taurus/T2Controller.class differ
diff --git a/taurus-permanent/target/test-classes/com/taurus/TestExtension.class b/taurus-permanent/target/test-classes/com/taurus/TestExtension.class
new file mode 100644
index 0000000..84476ce
Binary files /dev/null and b/taurus-permanent/target/test-classes/com/taurus/TestExtension.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/entity/ITArray.class b/taurus-server/taurus-core/target/classes/com/taurus/core/entity/ITArray.class
new file mode 100644
index 0000000..4248a86
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/entity/ITArray.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/entity/ITObject.class b/taurus-server/taurus-core/target/classes/com/taurus/core/entity/ITObject.class
new file mode 100644
index 0000000..33e5760
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/entity/ITObject.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/entity/TArray.class b/taurus-server/taurus-core/target/classes/com/taurus/core/entity/TArray.class
new file mode 100644
index 0000000..66433c8
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/entity/TArray.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/entity/TArrayLite.class b/taurus-server/taurus-core/target/classes/com/taurus/core/entity/TArrayLite.class
new file mode 100644
index 0000000..77ed16d
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/entity/TArrayLite.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/entity/TDataSerializer$1.class b/taurus-server/taurus-core/target/classes/com/taurus/core/entity/TDataSerializer$1.class
new file mode 100644
index 0000000..328ff00
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/entity/TDataSerializer$1.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/entity/TDataSerializer.class b/taurus-server/taurus-core/target/classes/com/taurus/core/entity/TDataSerializer.class
new file mode 100644
index 0000000..d685d43
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/entity/TDataSerializer.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/entity/TDataType.class b/taurus-server/taurus-core/target/classes/com/taurus/core/entity/TDataType.class
new file mode 100644
index 0000000..36c6047
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/entity/TDataType.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/entity/TDataWrapper.class b/taurus-server/taurus-core/target/classes/com/taurus/core/entity/TDataWrapper.class
new file mode 100644
index 0000000..29e42a2
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/entity/TDataWrapper.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/entity/TObject.class b/taurus-server/taurus-core/target/classes/com/taurus/core/entity/TObject.class
new file mode 100644
index 0000000..98927bd
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/entity/TObject.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/entity/TObjectLite.class b/taurus-server/taurus-core/target/classes/com/taurus/core/entity/TObjectLite.class
new file mode 100644
index 0000000..5374daf
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/entity/TObjectLite.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/events/Event.class b/taurus-server/taurus-core/target/classes/com/taurus/core/events/Event.class
new file mode 100644
index 0000000..fda71b2
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/events/Event.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/events/EventDispatcher$EventRunner.class b/taurus-server/taurus-core/target/classes/com/taurus/core/events/EventDispatcher$EventRunner.class
new file mode 100644
index 0000000..97bb1aa
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/events/EventDispatcher$EventRunner.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/events/EventDispatcher.class b/taurus-server/taurus-core/target/classes/com/taurus/core/events/EventDispatcher.class
new file mode 100644
index 0000000..890897b
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/events/EventDispatcher.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/events/EventManager.class b/taurus-server/taurus-core/target/classes/com/taurus/core/events/EventManager.class
new file mode 100644
index 0000000..d414e3a
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/events/EventManager.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/events/IEventDispatcher.class b/taurus-server/taurus-core/target/classes/com/taurus/core/events/IEventDispatcher.class
new file mode 100644
index 0000000..3727ae7
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/events/IEventDispatcher.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/events/IEventListener.class b/taurus-server/taurus-core/target/classes/com/taurus/core/events/IEventListener.class
new file mode 100644
index 0000000..fe738b1
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/events/IEventListener.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/IPlugin.class b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/IPlugin.class
new file mode 100644
index 0000000..c7b7019
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/IPlugin.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/PluginService.class b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/PluginService.class
new file mode 100644
index 0000000..fc57b9c
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/PluginService.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/database/DataBase.class b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/database/DataBase.class
new file mode 100644
index 0000000..73f4d57
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/database/DataBase.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/database/DataBasePlugin$DatabaseConfig$DbConfig.class b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/database/DataBasePlugin$DatabaseConfig$DbConfig.class
new file mode 100644
index 0000000..ee676c9
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/database/DataBasePlugin$DatabaseConfig$DbConfig.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/database/DataBasePlugin$DatabaseConfig$PoolConfig.class b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/database/DataBasePlugin$DatabaseConfig$PoolConfig.class
new file mode 100644
index 0000000..e91dccd
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/database/DataBasePlugin$DatabaseConfig$PoolConfig.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/database/DataBasePlugin$DatabaseConfig.class b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/database/DataBasePlugin$DatabaseConfig.class
new file mode 100644
index 0000000..817d073
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/database/DataBasePlugin$DatabaseConfig.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/database/DataBasePlugin.class b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/database/DataBasePlugin.class
new file mode 100644
index 0000000..b8e172e
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/database/DataBasePlugin.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/database/Db$1.class b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/database/Db$1.class
new file mode 100644
index 0000000..cf8bdd2
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/database/Db$1.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/database/Db.class b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/database/Db.class
new file mode 100644
index 0000000..540d004
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/database/Db.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/redis/Cache.class b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/redis/Cache.class
new file mode 100644
index 0000000..dae1b81
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/redis/Cache.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/redis/Redis.class b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/redis/Redis.class
new file mode 100644
index 0000000..840ddd0
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/redis/Redis.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/redis/RedisLock.class b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/redis/RedisLock.class
new file mode 100644
index 0000000..19f916f
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/redis/RedisLock.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/redis/RedisPlugin$RedisConfig$InfoConfig.class b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/redis/RedisPlugin$RedisConfig$InfoConfig.class
new file mode 100644
index 0000000..a5a1afd
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/redis/RedisPlugin$RedisConfig$InfoConfig.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/redis/RedisPlugin$RedisConfig$PoolConfig.class b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/redis/RedisPlugin$RedisConfig$PoolConfig.class
new file mode 100644
index 0000000..9d96723
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/redis/RedisPlugin$RedisConfig$PoolConfig.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/redis/RedisPlugin$RedisConfig.class b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/redis/RedisPlugin$RedisConfig.class
new file mode 100644
index 0000000..74e7a81
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/redis/RedisPlugin$RedisConfig.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/redis/RedisPlugin.class b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/redis/RedisPlugin.class
new file mode 100644
index 0000000..734b189
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/plugin/redis/RedisPlugin.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/routes/Action.class b/taurus-server/taurus-core/target/classes/com/taurus/core/routes/Action.class
new file mode 100644
index 0000000..fdc67dc
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/routes/Action.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/routes/ActionKey.class b/taurus-server/taurus-core/target/classes/com/taurus/core/routes/ActionKey.class
new file mode 100644
index 0000000..c149098
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/routes/ActionKey.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/routes/ActionMapping.class b/taurus-server/taurus-core/target/classes/com/taurus/core/routes/ActionMapping.class
new file mode 100644
index 0000000..bbcc39c
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/routes/ActionMapping.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/routes/Extension.class b/taurus-server/taurus-core/target/classes/com/taurus/core/routes/Extension.class
new file mode 100644
index 0000000..bb2053c
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/routes/Extension.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/routes/IController.class b/taurus-server/taurus-core/target/classes/com/taurus/core/routes/IController.class
new file mode 100644
index 0000000..23e384e
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/routes/IController.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/routes/Interceptor.class b/taurus-server/taurus-core/target/classes/com/taurus/core/routes/Interceptor.class
new file mode 100644
index 0000000..b52e913
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/routes/Interceptor.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/routes/Routes$Route.class b/taurus-server/taurus-core/target/classes/com/taurus/core/routes/Routes$Route.class
new file mode 100644
index 0000000..1755662
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/routes/Routes$Route.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/routes/Routes.class b/taurus-server/taurus-core/target/classes/com/taurus/core/routes/Routes.class
new file mode 100644
index 0000000..948bcc7
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/routes/Routes.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/service/AbstractService.class b/taurus-server/taurus-core/target/classes/com/taurus/core/service/AbstractService.class
new file mode 100644
index 0000000..7a2fe9d
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/service/AbstractService.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/service/IService.class b/taurus-server/taurus-core/target/classes/com/taurus/core/service/IService.class
new file mode 100644
index 0000000..7c49f6b
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/service/IService.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/util/Base64.class b/taurus-server/taurus-core/target/classes/com/taurus/core/util/Base64.class
new file mode 100644
index 0000000..d0399ba
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/util/Base64.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/util/ByteArray.class b/taurus-server/taurus-core/target/classes/com/taurus/core/util/ByteArray.class
new file mode 100644
index 0000000..968a218
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/util/ByteArray.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/util/DateUtils.class b/taurus-server/taurus-core/target/classes/com/taurus/core/util/DateUtils.class
new file mode 100644
index 0000000..50d1627
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/util/DateUtils.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/util/FileUtil.class b/taurus-server/taurus-core/target/classes/com/taurus/core/util/FileUtil.class
new file mode 100644
index 0000000..7b2a9d9
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/util/FileUtil.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/util/FixedIndexThreadPool$Work.class b/taurus-server/taurus-core/target/classes/com/taurus/core/util/FixedIndexThreadPool$Work.class
new file mode 100644
index 0000000..abd9ea1
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/util/FixedIndexThreadPool$Work.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/util/FixedIndexThreadPool.class b/taurus-server/taurus-core/target/classes/com/taurus/core/util/FixedIndexThreadPool.class
new file mode 100644
index 0000000..1cf3dc0
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/util/FixedIndexThreadPool.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/util/ICallback.class b/taurus-server/taurus-core/target/classes/com/taurus/core/util/ICallback.class
new file mode 100644
index 0000000..1dadfd7
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/util/ICallback.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/util/Logger$1.class b/taurus-server/taurus-core/target/classes/com/taurus/core/util/Logger$1.class
new file mode 100644
index 0000000..8f8c2c6
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/util/Logger$1.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/util/Logger$Log4j.class b/taurus-server/taurus-core/target/classes/com/taurus/core/util/Logger$Log4j.class
new file mode 100644
index 0000000..32479ff
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/util/Logger$Log4j.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/util/Logger$LoggerLevel.class b/taurus-server/taurus-core/target/classes/com/taurus/core/util/Logger$LoggerLevel.class
new file mode 100644
index 0000000..5432ca5
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/util/Logger$LoggerLevel.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/util/Logger.class b/taurus-server/taurus-core/target/classes/com/taurus/core/util/Logger.class
new file mode 100644
index 0000000..b2b99aa
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/util/Logger.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/util/MD5.class b/taurus-server/taurus-core/target/classes/com/taurus/core/util/MD5.class
new file mode 100644
index 0000000..0892342
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/util/MD5.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/util/SHA1.class b/taurus-server/taurus-core/target/classes/com/taurus/core/util/SHA1.class
new file mode 100644
index 0000000..93e26cc
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/util/SHA1.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/util/StringUtil.class b/taurus-server/taurus-core/target/classes/com/taurus/core/util/StringUtil.class
new file mode 100644
index 0000000..b0df8fe
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/util/StringUtil.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/util/Utils.class b/taurus-server/taurus-core/target/classes/com/taurus/core/util/Utils.class
new file mode 100644
index 0000000..76cdf0b
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/util/Utils.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/util/json/JSONParser$Token.class b/taurus-server/taurus-core/target/classes/com/taurus/core/util/json/JSONParser$Token.class
new file mode 100644
index 0000000..271a7b2
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/util/json/JSONParser$Token.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/util/json/JSONParser.class b/taurus-server/taurus-core/target/classes/com/taurus/core/util/json/JSONParser.class
new file mode 100644
index 0000000..6d1e0ac
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/util/json/JSONParser.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/util/json/JSONUtils.class b/taurus-server/taurus-core/target/classes/com/taurus/core/util/json/JSONUtils.class
new file mode 100644
index 0000000..cb0d75a
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/util/json/JSONUtils.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/util/json/JSONWriter.class b/taurus-server/taurus-core/target/classes/com/taurus/core/util/json/JSONWriter.class
new file mode 100644
index 0000000..f63532d
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/util/json/JSONWriter.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/util/task/ITaskHandler.class b/taurus-server/taurus-core/target/classes/com/taurus/core/util/task/ITaskHandler.class
new file mode 100644
index 0000000..fcb8e04
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/util/task/ITaskHandler.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/util/task/Task.class b/taurus-server/taurus-core/target/classes/com/taurus/core/util/task/Task.class
new file mode 100644
index 0000000..90bbe00
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/util/task/Task.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/util/task/TaskScheduler$ScheduledTask.class b/taurus-server/taurus-core/target/classes/com/taurus/core/util/task/TaskScheduler$ScheduledTask.class
new file mode 100644
index 0000000..05c5b41
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/util/task/TaskScheduler$ScheduledTask.class differ
diff --git a/taurus-server/taurus-core/target/classes/com/taurus/core/util/task/TaskScheduler.class b/taurus-server/taurus-core/target/classes/com/taurus/core/util/task/TaskScheduler.class
new file mode 100644
index 0000000..a6cecfb
Binary files /dev/null and b/taurus-server/taurus-core/target/classes/com/taurus/core/util/task/TaskScheduler.class differ
diff --git a/taurus-server/taurus-core/target/maven-archiver/pom.properties b/taurus-server/taurus-core/target/maven-archiver/pom.properties
new file mode 100644
index 0000000..f5deb46
--- /dev/null
+++ b/taurus-server/taurus-core/target/maven-archiver/pom.properties
@@ -0,0 +1,5 @@
+#Generated by Maven
+#Tue Jun 16 00:56:20 CST 2026
+version=1.0.1
+groupId=com.taurus
+artifactId=taurus-core
diff --git a/taurus-server/taurus-core/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/taurus-server/taurus-core/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
new file mode 100644
index 0000000..943f688
--- /dev/null
+++ b/taurus-server/taurus-core/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -0,0 +1,65 @@
+com\taurus\core\plugin\database\DataBasePlugin$DatabaseConfig.class
+com\taurus\core\plugin\redis\Redis.class
+com\taurus\core\util\Logger$1.class
+com\taurus\core\entity\TObject.class
+com\taurus\core\service\IService.class
+com\taurus\core\events\EventManager.class
+com\taurus\core\util\ICallback.class
+com\taurus\core\util\task\TaskScheduler$ScheduledTask.class
+com\taurus\core\plugin\IPlugin.class
+com\taurus\core\entity\TDataSerializer.class
+com\taurus\core\routes\Routes.class
+com\taurus\core\routes\Interceptor.class
+com\taurus\core\entity\TArrayLite.class
+com\taurus\core\util\json\JSONParser.class
+com\taurus\core\util\ByteArray.class
+com\taurus\core\util\Logger$LoggerLevel.class
+com\taurus\core\plugin\redis\RedisPlugin.class
+com\taurus\core\routes\IController.class
+com\taurus\core\plugin\redis\RedisPlugin$RedisConfig.class
+com\taurus\core\plugin\redis\RedisPlugin$RedisConfig$InfoConfig.class
+com\taurus\core\util\FileUtil.class
+com\taurus\core\util\FixedIndexThreadPool.class
+com\taurus\core\entity\ITArray.class
+com\taurus\core\util\MD5.class
+com\taurus\core\util\json\JSONParser$Token.class
+com\taurus\core\routes\Action.class
+com\taurus\core\entity\ITObject.class
+com\taurus\core\plugin\database\DataBasePlugin$DatabaseConfig$DbConfig.class
+com\taurus\core\routes\Extension.class
+com\taurus\core\entity\TDataWrapper.class
+com\taurus\core\entity\TArray.class
+com\taurus\core\util\json\JSONUtils.class
+com\taurus\core\util\Logger.class
+com\taurus\core\util\FixedIndexThreadPool$Work.class
+com\taurus\core\routes\Routes$Route.class
+com\taurus\core\events\Event.class
+com\taurus\core\service\AbstractService.class
+com\taurus\core\util\Utils.class
+com\taurus\core\plugin\database\Db$1.class
+com\taurus\core\util\task\ITaskHandler.class
+com\taurus\core\entity\TDataType.class
+com\taurus\core\plugin\redis\RedisPlugin$RedisConfig$PoolConfig.class
+com\taurus\core\util\task\TaskScheduler.class
+com\taurus\core\util\task\Task.class
+com\taurus\core\events\IEventListener.class
+com\taurus\core\plugin\database\Db.class
+com\taurus\core\routes\ActionMapping.class
+com\taurus\core\util\Logger$Log4j.class
+com\taurus\core\plugin\redis\RedisLock.class
+com\taurus\core\util\StringUtil.class
+com\taurus\core\util\DateUtils.class
+com\taurus\core\plugin\database\DataBase.class
+com\taurus\core\util\SHA1.class
+com\taurus\core\util\json\JSONWriter.class
+com\taurus\core\plugin\redis\Cache.class
+com\taurus\core\events\IEventDispatcher.class
+com\taurus\core\routes\ActionKey.class
+com\taurus\core\events\EventDispatcher$EventRunner.class
+com\taurus\core\plugin\database\DataBasePlugin.class
+com\taurus\core\plugin\database\DataBasePlugin$DatabaseConfig$PoolConfig.class
+com\taurus\core\plugin\PluginService.class
+com\taurus\core\util\Base64.class
+com\taurus\core\entity\TDataSerializer$1.class
+com\taurus\core\events\EventDispatcher.class
+com\taurus\core\entity\TObjectLite.class
diff --git a/taurus-server/taurus-core/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/taurus-server/taurus-core/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
new file mode 100644
index 0000000..8226492
--- /dev/null
+++ b/taurus-server/taurus-core/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,49 @@
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\util\ByteArray.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\util\json\JSONParser.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\plugin\redis\Cache.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\routes\ActionMapping.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\util\StringUtil.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\entity\TObject.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\events\EventManager.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\util\Base64.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\events\EventDispatcher.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\plugin\IPlugin.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\util\MD5.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\entity\TArray.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\routes\ActionKey.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\plugin\PluginService.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\plugin\redis\RedisLock.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\util\task\ITaskHandler.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\plugin\redis\RedisPlugin.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\service\AbstractService.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\service\IService.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\util\DateUtils.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\util\task\TaskScheduler.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\util\Logger.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\plugin\database\DataBasePlugin.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\entity\TDataType.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\util\SHA1.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\entity\TDataSerializer.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\events\Event.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\entity\TArrayLite.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\entity\ITArray.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\plugin\database\Db.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\routes\Interceptor.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\events\IEventDispatcher.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\util\FixedIndexThreadPool.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\util\FileUtil.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\routes\IController.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\entity\TDataWrapper.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\util\task\Task.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\entity\TObjectLite.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\util\Utils.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\entity\ITObject.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\routes\Extension.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\plugin\redis\Redis.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\util\json\JSONUtils.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\util\json\JSONWriter.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\events\IEventListener.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\util\ICallback.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\plugin\database\DataBase.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\routes\Action.java
+D:\cuican\server\taurus-server\taurus-core\src\main\java\com\taurus\core\routes\Routes.java
diff --git a/taurus-server/taurus-core/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/taurus-server/taurus-core/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
new file mode 100644
index 0000000..2596d66
--- /dev/null
+++ b/taurus-server/taurus-core/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
@@ -0,0 +1,3 @@
+Test$1.class
+Test$Data.class
+Test.class
diff --git a/taurus-server/taurus-core/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/taurus-server/taurus-core/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
new file mode 100644
index 0000000..6fbafbe
--- /dev/null
+++ b/taurus-server/taurus-core/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
@@ -0,0 +1 @@
+D:\cuican\server\taurus-server\taurus-core\src\test\java\Test.java
diff --git a/taurus-server/taurus-core/target/surefire-reports/2026-06-16T00-56-20_309.dumpstream b/taurus-server/taurus-core/target/surefire-reports/2026-06-16T00-56-20_309.dumpstream
new file mode 100644
index 0000000..24d05f6
--- /dev/null
+++ b/taurus-server/taurus-core/target/surefire-reports/2026-06-16T00-56-20_309.dumpstream
@@ -0,0 +1,5 @@
+# Created at 2026-06-16T00:56:20.569
+Boot Manifest-JAR contains absolute paths in classpath 'D:\cuican\server\taurus-server\taurus-core\target\test-classes'
+Hint: -Djdk.net.URLClassPath.disableClassPathURLCheck=true
+'other' has different root
+
diff --git a/taurus-server/taurus-core/target/surefire-reports/TEST-Test.xml b/taurus-server/taurus-core/target/surefire-reports/TEST-Test.xml
new file mode 100644
index 0000000..f3fdccb
--- /dev/null
+++ b/taurus-server/taurus-core/target/surefire-reports/TEST-Test.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/taurus-server/taurus-core/target/surefire-reports/Test.txt b/taurus-server/taurus-core/target/surefire-reports/Test.txt
new file mode 100644
index 0000000..f55c212
--- /dev/null
+++ b/taurus-server/taurus-core/target/surefire-reports/Test.txt
@@ -0,0 +1,4 @@
+-------------------------------------------------------------------------------
+Test set: Test
+-------------------------------------------------------------------------------
+Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.004 s -- in Test
diff --git a/taurus-server/taurus-core/target/taurus-core-1.0.1-sources.jar b/taurus-server/taurus-core/target/taurus-core-1.0.1-sources.jar
new file mode 100644
index 0000000..9b3153e
Binary files /dev/null and b/taurus-server/taurus-core/target/taurus-core-1.0.1-sources.jar differ
diff --git a/taurus-server/taurus-core/target/taurus-core-1.0.1.jar b/taurus-server/taurus-core/target/taurus-core-1.0.1.jar
new file mode 100644
index 0000000..41b6c73
Binary files /dev/null and b/taurus-server/taurus-core/target/taurus-core-1.0.1.jar differ
diff --git a/taurus-server/taurus-core/target/test-classes/Test$1.class b/taurus-server/taurus-core/target/test-classes/Test$1.class
new file mode 100644
index 0000000..104e527
Binary files /dev/null and b/taurus-server/taurus-core/target/test-classes/Test$1.class differ
diff --git a/taurus-server/taurus-core/target/test-classes/Test$Data.class b/taurus-server/taurus-core/target/test-classes/Test$Data.class
new file mode 100644
index 0000000..e870d44
Binary files /dev/null and b/taurus-server/taurus-core/target/test-classes/Test$Data.class differ
diff --git a/taurus-server/taurus-core/target/test-classes/Test.class b/taurus-server/taurus-core/target/test-classes/Test.class
new file mode 100644
index 0000000..a315571
Binary files /dev/null and b/taurus-server/taurus-core/target/test-classes/Test.class differ
diff --git a/taurus-server/taurus-permanent/config/taurus-core.xml b/taurus-server/taurus-permanent/config/taurus-core.xml
new file mode 100644
index 0000000..1a2267f
--- /dev/null
+++ b/taurus-server/taurus-permanent/config/taurus-core.xml
@@ -0,0 +1,97 @@
+
+
+ log4j.properties
+
+
+ database
+ com.taurus.core.plugin.database.DataBasePlugin
+
+
+
+ 80
+
+ 2
+
+ 5
+
+ -1
+
+ true
+
+ true
+
+ true
+
+ select 1
+
+ 180000
+
+ 60000
+
+ 30000
+
+ false
+
+ 300000
+
+ false
+
+ -1
+
+
+
+
+ db1
+ com.mysql.jdbc.Driver
+ jdbc:mysql://192.168.0.11:6060/db_haoyou
+ proto_ff
+ 37du_game
+
+
+
+
+
+ redis
+ com.taurus.core.plugin.redis.RedisPlugin
+
+
+
+ 80
+
+ 20
+
+ 5
+
+ -1
+
+ true
+
+ true
+
+ true
+
+ 100
+
+ 60000
+
+ 30000
+
+ 1800000
+
+ true
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/taurus-server/taurus-permanent/config/taurus-permanent.xml b/taurus-server/taurus-permanent/config/taurus-permanent.xml
new file mode 100644
index 0000000..6c629f3
--- /dev/null
+++ b/taurus-server/taurus-permanent/config/taurus-permanent.xml
@@ -0,0 +1,75 @@
+
+
+ 4
+
+ 100
+
+ Heap
+
+ Heap
+
+ 524288
+
+ 1024
+
+ 32768
+
+ 160
+
+
+ 2
+ 3
+ 3
+
+
+ true
+
+ 15
+
+
+
+
+
+
+
+
+
+ 1.2.3.4
+
+
+ 127.0.0.1
+
+ 10000
+
+
+
+ true
+ 0.0.0.0
+ 8080
+
+
+
+
+ extension - test
+ com.taurus.TestExtension
+
+
+
+
+ Sys
+ 4
+ 16
+ 60000
+ 20000
+
+
+
+
+ Ext
+ 4
+ 16
+ 60000
+ 20000
+
+
+
\ No newline at end of file
diff --git a/taurus-server/taurus-permanent/pom.xml b/taurus-server/taurus-permanent/pom.xml
new file mode 100644
index 0000000..7fa00c5
--- /dev/null
+++ b/taurus-server/taurus-permanent/pom.xml
@@ -0,0 +1,36 @@
+
+
+ 4.0.0
+
+ com.taurus
+ taurus-server
+ 1.0.1
+
+ jar
+ taurus-permanent
+ 1.0.1
+
+
+
+
+ junit
+ junit
+
+
+
+
+ com.taurus
+ taurus-core
+
+
+
+
+ io.undertow
+ undertow-core
+ 2.0.16.Final
+
+
+
diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/Main.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/Main.java
new file mode 100644
index 0000000..9156073
--- /dev/null
+++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/Main.java
@@ -0,0 +1,9 @@
+package com.taurus.permanent;
+
+public class Main {
+
+ public static void main(String[] args) {
+ TPServer taurus = TPServer.me();
+ taurus.start();
+ }
+}
diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/TPServer.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/TPServer.java
new file mode 100644
index 0000000..b7b2c9f
--- /dev/null
+++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/TPServer.java
@@ -0,0 +1,319 @@
+package com.taurus.permanent;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.util.List;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import com.taurus.core.events.Event;
+import com.taurus.core.events.EventManager;
+import com.taurus.core.events.IEventListener;
+import com.taurus.core.plugin.PluginService;
+import com.taurus.core.routes.Extension;
+import com.taurus.core.util.Logger;
+import com.taurus.core.util.StringUtil;
+import com.taurus.core.util.task.TaskScheduler;
+import com.taurus.permanent.core.BitSwarmEngine;
+import com.taurus.permanent.core.DefaultConstants;
+import com.taurus.permanent.core.ServerConfig;
+import com.taurus.permanent.core.ServerConfig.ExecutorConfig;
+import com.taurus.permanent.core.ServerState;
+import com.taurus.permanent.core.SessionManager;
+import com.taurus.permanent.core.SystemController;
+import com.taurus.permanent.core.TPEvents;
+import com.taurus.permanent.data.Session;
+import com.taurus.permanent.util.GhostUserHunter;
+
+/**
+ * The server main class.
+ *
+ *
+ *
+ */
+public final class TPServer {
+ /**
+ * The server version.
+ */
+ private final String version = "1.0.1";
+ /**
+ * The server class instance.
+ */
+ private static TPServer _instance = null;
+ private final BitSwarmEngine bitSwarmEngine;
+ private final Logger log;
+ private volatile ServerState state = ServerState.STARTING;
+ private volatile boolean initialized = false;
+ private volatile long serverStartTime;
+ private ServerConfig config;
+ private IEventListener networkEvtListener;
+ private ScheduledThreadPoolExecutor timerPool;
+ private TaskScheduler taskScheduler;
+ private EventManager eventManager;
+ private GhostUserHunter ghostUserHunter;
+ private SystemController controller;
+ private Extension extension;
+ private ThreadPoolExecutor systemExecutor;
+ private ThreadPoolExecutor extensionExecutor;
+
+ /**
+ * get main instance
+ */
+ public static TPServer me() {
+ if (_instance == null) {
+ _instance = new TPServer();
+ }
+ return _instance;
+ }
+
+ private TPServer() {
+ bitSwarmEngine = BitSwarmEngine.getInstance();
+
+ networkEvtListener = new NetworkEvtListener();
+ timerPool = new ScheduledThreadPoolExecutor(1);
+ log = Logger.getLogger(getClass());
+
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ private static final ServerConfig loadServerSettings() throws Exception {
+ FileInputStream is = new FileInputStream(DefaultConstants.SERVER_CFG_FILE);
+ ServerConfig config = new ServerConfig();
+ config.load(is);
+ return config;
+ }
+
+ public void start() {
+ System.out.println("\n==============================================================================\n" +
+ ">>Begin start taurus-permanent server....\n"
+ + "============================================================================== \n");
+ if (!initialized) {
+ initialize();
+ }
+
+ try {
+
+ PluginService.me().loadConfig();
+ log.info("Load taurus-core config finish");
+
+ this.config = loadServerSettings();
+ initExecutors();
+
+ this.taskScheduler = new TaskScheduler();
+ this.taskScheduler.init(null);
+
+ this.eventManager = new EventManager(systemExecutor);
+ eventManager.init(null);
+
+ timerPool.setCorePoolSize(config.timerThreadPoolSize);
+ bitSwarmEngine.init(null);
+
+ log.info("\n\n==============================================================================\n" +
+ ">>Init Extension...\n"+
+ "============================================================================== \n");
+ controller = new SystemController();
+ ghostUserHunter = new GhostUserHunter();
+ extension = instanceExtension();
+ controller.init(null);
+ extension.onStart();
+
+ state = ServerState.STARTED;
+ log.info("\n\n==============================================================================\n" +
+ ">>Server(" + version + ") ready!\n"
+ + "============================================================================== \n");
+
+ serverStartTime = System.currentTimeMillis();
+ } catch (FileNotFoundException e) {
+ log.error("Not find taurus-core.xml and taurus-permanent.xml", e);
+ } catch (Exception e) {
+ log.error("Server start exception!", e);
+ }
+ }
+
+ private void initExecutors() {
+ final ExecutorConfig sys_cfg = this.config.systemThreadPoolConfig;
+ this.systemExecutor = new ThreadPoolExecutor(sys_cfg.corePoolSize, sys_cfg.maxPoolSize, sys_cfg.keepAliveTime, TimeUnit.MILLISECONDS,
+ new LinkedBlockingQueue(sys_cfg.maxQueueSize), new TPThreadFactory(sys_cfg.name));
+
+ final ExecutorConfig ext_cfg = this.config.extensionThreadPoolConfig;
+ this.extensionExecutor = new ThreadPoolExecutor(ext_cfg.corePoolSize, ext_cfg.maxPoolSize, ext_cfg.keepAliveTime, TimeUnit.MILLISECONDS,
+ new LinkedBlockingQueue(ext_cfg.maxQueueSize), new TPThreadFactory(ext_cfg.name));
+ }
+
+ /**
+ * shut down server.
+ */
+ public void shutdown() {
+ try {
+ log.info("Server shutdown!");
+ List> awaitingExecution = timerPool.shutdownNow();
+ log.info("stopping timer pool: " + awaitingExecution.size());
+
+ bitSwarmEngine.destroy(null);
+ eventManager.destroy(null);
+ this.controller.destroy(null);
+ extension.onStop();
+ } catch (Exception e) {
+ log.error("shut down exception!", e);
+ }
+ }
+
+ public ScheduledThreadPoolExecutor getTimerPool() {
+ return timerPool;
+ }
+
+ public TaskScheduler getTaskScheduler() {
+ return taskScheduler;
+ }
+
+ public ThreadPoolExecutor getSystemExecutor() {
+ return systemExecutor;
+ }
+
+ public ThreadPoolExecutor getExtensionExecutor() {
+ return extensionExecutor;
+ }
+
+ public EventManager getEventManager() {
+ return eventManager;
+ }
+
+ public SessionManager getSessionManager() {
+ return bitSwarmEngine.getSessionManager();
+ }
+
+ public SystemController getController() {
+ return controller;
+ }
+
+ public Extension getExtension() {
+ return extension;
+ }
+
+ public ServerState getState() {
+ return state;
+ }
+
+ public ServerConfig getConfig() {
+ return config;
+ }
+
+ /**
+ * 获取服务器启动时间
+ *
+ * @return
+ */
+ public long getUptime() {
+ if (serverStartTime == 0L) {
+ throw new IllegalStateException("Server not ready yet, cannot provide uptime!");
+ }
+ return System.currentTimeMillis() - serverStartTime;
+ }
+
+ private void initialize() {
+ if (initialized) {
+ throw new IllegalStateException("SmartFoxServer engine already initialized!");
+ }
+ bitSwarmEngine.addEventListener(TPEvents.SESSION_LOST, networkEvtListener);
+ bitSwarmEngine.addEventListener(TPEvents.SESSION_IDLE, networkEvtListener);
+ bitSwarmEngine.addEventListener(TPEvents.SESSION_IDLE_CHECK_COMPLETE, networkEvtListener);
+
+ initialized = true;
+ }
+
+ private Extension instanceExtension() {
+ ServerConfig.ExtensionConfig extensionConfig = config.extensionConfig;
+ if (StringUtil.isEmpty(extensionConfig.className)) {
+ throw new RuntimeException("Extension className parameter is missing!");
+ }
+ if (StringUtil.isEmpty(extensionConfig.name)) {
+ throw new RuntimeException("Extension name parameter is missing!");
+ }
+ Extension extension = null;
+ try {
+ Class> extensionClass = Class.forName(extensionConfig.className);
+ if (!Extension.class.isAssignableFrom(extensionClass)) {
+ throw new RuntimeException("Extension does not extends Extension: " + extensionConfig.name);
+ }
+ extension = (Extension) extensionClass.newInstance();
+ extension.setName(extensionConfig.name);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException("Illegal access while instantiating class: " + extensionConfig.className);
+ } catch (InstantiationException e) {
+ throw new RuntimeException("Cannot instantiate class: " + extensionConfig.className);
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException("Class not found: " + extensionConfig.className);
+ }
+ return extension;
+ }
+
+ private void onSessionClosed(Session session) {
+ controller.disconnect(session);
+ }
+
+ private void onSessionIdle(Session idleSession) {
+ controller.disconnect(idleSession);
+ }
+
+ /**
+ * session 网络事件监听
+ */
+ private class NetworkEvtListener implements IEventListener {
+ private NetworkEvtListener() {
+ }
+
+ public void handleEvent(Event event) {
+ String evtName = event.getName();
+
+ if (evtName.equals(TPEvents.SESSION_LOST)) {
+ Session session = (Session) event.getParameter(TPEvents.PARAM_SESSION);
+
+ if (session == null) {
+ throw new RuntimeException("session is null!");
+ }
+ onSessionClosed(session);
+ } else if ((evtName.equals(TPEvents.SESSION_IDLE_CHECK_COMPLETE))) {
+ ghostUserHunter.hunt();
+ } else if (evtName.equals(TPEvents.SESSION_IDLE)) {
+ onSessionIdle((Session) event.getParameter(TPEvents.PARAM_SESSION));
+ }
+ }
+ }
+
+ private static final class TPThreadFactory implements ThreadFactory {
+ private static final AtomicInteger POOL_ID;
+ private static final String THREAD_BASE_NAME = "%s:%s";
+ private final AtomicInteger threadId;
+ private final String poolName;
+
+ static {
+ POOL_ID = new AtomicInteger(0);
+ }
+
+ public TPThreadFactory(final String poolName) {
+ this.threadId = new AtomicInteger(1);
+ this.poolName = poolName;
+ TPThreadFactory.POOL_ID.incrementAndGet();
+ }
+
+ @Override
+ public Thread newThread(final Runnable r) {
+ final Thread t = new Thread(r,
+ String.format(THREAD_BASE_NAME, (this.poolName != null) ? this.poolName : TPThreadFactory.POOL_ID.get(), this.threadId.getAndIncrement()));
+ if (t.isDaemon()) {
+ t.setDaemon(false);
+ }
+ if (t.getPriority() != 5) {
+ t.setPriority(5);
+ }
+ return t;
+ }
+ }
+}
diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/BaseCoreService.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/BaseCoreService.java
new file mode 100644
index 0000000..c750488
--- /dev/null
+++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/BaseCoreService.java
@@ -0,0 +1,46 @@
+package com.taurus.permanent.core;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+import com.taurus.core.events.EventDispatcher;
+import com.taurus.core.service.IService;
+
+/**
+ * BaseCoreService
+ *
+ */
+public abstract class BaseCoreService extends EventDispatcher implements IService {
+ private static final AtomicInteger serviceId = new AtomicInteger(0);
+ private static final String DEFAULT_NAME = "Service-";
+ protected String name;
+ protected volatile boolean active = false;
+
+ public void init(Object o) {
+ name = getServiceId();
+ active = true;
+ }
+
+ public void destroy(Object o) {
+ active = false;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public boolean isActive() {
+ return active;
+ }
+
+ public String toString() {
+ return "[Core Service]: " + name + ", State: " + (isActive() ? "active" : "not active");
+ }
+
+ protected static String getServiceId() {
+ return DEFAULT_NAME + serviceId.getAndIncrement();
+ }
+}
diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/BitSwarmEngine.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/BitSwarmEngine.java
new file mode 100644
index 0000000..e733060
--- /dev/null
+++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/BitSwarmEngine.java
@@ -0,0 +1,337 @@
+package com.taurus.permanent.core;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import com.taurus.core.events.Event;
+import com.taurus.core.events.IEventListener;
+import com.taurus.core.service.IService;
+import com.taurus.core.util.FixedIndexThreadPool;
+import com.taurus.core.util.Logger;
+import com.taurus.permanent.TPServer;
+import com.taurus.permanent.core.ServerConfig.SocketAddress;
+import com.taurus.permanent.data.BindableSocket;
+import com.taurus.permanent.data.Packet;
+import com.taurus.permanent.data.Session;
+import com.taurus.permanent.data.SessionType;
+import com.taurus.permanent.io.IOHandler;
+import com.taurus.permanent.io.ProtocolHandler;
+import com.taurus.permanent.normal.SocketAcceptor;
+import com.taurus.permanent.normal.SocketReader;
+import com.taurus.permanent.normal.SocketWriter;
+import com.taurus.permanent.websocket.WebSocketService;
+
+/**
+ * 核心网络字节群处理类
+ *
+ */
+public final class BitSwarmEngine extends BaseCoreService {
+ private static BitSwarmEngine __engine__;
+ private SocketAcceptor socketAcceptor;
+ private SocketReader socketReader;
+ private SocketWriter socketWriter;
+
+ private Logger logger;
+ private ServerConfig config;
+ private SessionManager sessionManager;
+ private volatile boolean inited = false;
+ private Map coreServicesByName;
+ private Map configByService;
+ private IEventListener eventHandler;
+ private WebSocketService webSocketService;
+ private ProtocolHandler protocolHandler;
+ private ConnectionFilter connectionFilter;
+ private FixedIndexThreadPool threadPool;
+
+ public static BitSwarmEngine getInstance() {
+ if (__engine__ == null) {
+ __engine__ = new BitSwarmEngine();
+ }
+ return __engine__;
+ }
+
+ private BitSwarmEngine() {
+ setName("BitSwarmEngine");
+ }
+
+ private void initializeServerEngine() {
+ logger = Logger.getLogger(BitSwarmEngine.class);
+ this.config = TPServer.me().getConfig();
+ inited = true;
+ }
+
+
+ private final void bootSequence() throws Exception {
+ startCoreServices();
+
+ bindSockets(config.socketAddresses);
+ for (IService service : coreServicesByName.values()) {
+ if (service != null) {
+ service.init(configByService.get(service));
+ }
+ }
+ }
+
+ private final void setConnectionFilterConfig() {
+ for (String blockedIp : config.ipFilter.addressBlackList) {
+ this.connectionFilter.addBannedAddress(blockedIp);
+ }
+
+ for (String allowedIp : config.ipFilter.addressWhiteList) {
+ this.connectionFilter.addWhiteListAddress(allowedIp);
+ }
+
+ this.connectionFilter.setMaxConnectionsPerIp(config.ipFilter.maxConnectionsPerAddress);
+ }
+
+ /**
+ * write response packet. no blocking
+ * @param response
+ */
+ public void write(Packet response) {
+ try {
+ if (this.config.webSocketConfig.isActive) {
+ final List webSocketRecipients = new ArrayList();
+ final List socketRecipients = new ArrayList();
+ for (final Session session : response.getRecipients()) {
+ if (session.getType() == SessionType.WEBSOCKET) {
+ webSocketRecipients.add(session);
+ }
+ else {
+ socketRecipients.add(session);
+ }
+ }
+ if (webSocketRecipients.size() > 0) {
+ response.setRecipients(socketRecipients);
+ final Packet webSocketResponse = response.clone();
+ webSocketResponse.setRecipients(webSocketRecipients);
+ if (response.getId() != SystemController.ACTION_PINGPONG) {
+ long index = Thread.currentThread().getId();
+ this.threadPool.execute((int) index, webSocketResponse);
+ } else {
+ writeToWebSocket(response);
+ }
+ }
+ }
+ }finally {
+ if (response.getId() != SystemController.ACTION_PINGPONG) {
+ long index = Thread.currentThread().getId();
+ this.threadPool.execute((int) index, response);
+ } else {
+ writeToSocket(response);
+ }
+ }
+
+ }
+
+ /**
+ * write response packet. no blocking
+ * @param response 广播服,没有前后顺序的需求,需要尽可能的把包分发给不同的线程
+ */
+ public void write(Packet response, int weightId) {
+ if (weightId == 0)
+ {
+ weightId = (int)(Math.random() * 1000);
+ }
+ try {
+ if (this.config.webSocketConfig.isActive) {
+ final List webSocketRecipients = new ArrayList();
+ final List socketRecipients = new ArrayList();
+ for (final Session session : response.getRecipients()) {
+ if (session.getType() == SessionType.WEBSOCKET) {
+ webSocketRecipients.add(session);
+ }
+ else {
+ socketRecipients.add(session);
+ }
+ }
+ if (webSocketRecipients.size() > 0) {
+ response.setRecipients(socketRecipients);
+ final Packet webSocketResponse = response.clone();
+ webSocketResponse.setRecipients(webSocketRecipients);
+ if (response.getId() != SystemController.ACTION_PINGPONG) {
+ this.threadPool.execute(weightId, webSocketResponse);
+ } else {
+ writeToWebSocket(response);
+ }
+ }
+ }
+ }finally {
+ if (response.getId() != SystemController.ACTION_PINGPONG) {
+ this.threadPool.execute(weightId, response);
+ } else {
+ writeToSocket(response);
+ }
+ }
+
+ }
+
+ private void writeToSocket(Packet res) {
+ socketWriter.getIOHandler().onDataWrite(res);
+ }
+
+ private void writeToWebSocket(Packet res) {
+ webSocketService.onDataWrite(res);
+ }
+
+
+ private void startCoreServices() throws Exception {
+ sessionManager = SessionManager.getInstance();
+ sessionManager.setName(DefaultConstants.SERVICE_SESSION_MANAGER);
+
+ socketReader = new SocketReader(config.socketReaderThreadPoolSize);
+ // instance io handler
+ IOHandler ioHandler = new IOHandler();
+ socketReader.setIoHandler(ioHandler);
+
+ // instance socket acceptor
+ socketAcceptor = new SocketAcceptor(config.socketAcceptorThreadPoolSize);
+ // instance socket writer
+ socketWriter = new SocketWriter(config.socketWriterThreadPoolSize);
+ socketWriter.setIOHandler(ioHandler);
+ threadPool = new FixedIndexThreadPool(config.socketWriterThreadPoolSize, "PacketWrite", PacketWriteWork.class);
+
+ if(config.webSocketConfig.isActive) {
+ webSocketService = new WebSocketService();
+ webSocketService.setName(DefaultConstants.SERVICE_WEB_SOCKET);
+ coreServicesByName.put(DefaultConstants.SERVICE_WEB_SOCKET, webSocketService);
+ }
+
+ socketAcceptor.setName(DefaultConstants.SERVICE_SOCKET_ACCEPTOR);
+ socketReader.setName(DefaultConstants.SERVICE_SOCKET_READER);
+ socketWriter.setName(DefaultConstants.SERVICE_SOCKET_WRITER);
+
+ coreServicesByName.put(DefaultConstants.SERVICE_SESSION_MANAGER, sessionManager);
+ coreServicesByName.put(DefaultConstants.SERVICE_SOCKET_ACCEPTOR, socketAcceptor);
+ coreServicesByName.put(DefaultConstants.SERVICE_SOCKET_READER, socketReader);
+ coreServicesByName.put(DefaultConstants.SERVICE_SOCKET_WRITER, socketWriter);
+
+ }
+
+ private void stopCoreServices() throws Exception {
+ socketWriter.destroy(null);
+ socketReader.destroy(null);
+ if(webSocketService!=null) {
+ webSocketService.destroy(null);
+ }
+ int pw_count = threadPool.shutdown();
+ logger.info("PacketWrite stopped. Unprocessed tasks: " + pw_count);
+ Thread.sleep(2000L);
+
+ sessionManager.destroy(null);
+ socketAcceptor.destroy(null);
+ }
+
+ private void bindSockets(List bindableSockets) {
+ for (SocketAddress socketCfg : bindableSockets) {
+ try {
+ this.socketAcceptor.bindSocket(socketCfg);
+ } catch (IOException e) {
+ logger.error(e);
+ logger.warn("Was not able to bind socket: " + socketCfg);
+ }
+ }
+
+ List sockets = socketAcceptor.getBoundSockets();
+ String message = "Listening Sockets: ";
+ for (BindableSocket socket : sockets) {
+ message = message + socket.toString() + " ";
+ }
+ logger.info(message);
+ }
+
+ public IService getServiceByName(String serviceName) {
+ return coreServicesByName.get(serviceName);
+ }
+
+ public SocketAcceptor getSocketAcceptor() {
+ return this.socketAcceptor;
+ }
+
+ public SocketReader getSocketReader() {
+ return this.socketReader;
+ }
+
+ public SocketWriter getSocketWriter() {
+ return this.socketWriter;
+ }
+
+ public ProtocolHandler getProtocolHandler() {
+ return this.protocolHandler;
+ }
+
+ public Logger getLogger() {
+ return this.logger;
+ }
+
+ public void setLogger(Logger logger) {
+ this.logger = logger;
+ }
+
+ public ServerConfig getConfig() {
+ return this.config;
+ }
+
+ public ConnectionFilter getConnectionFilter() {
+ return connectionFilter;
+ }
+
+ public SessionManager getSessionManager() {
+ return this.sessionManager;
+ }
+
+ public void init(Object o) {
+ if (!inited) {
+ initializeServerEngine();
+ }
+ logger.info("Start Bit Swarm Engine!");
+
+ eventHandler = new IEventListener() {
+ public void handleEvent(Event event) {
+ dispatchEvent(event);
+ }
+ };
+
+ protocolHandler = new ProtocolHandler();
+ connectionFilter = new ConnectionFilter();
+ setConnectionFilterConfig();
+ coreServicesByName = new ConcurrentHashMap();
+ configByService = new HashMap();
+
+ try {
+ bootSequence();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ socketReader.addEventListener(TPEvents.SESSION_LOST, this.eventHandler);
+ }
+
+ public void destroy(Object o) {
+ try {
+ stopCoreServices();
+ } catch (Exception e) {
+ logger.error("Destroy exception!\n",e);
+ }
+ }
+
+ public static final class PacketWriteWork extends FixedIndexThreadPool.Work {
+
+ @Override
+ protected void handlerTask(Object task) throws Exception {
+ Packet packet = (Packet) task;
+ List list = packet.getRecipients();
+ if(list.size() > 0) {
+ SessionType type = list.get(0).getType();
+ if(type == SessionType.WEBSOCKET) {
+ BitSwarmEngine.getInstance().writeToWebSocket(packet);
+ }else {
+ BitSwarmEngine.getInstance().writeToSocket(packet);
+ }
+ }
+ }
+ }
+}
diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/ConnectionFilter.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/ConnectionFilter.java
new file mode 100644
index 0000000..e42fa07
--- /dev/null
+++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/ConnectionFilter.java
@@ -0,0 +1,159 @@
+package com.taurus.permanent.core;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import com.taurus.core.util.Logger;
+
+
+/**
+ * ip连接过滤
+ *
+ */
+public class ConnectionFilter {
+ private final Set addressWhiteList;
+ private final Set bannedAddresses;
+ private final ConcurrentMap addressMap;
+ private int maxConnectionsPerIp = 10;
+ private Logger logger;
+
+ public ConnectionFilter() {
+ this.addressWhiteList = new HashSet();
+ this.bannedAddresses = new HashSet();
+ this.addressMap = new ConcurrentHashMap();
+ logger = Logger.getLogger(ConnectionFilter.class);
+ }
+ /**
+ * 获取所有黑名单列表
+ */
+ public void addBannedAddress(String ipAddress) {
+ synchronized (bannedAddresses) {
+ bannedAddresses.add(ipAddress);
+ }
+ }
+
+ /**
+ * 获取所有白名单列表
+ */
+ public void addWhiteListAddress(String ipAddress) {
+ synchronized (this.addressWhiteList) {
+ this.addressWhiteList.add(ipAddress);
+ }
+ }
+
+ /**
+ * 获取所有黑名单列表
+ */
+ public String[] getBannedAddresses() {
+ String[] set = (String[]) null;
+
+ synchronized (this.bannedAddresses) {
+ set = new String[bannedAddresses.size()];
+ set = (String[]) bannedAddresses.toArray(set);
+ }
+
+ return set;
+ }
+
+ /**
+ * 获取每个IP最大的连接数
+ */
+ public int getMaxConnectionsPerIp() {
+ return this.maxConnectionsPerIp;
+ }
+
+ /**
+ * 获取白名单列表
+ */
+ public String[] getWhiteListAddresses() {
+ String[] set = (String[]) null;
+
+ synchronized (this.addressWhiteList) {
+ set = new String[this.addressWhiteList.size()];
+ set = (String[]) this.addressWhiteList.toArray(set);
+ }
+
+ return set;
+ }
+
+ public void removeAddress(String ipAddress) {
+ synchronized (this.addressMap) {
+ AtomicInteger count = (AtomicInteger) this.addressMap.get(ipAddress);
+
+ if (count != null) {
+ int value = count.decrementAndGet();
+
+ if (value == 0)
+ this.addressMap.remove(ipAddress);
+ }
+ }
+ }
+
+ /**
+ * 移除黑名单IP地址
+ */
+ public void removeBannedAddress(String ipAddress) {
+ synchronized (this.bannedAddresses) {
+ this.bannedAddresses.remove(ipAddress);
+ }
+ }
+
+ /**
+ * 移除白名单IP地址
+ */
+ public void removeWhiteListAddress(String ipAddress) {
+ synchronized (this.addressWhiteList) {
+ this.addressWhiteList.remove(ipAddress);
+ }
+ }
+
+ /**
+ * 获取每个IP最大连接数
+ */
+ public void setMaxConnectionsPerIp(int max) {
+ this.maxConnectionsPerIp = max;
+ }
+
+ public boolean validateAndAddAddress(String ipAddress) {
+ synchronized (this.addressWhiteList) {
+ if (this.addressWhiteList.contains(ipAddress)) {
+ return true;
+ }
+ }
+
+ if (isAddressBanned(ipAddress)) {
+ logger.warn("Ip Address: " + ipAddress + " is banned!");
+ return false;
+ }
+
+ synchronized (this.addressMap) {
+ AtomicInteger count = (AtomicInteger) addressMap.get(ipAddress);
+
+ if ((count != null) && (count.intValue() >= maxConnectionsPerIp)) {
+ logger.warn("Refused connection. Ip Address: " + ipAddress + " has reached maximum allowed connections.");
+ return false;
+ }
+
+ if (count == null) {
+ count = new AtomicInteger(1);
+ this.addressMap.put(ipAddress, count);
+ } else {
+ count.incrementAndGet();
+ }
+ }
+ return true;
+ }
+
+ private boolean isAddressBanned(String ip) {
+ boolean isBanned = false;
+
+ synchronized (this.bannedAddresses) {
+ isBanned = this.bannedAddresses.contains(ip);
+ }
+
+ return isBanned;
+ }
+}
diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/DefaultConstants.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/DefaultConstants.java
new file mode 100644
index 0000000..1e389fc
--- /dev/null
+++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/DefaultConstants.java
@@ -0,0 +1,20 @@
+package com.taurus.permanent.core;
+
+/**
+ * 常量表
+ *
+ */
+public final class DefaultConstants {
+ public static String SERVER_CFG_FILE = "config/taurus-permanent.xml";
+
+
+ public static final String SERVICE_SOCKET_ACCEPTOR = "socketAcceptor";
+ public static final String SERVICE_SOCKET_READER = "socketReader";
+ public static final String SERVICE_SOCKET_WRITER = "socketWriter";
+ public static final String SERVICE_SESSION_MANAGER = "sessionManager";
+ public static final String SERVICE_WEB_SOCKET = "webSocket";
+
+
+ public static final String SESSION_SELECTION_KEY = "SessionSelectionKey";
+
+}
diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/IConnectionFilter.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/IConnectionFilter.java
new file mode 100644
index 0000000..e3f4124
--- /dev/null
+++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/IConnectionFilter.java
@@ -0,0 +1,61 @@
+package com.taurus.permanent.core;
+
+
+/**
+ * ip连接过滤通用接口
+ *
+ */
+public interface IConnectionFilter {
+ /**
+ * 添加黑名单IP地址
+ * @param ipAddress
+ */
+ public void addBannedAddress(String ipAddress);
+
+ /**
+ * 移除黑名单IP地址
+ * @param ipAddress
+ */
+ public void removeBannedAddress(String ipAddress);
+
+ /**
+ * 获取所有黑名单列表
+ * @return
+ */
+ public String[] getBannedAddresses();
+
+
+ public boolean validateAndAddAddress(String ipAddress);
+
+ public void removeAddress(String ipAddress);
+
+ /**
+ * 添加白名单地址
+ * @param ipAddress
+ */
+ public void addWhiteListAddress(String ipAddress);
+
+ /**
+ * 移除白名单地址
+ * @param ipAddress
+ */
+ public void removeWhiteListAddress(String ipAddress);
+
+ /**
+ * 获取白名单列表
+ * @return
+ */
+ public String[] getWhiteListAddresses();
+
+ /**
+ * 获取每个IP最大的连接数
+ * @return
+ */
+ public int getMaxConnectionsPerIp();
+
+ /**
+ * 设置每个IP最大的连接数
+ * @param max
+ */
+ public void setMaxConnectionsPerIp(int max);
+}
diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/ServerConfig.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/ServerConfig.java
new file mode 100644
index 0000000..1bc194d
--- /dev/null
+++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/ServerConfig.java
@@ -0,0 +1,181 @@
+package com.taurus.permanent.core;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.jdom.Document;
+import org.jdom.Element;
+import org.jdom.input.SAXBuilder;
+
+/**
+ * 服务器配置信息
+ *
+ */
+public class ServerConfig {
+ public volatile List socketAddresses = new ArrayList();
+ public volatile IpFilterConfig ipFilter = new IpFilterConfig();
+ public volatile int timerThreadPoolSize = 1;
+ public volatile int protocolCompression = 512;
+
+ public String readBufferType = "HEAP";
+ public String writeBufferType = "HEAP";
+ public int maxPacketSize = 4096;
+ public int maxReadBufferSize = 1024;
+ public int maxWriteBufferSize = 32768;
+ public int socketAcceptorThreadPoolSize = 1;
+ public int socketReaderThreadPoolSize = 1;
+ public int socketWriterThreadPoolSize = 1;
+ public int sessionPacketQueueSize = 120;
+ public int sessionTimeout = 15;
+ public boolean tcpNoDelay = false;
+
+ public ExecutorConfig systemThreadPoolConfig = new ExecutorConfig();
+ public ExecutorConfig extensionThreadPoolConfig = new ExecutorConfig();
+ public ExtensionConfig extensionConfig = new ExtensionConfig();
+ public WebSocketConfig webSocketConfig = new WebSocketConfig();
+
+ /**
+ * ip过滤设置
+ *
+ */
+ public static final class IpFilterConfig {
+ public List addressBlackList = new ArrayList();
+ public List addressWhiteList = new ArrayList();
+ public volatile int maxConnectionsPerAddress = 99999;
+ }
+
+ /**
+ * server ip_port绑定
+ *
+ */
+ public static final class SocketAddress {
+ public static final String TYPE_UDP = "UDP";
+ public static final String TYPE_TCP = "TCP";
+ public String address = "127.0.0.1";
+ public int port = 9339;
+ public String type = TYPE_TCP;
+
+ public String toString() {
+ return String.format("[%s]%s:%d", type, address, port);
+ }
+ }
+
+ /**
+ * Taurus Thread pool config
+ *
+ *
+ */
+ public static final class ExecutorConfig {
+ /**
+ * 线程池名称
+ */
+ public String name;
+ /**
+ * 核心线程大小
+ */
+ public int corePoolSize=4;
+ /**
+ * 最大线程大小
+ */
+ public int maxPoolSize=16;
+ /**
+ * 线程最大空闲时间(毫秒)
+ */
+ public int keepAliveTime =60000;
+ /**
+ * 最大队列大小
+ */
+ public int maxQueueSize=20000;
+ }
+
+ /**
+ * 自定义启动控制设置
+ *
+ *
+ */
+ public static final class ExtensionConfig {
+ public String name = "";
+ public String className = "";
+ }
+
+ /**
+ * web socket
+ *
+ *
+ */
+ public static final class WebSocketConfig {
+ public boolean isActive = true;
+ public String address = "0.0.0.0";
+ public int port = 8080;
+ }
+
+ private static final void loadThreadPoolConfig(Element em,ExecutorConfig config) {
+ config.name = em.getChildTextTrim("name");
+ config.corePoolSize = Integer.parseInt(em.getChildTextTrim("corePoolSize"));
+ config.maxPoolSize = Integer.parseInt(em.getChildTextTrim("maxPoolSize"));
+ config.keepAliveTime = Integer.parseInt(em.getChildTextTrim("keepAliveTime"));
+ config.maxQueueSize = Integer.parseInt(em.getChildTextTrim("maxQueueSize"));
+ }
+
+ public final void load(InputStream is) throws Exception{
+ SAXBuilder builder = new SAXBuilder();
+ Document document = builder.build(is);
+ Element root = document.getRootElement();
+
+ this.timerThreadPoolSize = Integer.parseInt(root.getChildTextTrim("timerThreadPoolSize"));
+ this.protocolCompression = Integer.parseInt(root.getChildTextTrim("protocolCompression"));
+ this.readBufferType = root.getChildTextTrim("readBufferType");
+ this.writeBufferType = root.getChildTextTrim("writeBufferType");
+ this.maxPacketSize = Integer.parseInt(root.getChildTextTrim("maxPacketSize"));
+ this.maxReadBufferSize = Integer.parseInt(root.getChildTextTrim("maxReadBufferSize"));
+ this.maxWriteBufferSize = Integer.parseInt(root.getChildTextTrim("maxWriteBufferSize"));
+ this.socketAcceptorThreadPoolSize = Integer.parseInt(root.getChildTextTrim("socketAcceptorThreadPoolSize"));
+ this.socketReaderThreadPoolSize = Integer.parseInt(root.getChildTextTrim("socketReaderThreadPoolSize"));
+ this.socketWriterThreadPoolSize = Integer.parseInt(root.getChildTextTrim("socketWriterThreadPoolSize"));
+ this.maxPacketSize = Integer.parseInt(root.getChildTextTrim("maxPacketSize"));
+ this.sessionPacketQueueSize = Integer.parseInt(root.getChildTextTrim("sessionPacketQueueSize"));
+ this.sessionTimeout = Integer.parseInt(root.getChildTextTrim("sessionTimeout"));
+ this.tcpNoDelay = Boolean.parseBoolean(root.getChildTextTrim("tcpNoDelay"));
+
+ Element addressesEm = root.getChild("socketAddresses");
+ Iterator> itr = (addressesEm.getChildren("socket")).iterator();
+ while(itr.hasNext()) {
+ Element socketEm = (Element)itr.next();
+ SocketAddress sa = new SocketAddress();
+ sa.address = socketEm.getAttributeValue("address", "0.0.0.0");
+ sa.port = Integer.parseInt(socketEm.getAttributeValue("port", "9339"));
+ sa.type = socketEm.getAttributeValue("type", SocketAddress.TYPE_TCP);
+ socketAddresses.add(sa);
+ }
+
+
+ Element ipFilterEm = root.getChild("ipFilter");
+ Element addressBlackListEm = ipFilterEm.getChild("addressBlackList");
+ itr = (addressBlackListEm.getChildren("string")).iterator();
+ while(itr.hasNext()) {
+ Element socketEm = (Element)itr.next();
+ ipFilter.addressBlackList.add(socketEm.getTextTrim());
+ }
+ Element addressWhiteListEm = ipFilterEm.getChild("addressWhiteList");
+ itr = (addressWhiteListEm.getChildren("string")).iterator();
+ while(itr.hasNext()) {
+ Element socketEm = (Element)itr.next();
+ ipFilter.addressWhiteList.add(socketEm.getTextTrim());
+ }
+ ipFilter.maxConnectionsPerAddress = Integer.parseInt(ipFilterEm.getChildTextTrim("maxConnectionsPerAddress"));
+
+ Element extensionConfigEm = root.getChild("extensionConfig");
+ extensionConfig.className = extensionConfigEm.getChildTextTrim("className");
+ extensionConfig.name = extensionConfigEm.getChildTextTrim("name");
+
+
+ Element webSocketEm = root.getChild("webSocket");
+ webSocketConfig.isActive = Boolean.parseBoolean(webSocketEm.getChildTextTrim("isActive"));
+
+ loadThreadPoolConfig(root.getChild("systemThreadPoolConfig"),systemThreadPoolConfig);
+
+ loadThreadPoolConfig(root.getChild("extensionThreadPoolConfig"),extensionThreadPoolConfig);
+ }
+}
diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/ServerState.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/ServerState.java
new file mode 100644
index 0000000..8b8e1d1
--- /dev/null
+++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/ServerState.java
@@ -0,0 +1,11 @@
+package com.taurus.permanent.core;
+
+/**
+ * 服务器状态
+ *
+ */
+public enum ServerState {
+ STARTING,
+ STARTED,
+ REBOOTING;
+}
diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/SessionManager.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/SessionManager.java
new file mode 100644
index 0000000..46d7af0
--- /dev/null
+++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/SessionManager.java
@@ -0,0 +1,313 @@
+package com.taurus.permanent.core;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import com.taurus.core.events.Event;
+import com.taurus.core.service.AbstractService;
+import com.taurus.core.util.Logger;
+import com.taurus.core.util.task.ITaskHandler;
+import com.taurus.core.util.task.Task;
+import com.taurus.core.util.task.TaskScheduler;
+import com.taurus.permanent.TPServer;
+import com.taurus.permanent.data.IPacketQueue;
+import com.taurus.permanent.data.ISocketChannel;
+import com.taurus.permanent.data.NonBlockingPacketQueue;
+import com.taurus.permanent.data.Session;
+import com.taurus.permanent.data.SessionType;
+
+/**
+ * session管理器,负责创建,添加和删除session
+ *
+ */
+public final class SessionManager extends AbstractService {
+ private static final String SESSION_CLEANING_TASK_ID = "SessionCleanerTask";
+ private static final int SESSION_CLEANING_INTERVAL_SECONDS = 10;
+ private static SessionManager __instance__;
+ private Logger logger;
+ private final ConcurrentMap sessionsById;
+ private BitSwarmEngine engine = null;
+ private final List sessionList;
+ private final ConcurrentMap