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 sessionsByConnection; + private Task sessionCleanTask; + private TaskScheduler systemScheduler; + private int highestCCS = 0; + + public static SessionManager getInstance() { + if (__instance__ == null) { + __instance__ = new SessionManager(); + } + return __instance__; + } + + private SessionManager() { + sessionsById = new ConcurrentHashMap(); + sessionList = new ArrayList(); + sessionsByConnection = new ConcurrentHashMap(); + } + + public void init(Object o) { + name = "DefaultSessionManager"; + engine = BitSwarmEngine.getInstance(); + logger = Logger.getLogger(SessionManager.class); + + systemScheduler = TPServer.me().getTaskScheduler(); + sessionCleanTask = new Task(SESSION_CLEANING_TASK_ID); + systemScheduler.addScheduledTask(sessionCleanTask, SESSION_CLEANING_INTERVAL_SECONDS, true, new SessionCleaner()); + + active = true; + logger.info("session manager init!"); + } + + public void destroy(Object o) { + super.destroy(o); + sessionCleanTask.setActive(false); + shutDownLocalSessions(); + sessionsByConnection.clear(); + } + + /** + * 添加session对象 + * @param session + */ + public void addSession(Session session) { + synchronized (sessionList) { + sessionList.add(session); + } + sessionsById.put(session.getId(), session); + sessionsByConnection.put(session.getConnection().getChannel(), session); + + + if (sessionList.size() > highestCCS) { + highestCCS = sessionList.size(); + } + logger.info("Session created: " + session); + } + + /** + * 检查session是否存在 + * @param session + * @return + */ + public boolean containsSession(Session session) { + return sessionsById.containsKey(session.getId()); + } + + /** + * 移除指定session对象 + * @param session + */ + public void removeSession(Session session) { + if (session == null)return; + if(!sessionsById.containsKey(session.getId()))return; + synchronized (sessionList) { + sessionList.remove(session); + } + ISocketChannel connection = session.getConnection(); + sessionsById.remove(session.getId()); + if (connection != null) { + sessionsByConnection.remove(connection.getChannel()); + } + if ((session.getType() == SessionType.NORMAL) || (session.getType() == SessionType.WEBSOCKET)) { + engine.getConnectionFilter().removeAddress(session.getAddress()); + } + + logger.info("Session removed: " + session); + } + + /** + * 移除指定ID的session + * @param id + * @return + */ + public Session removeSession(int id) { + Session session = sessionsById.get(id); + if (session != null) { + removeSession(session); + } + return session; + } + + /** + * 移除指定channel的session + * @param connection + * @return + */ + public Session removeSession(Object connection) { + Session session = getSessionByConnection(connection); + if (session != null) { + removeSession(session); + } + return session; + } + + /** + * channel链接断开处理 + * @param connection + * @throws IOException + */ + public void onSocketDisconnected(Object connection) throws IOException { + Session session = sessionsByConnection.get(connection); + if (session == null) { + return; + } + sessionsByConnection.remove(connection); + session.setConnected(false); + removeSession(session); + dispatchLostSessionEvent(session); + } + + /** + * 获取服务器所有session + * @return + */ + public List getAllSessions() { + List allSessions = null; + + synchronized (sessionList) { + allSessions = new ArrayList(sessionList); + } + + return allSessions; + } + + /** + * 获取指定channel的session + * @param connection + * @return + */ + public Session getSessionByConnection(Object connection) { + return sessionsByConnection.get(connection); + } + + /** + * 获取指定ID的session + * @param id + * @return + */ + public Session getSessionById(int id) { + return sessionsById.get(Integer.valueOf(id)); + } + + /** + * 获取最高的流量数量 + * @return + */ + public int getHighestCCS() { + return highestCCS; + } + + /** + * 关闭本地所有session + */ + public void shutDownLocalSessions() { + synchronized (sessionList) { + for (Iterator it = sessionList.iterator(); it.hasNext();) { + Session session = (Session) it.next(); + it.remove(); + try { + session.close(); + } catch (IOException e) { + logger.warn("I/O Error while closing session: " + session); + } + } + } + } + + /** + * 创建 session + * @param channel + * @return + */ + public Session createSession(ISocketChannel channel,SessionType type) { + Session session = new Session(); + session.setConnection(channel); + session.setTimeout(engine.getConfig().sessionTimeout); + session.setType(type); + IPacketQueue packetQueue = new NonBlockingPacketQueue(engine.getConfig().sessionPacketQueueSize); + session.setPacketQueue(packetQueue); + return session; + } + + /** + * 获取当前session链接数 + * @return + */ + public int getSessionCount() { + return sessionList.size(); + } + + private void applySessionCleaning() { + if (getSessionCount() > 0) { + for (Session session : getAllSessions()) { + if ((session == null) || (session.isFrozen())) { + continue; + } + if (session.isMarkedForEviction()) { + terminateSession(session); + logger.info("Terminated idle logged-in session: " + session); + } else { + if (!session.isIdle()) { + continue; + } + if (session.getHashId()!=null) { + logger.info("session timeout:" + session); + + session.setMarkedForEviction(); + dispatchSessionIdleEvent(session); + } else { + terminateSession(session); + } + } + } + } + + Event event = new Event(TPEvents.SESSION_IDLE_CHECK_COMPLETE); + engine.dispatchEvent(event); + } + + private void terminateSession(Session session) { + if (session.getType() == SessionType.NORMAL) { + ISocketChannel connection = session.getConnection(); + + try { + connection.close(); + session.setConnected(false); + } catch (Exception err) { + this.logger.warn("Failed closing connection while removing idle Session: " + session); + } + } + + removeSession(session); + dispatchLostSessionEvent(session); + } + + private void dispatchLostSessionEvent(Session closedSession) { + Event event = new Event(TPEvents.SESSION_LOST); + event.setParameter(TPEvents.PARAM_SESSION, closedSession); + engine.dispatchEvent(event); + } + + private void dispatchSessionIdleEvent(Session idleSession) { + Event event = new Event(TPEvents.SESSION_IDLE); + event.setParameter(TPEvents.PARAM_SESSION, idleSession); + engine.dispatchEvent(event); + } + + /** + * 清理session 任务 + */ + private final class SessionCleaner implements ITaskHandler { + private SessionCleaner() { + } + + public void doTask(Task task) throws Exception { + applySessionCleaning(); + } + } + +} diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/SystemController.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/SystemController.java new file mode 100644 index 0000000..ea6cd03 --- /dev/null +++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/SystemController.java @@ -0,0 +1,322 @@ +package com.taurus.permanent.core; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ThreadPoolExecutor; + +import com.taurus.core.entity.ITObject; +import com.taurus.core.entity.TObject; +import com.taurus.core.events.Event; +import com.taurus.core.events.EventManager; +import com.taurus.core.routes.Action; +import com.taurus.core.routes.ActionMapping; +import com.taurus.core.routes.IController; +import com.taurus.core.routes.Routes; +import com.taurus.core.service.IService; +import com.taurus.core.util.Logger; +import com.taurus.permanent.TPServer; +import com.taurus.permanent.data.Packet; +import com.taurus.permanent.data.Session; + +/** + * 核心控制器基类 + * + * + */ +public class SystemController implements IService { + public static final String CONNECT_TOKE = "$t"; + public static final String CONNECT_PROT_COMPRESSION = "$pc"; + public static final String REQUEST_CMD = "$c"; + public static final String REQUEST_GID = "$gi"; + public static final String REQUEST_PARM = "$p"; + public static final String REQUEST_RESULT = "$r"; + + /** + * pingpong + */ + public static final int ACTION_PINGPONG = 0; + /** + * 客户端请求 + */ + public static final int ACTION_REQUST_CMD = 1; + /** + * 服务器事件消息 + */ + public static final int ACTION_EVENT_CMD = 2; + + private volatile boolean active; + private String name = "SystemController"; + private ThreadPoolExecutor threadPool; + + private final Logger logger; + private final TPServer taurus; + + private SessionManager sessionManager; + private ActionMapping actionMapping; + private final Routes routes; + + public SystemController() { + logger = Logger.getLogger(SystemController.class); + taurus = TPServer.me(); + sessionManager = taurus.getSessionManager(); + routes = new Routes(Routes.CONTROLLER_INSTANCE) { + public void config() { + } + }; + routes.setAddSlash(false); + } + + public void init(Object o) { + if (active) { + throw new IllegalArgumentException("Object is already initialized. Destroy it first!"); + } + threadPool = taurus.getExtensionExecutor(); + taurus.getExtension().configRoute(routes); + + actionMapping = new ActionMapping(routes); + actionMapping.buildActionMapping(); + active = true; + } + + public void destroy(Object o) { + active = false; + List leftOvers = threadPool.shutdownNow(); + EventManager eventManager = taurus.getEventManager(); + eventManager.removeAllListener(); + logger.info("SystemController stopping: " + getClass().getName() + ", Unprocessed tasks: " + leftOvers.size()); + } + + public void enqueueRequest(Packet request) { + threadPool.execute(new Runnable() { + @Override + public void run() { + if (active) { + try { + processRequest(request); + } catch (Exception e) { + logger.error(e); + } + } + } + }); + } + + private final void processRequest(Packet packet) throws Exception { + Session sender = packet.getSender(); + if (sender.isIdle() || sender.isMarkedForEviction()) + return; + if (!sessionManager.containsSession(sender)) { + logger.warn(" session is already expired!"); + return; + } + + byte reqId = (byte) packet.getId(); + + switch (reqId) { + case ACTION_PINGPONG: + onPingPong(sender); + break; + case ACTION_REQUST_CMD: + onRequest(sender, packet); + break; + } + } + + private final void onPingPong(Session sender) { + Packet packet = new Packet(); + packet.setId(ACTION_PINGPONG); + packet.setRecipient(sender); + packet.setData(new TObject()); + BitSwarmEngine.getInstance().write(packet); + } + + private final void onRequest(Session sender, Packet packet) throws Exception { + ITObject parm = (ITObject) packet.getData(); + String key = parm.getString(REQUEST_CMD); + Action action = actionMapping.getAction(key); + + if (action == null) { + return; + } + + IController controller = action.getController(); + if(controller == null) { + controller = action.getControllerClass().newInstance(); + } + int gid = 0; + if (parm.containsKey(REQUEST_GID)) + gid = parm.getInt(REQUEST_GID); + ITObject p = null; + if (parm.containsKey(REQUEST_PARM)) { + p = parm.getTObject(REQUEST_PARM); + } + if (action.getInterceptor() != null) { + action.getInterceptor().intercept(action, controller,sender,p,gid); + } else { + action.getMethod().invoke(controller,sender,p,gid); + } + + } + + /** + * 断开session + * + * @param session + */ + public void disconnect(Session session) { + if (session == null) { + throw new RuntimeException("Session object is null."); + } + + try { + if (session.getHashId() != null) { + Event evt = new Event(TPEvents.EVENT_SESSION_DISCONNECT); + evt.setParameter(TPEvents.PARAM_SESSION, session); + taurus.getEventManager().dispatchEvent(evt); + session.setHashId(null); + } + if (session.isConnected()) { + session.close(); + } + } catch (IOException err) { + throw new RuntimeException(err); + } + } + + /** + * 发送事件给单一客户端 + * + * @param actionKey 事件协议号 + * @param params 数据参数 + * @param recipient 客户端session + */ + public void sendEvent(String actionKey, ITObject params, Session recipient) { + if(!recipient.isConnected())return; + List msgRecipients = new ArrayList(); + msgRecipients.add(recipient); + sendEvent(actionKey, params, msgRecipients); + } + + /** + * 发送事件给单一客户端 + * + * @param actionKey 事件协议号 + * @param params 数据参数 + * @param recipient 客户端session + */ + public void sendEvent(String actionKey, int weightId, ITObject params, Session recipient) { + if(!recipient.isConnected())return; + List msgRecipients = new ArrayList(); + msgRecipients.add(recipient); + sendEvent(actionKey, weightId, params, msgRecipients); + } + + /** + * 发送事件给客户端 + * + * @param actionKey 事件协议号 + * @param params 数据参数 + * @param recipients 客户端session列表 + */ + public void sendEvent(String actionKey, ITObject params, List recipients) { + ITObject resObj = TObject.newInstance(); + resObj.putString(REQUEST_CMD, actionKey); + if (params != null) { + resObj.putTObject(REQUEST_PARM, params); + } + Packet packet = new Packet(); + packet.setId(ACTION_EVENT_CMD); + packet.setData(resObj); + packet.setRecipients(recipients); + BitSwarmEngine.getInstance().write(packet); + } + + /** + * 发送事件给客户端 + * + * @param actionKey 事件协议号 + * @param params 数据参数 + * @param recipients 客户端session列表 + */ + public void sendEvent(String actionKey, int weightId, ITObject params, List recipients) { + ITObject resObj = TObject.newInstance(); + resObj.putString(REQUEST_CMD, actionKey); + if (params != null) { + resObj.putTObject(REQUEST_PARM, params); + } + Packet packet = new Packet(); + packet.setId(ACTION_EVENT_CMD); + packet.setData(resObj); + packet.setRecipients(recipients); + BitSwarmEngine.getInstance().write(packet, weightId); + } + + /** + * 动态响应客户端请示 + * + * @param gid + * @param result 响应结果 0成功 + * @param params 数据参数 + * @param recipient 客户端session + */ + public void sendResponse(int gid,int result, ITObject params, Session recipient) { + if(gid==0)return; + if(!recipient.isConnected())return; + ITObject resObj = TObject.newInstance(); + resObj.putInt(SystemController.REQUEST_RESULT, result); + resObj.putInt(SystemController.REQUEST_GID, gid); + if (params != null) { + resObj.putTObject(SystemController.REQUEST_PARM, params); + } + Packet packet = new Packet(); + packet.setId(SystemController.ACTION_REQUST_CMD); + packet.setData(resObj); + packet.setRecipient(recipient); + BitSwarmEngine.getInstance().write(packet); + } + + /** + * 动态响应客户端请示 + * + * @param gid + * @param result 响应结果 0成功 + * @param params 数据参数 + * @param recipient 客户端session + */ + public void sendResponse(int gid,int result, int weightId, ITObject params, Session recipient) { + if(gid==0)return; + if(!recipient.isConnected())return; + ITObject resObj = TObject.newInstance(); + resObj.putInt(SystemController.REQUEST_RESULT, result); + resObj.putInt(SystemController.REQUEST_GID, gid); + if (params != null) { + resObj.putTObject(SystemController.REQUEST_PARM, params); + } + Packet packet = new Packet(); + packet.setId(SystemController.ACTION_REQUST_CMD); + packet.setData(resObj); + packet.setRecipient(recipient); + BitSwarmEngine.getInstance().write(packet, weightId); + } + + public final Logger getLogger() { + return logger; + } + + @Override + public String getName() { + return name; + } + + @Override + public void setName(String name) { + this.name = name; + } + + @Override + public boolean isActive() { + return active; + } + +} diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/TPEvents.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/TPEvents.java new file mode 100644 index 0000000..0f0eb50 --- /dev/null +++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/core/TPEvents.java @@ -0,0 +1,28 @@ +package com.taurus.permanent.core; + +/** + * TPEvents + * + * + */ +public class TPEvents { + /** + * session丢失或被清理时间 + */ + public static final String SESSION_LOST = "sessionLost"; + /** + * session空闲事件 + */ + public static final String SESSION_IDLE = "sessionIdle"; + /** + * 完成检测需要清理的session事件 + */ + public static final String SESSION_IDLE_CHECK_COMPLETE = "sessionIdleCheckComplete"; + /** + * session断开连接事件 + */ + public static final String EVENT_SESSION_DISCONNECT = "session_disconnect"; + + public static final String PARAM_SESSION = "session"; + +} diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/data/BindableSocket.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/data/BindableSocket.java new file mode 100644 index 0000000..a4bd191 --- /dev/null +++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/data/BindableSocket.java @@ -0,0 +1,37 @@ +package com.taurus.permanent.data; + +import java.nio.channels.SelectableChannel; + +/** + * BindableSocket + * + */ +public class BindableSocket { + protected SelectableChannel channel; + private String address; + private int port; + + public BindableSocket(SelectableChannel channel, String address, int port) { + this.address = address; + this.port = port; + + this.channel = channel; + } + + public SelectableChannel getChannel() { + return channel; + } + + public String getAddress() { + return address; + } + + public int getPort() { + return port; + } + + + public String toString() { + return String.format("%s[%d]", address, port); + } +} diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/data/IPacketQueue.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/data/IPacketQueue.java new file mode 100644 index 0000000..b7bd82d --- /dev/null +++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/data/IPacketQueue.java @@ -0,0 +1,66 @@ +package com.taurus.permanent.data; + +/** + * 网络包队列接口 + * + */ +public interface IPacketQueue { + /** + * 返回队列头部的元素 + * @return + */ + public Packet peek(); + + /** + * 移除并返回队列头部的元素 + * @return + */ + public Packet take(); + + /** + * 队列是否为空 + * @return + */ + public boolean isEmpty(); + + /** + * 队列是否已满 + * @return + */ + public boolean isFull(); + + /** + * 获取队列当前大小 + * @return + */ + public int getSize(); + + /** + * 获取队列最大大小 + * @return + */ + public int getMaxSize(); + + /** + * 设置队列最大大小 + * @param size + */ + public void setMaxSize(int size); + + /** + * 队列当前使用百分比 + * @return + */ + public float getPercentageUsed(); + + /** + * 清理队列 + */ + public void clear(); + + /** + * 添加一个元素 + * @param packet + */ + public void put(Packet packet); +} diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/data/ISocketChannel.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/data/ISocketChannel.java new file mode 100644 index 0000000..4b1709e --- /dev/null +++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/data/ISocketChannel.java @@ -0,0 +1,21 @@ +package com.taurus.permanent.data; + +import java.io.IOException; +import java.net.SocketAddress; +import java.nio.ByteBuffer; + +public interface ISocketChannel{ + long write(ByteBuffer buffer); + + void write(final String p0); + + boolean checkConnection(); + + Object getChannel(); + + SocketAddress getRemoteAddress(); + + SocketAddress getLocalAddress(); + + void close() throws IOException; +} diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/data/NonBlockingPacketQueue.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/data/NonBlockingPacketQueue.java new file mode 100644 index 0000000..83fc0e1 --- /dev/null +++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/data/NonBlockingPacketQueue.java @@ -0,0 +1,82 @@ +package com.taurus.permanent.data; + +import java.util.LinkedList; + +/** + * 非阻塞网络包队列 + * + */ +public final class NonBlockingPacketQueue implements IPacketQueue { + private final LinkedList queue; + private int maxSize; + + public NonBlockingPacketQueue(int maxSize) { + this.queue = new LinkedList(); + this.maxSize = maxSize; + } + + public void clear() { + synchronized (this.queue) { + queue.clear(); + } + } + + public int getSize() { + return queue.size(); + } + + public int getMaxSize() { + return maxSize; + } + + public boolean isEmpty() { + return queue.size() == 0; + } + + public boolean isFull() { + return queue.size() >= maxSize; + } + + public float getPercentageUsed() { + if (this.maxSize == 0) { + return 0.0F; + } + return queue.size() * 100 / maxSize; + } + + public Packet peek() { + Packet packet = null; + + synchronized (this.queue) { + if (!isEmpty()) { + packet = queue.get(0); + } + } + return packet; + } + + public void put(Packet packet){ + if (isFull()) { + throw new RuntimeException("packet is full!"); + } + + synchronized (queue) { + queue.addLast(packet); + } + } + + public void setMaxSize(int size) { + maxSize = size; + } + + public Packet take() { + Packet packet = null; + + synchronized (queue) { + packet = queue.removeFirst(); + } + + return packet; + } + +} diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/data/PackDataType.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/data/PackDataType.java new file mode 100644 index 0000000..884a912 --- /dev/null +++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/data/PackDataType.java @@ -0,0 +1,6 @@ +package com.taurus.permanent.data; + +public enum PackDataType { + BINARY, + TEXT +} diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/data/Packet.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/data/Packet.java new file mode 100644 index 0000000..efd4d27 --- /dev/null +++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/data/Packet.java @@ -0,0 +1,94 @@ +package com.taurus.permanent.data; + +import java.util.ArrayList; +import java.util.List; + +/** + * Packet data object + * + */ +public class Packet { + protected int id; + protected Object data; + protected Session sender; + protected List recipients; + protected byte[] fragmentBuffer; + protected PackDataType dataType = PackDataType.BINARY; + + + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public Object getData() { + return this.data; + } + + public void setData(Object data) { + this.data = data; + } + + public Session getSender() { + return this.sender; + } + + public void setSender(Session sender) { + this.sender = sender; + } + + public List getRecipients() { + return this.recipients; + } + + public void setRecipients(List recipients) { + this.recipients = recipients; + } + + public void setRecipient(Session session) { + List recipients = new ArrayList(); + recipients.add(session); + setRecipients(recipients); + } + + public boolean isFragmented() { + return this.fragmentBuffer != null; + } + + public byte[] getFragmentBuffer() { + return this.fragmentBuffer; + } + + public void setFragmentBuffer(byte[] bb) { + this.fragmentBuffer = bb; + } + + public PackDataType getDataType() { + return dataType; + } + + public void setDataType(PackDataType dataType) { + this.dataType = dataType; + } + + public String toString() { + return String.format("{ data: %s }", data.getClass().getName()); + } + + public Packet clone() { + Packet newPacket = new Packet(); + newPacket.id = this.id; + newPacket.data = data; + List recipients = new ArrayList(); + recipients.addAll(this.recipients); + newPacket.recipients = recipients; + newPacket.sender = this.sender; + newPacket.dataType = this.dataType; + newPacket.fragmentBuffer = this.fragmentBuffer; + return newPacket; + } +} diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/data/Session.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/data/Session.java new file mode 100644 index 0000000..95ba371 --- /dev/null +++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/data/Session.java @@ -0,0 +1,467 @@ +package com.taurus.permanent.data; + +import java.io.IOException; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicInteger; + +import com.taurus.permanent.core.SessionManager; + +/** + * 核心用户session对象 + * + */ +public final class Session { + public static final String DATA_BUFFER = "session_data_buffer"; + public static final String PACKET_READ_STATE = "read_state"; + private static final String NO_IP = "NO_IP"; + + + private static AtomicInteger idCounter = new AtomicInteger(0); + + private volatile long readBytes = 0L; + private volatile long writtenBytes = 0L; + private volatile int droppedMessages = 0; + private ISocketChannel connection; + private volatile long creationTime; + private volatile long lastReadTime; + private volatile long lastWriteTime; + private volatile long lastActivityTime; + private int id; + private volatile String hashId; + private SessionType type; + private volatile String clientIpAddress = NO_IP; + private volatile int clientPort; + private int serverPort; + private String serverAddress; + private int timeout; + private volatile boolean frozen = false; + private boolean markedForEviction = false; + private volatile boolean connected = false; + private IPacketQueue packetQueue; + private Map systemProperties; + + public Session() { + creationTime = lastReadTime = lastWriteTime = lastActivityTime = System.currentTimeMillis(); + + setId(getUniqueId()); + + systemProperties = new ConcurrentHashMap(); + } + + private static int getUniqueId() { + return idCounter.incrementAndGet(); + } + + /** + * 统计当前session接收字节流大小 + * @param amount + */ + public void addReadBytes(long amount) { + this.readBytes += amount; + } + + /** + * 统计当前session发送字节流大小 + * @param amount + */ + public void addWrittenBytes(long amount) { + this.writtenBytes += amount; + } + + /** + * 获取channe连接对象 + * @return + */ + public ISocketChannel getConnection() { + return this.connection; + } + + /** + * 获取session创建时间 + * @return + */ + public long getCreationTime() { + return this.creationTime; + } + + /** + * 获取hashid + * @return + */ + public String getHashId() { + return this.hashId; + } + + /** + * 获取session id + * @return + */ + public int getId() { + return this.id; + } + + /** + * 获取客户端详细地址 + * @return + */ + public String getFullIpAddress() { + return clientPort > 0 ? getAddress() + ":" + clientPort : getAddress(); + } + + /** + * 获取客户端地址 + * @return + */ + public String getAddress() { + return this.clientIpAddress; + } + + /** + * 获取客户端端口 + * @return + */ + public int getClientPort() { + return this.clientPort; + } + + /** + * 获取服务器监听端口 + * @return + */ + public int getServerPort() { + return this.serverPort; + } + + /** + * 获取服务器详细地址 + * @return + */ + public String getFullServerIpAddress() { + return this.serverAddress + ":" + this.serverPort; + } + + /** + * 获取服务器地址 + * @return + */ + public String getServerAddress() { + return this.serverAddress; + } + + /** + * 获取最后激活时间 + * @return + */ + public long getLastActivityTime() { + return this.lastActivityTime; + } + + /** + * 获取最后读时间 + * @return + */ + public long getLastReadTime() { + return this.lastReadTime; + } + + /** + * 获取最后写时间 + * @return + */ + public long getLastWriteTime() { + return this.lastWriteTime; + } + + /** + * 获取超时时间 + * @return + */ + public int getTimeout() { + return this.timeout; + } + + /** + * 获取网络包队列 + * @return + */ + public IPacketQueue getPacketQueue() { + return this.packetQueue; + } + + /** + * 获取服务器内部属性 + * @param key + * @return + */ + public Object getSystemProperty(String key) { + return this.systemProperties.get(key); + } + + /** + * 获取属性 + * @param key + */ + public void removeSystemProperty(String key) { + this.systemProperties.remove(key); + } + + /** + * 获取session类型 + * @return + */ + public SessionType getType() { + return this.type; + } + + /** + * 获取当前session接收字节流大小 + * @return + */ + public long getReadBytes() { + return this.readBytes; + } + + /** + * 获取当前session发送字节流大小 + * @return + */ + public long getWrittenBytes() { + return this.writtenBytes; + } + + /** + * 当前连接状态 + * @return + */ + public boolean isConnected() { + return this.connected; + } + + /** + * 设置连接状态 + * @param value + */ + public void setConnected(boolean value) { + this.connected = value; + } + + + /** + * session 是否空闲,做超时踢出处理 + * @return + */ + public boolean isIdle() { + return isSocketIdle(); + } + + private boolean isSocketIdle() { + boolean isIdle = false; + + if (this.timeout > 0) { + long elapsedSinceLastActivity = System.currentTimeMillis() - this.lastActivityTime; + isIdle = elapsedSinceLastActivity / 1000L > this.timeout; + } + + return isIdle; + } + + public boolean isMarkedForEviction() { + return this.markedForEviction; + } + + /** + * 设置channel连接对象 + * @param connection + */ + public void setConnection(ISocketChannel connection) { + if (connection == null) { + return; + } + + if (this.connection != null) { + throw new IllegalArgumentException("You cannot overwrite the connection linked to a Session!"); + } + if(connection.checkConnection()) { + setSocketConnection(connection); + this.connected = true; + } + } + + private void setSocketConnection(ISocketChannel connection) { + this.connection = connection; + String svr_host = connection.getLocalAddress().toString().substring(1); + String[] svr_adr =svr_host.split("\\:"); + this.serverAddress = svr_adr[0]; + try { + this.serverPort = Integer.parseInt(svr_adr[1]); + } catch (NumberFormatException localNumberFormatException) { + } + + + String client_host = connection.getRemoteAddress().toString().substring(1); + String[] client_adr = client_host.split("\\:"); + this.clientIpAddress = client_adr[0]; + try { + this.clientPort = Integer.parseInt(client_adr[1]); + } catch (NumberFormatException localNumberFormatException) { + } + + } + + /** + * 设置网络包队列 + * @param queue + */ + public void setPacketQueue(IPacketQueue queue) { + if (this.packetQueue != null) { + throw new IllegalStateException("Cannot reassing the packet queue. Queue already exists!"); + } + this.packetQueue = queue; + } + + /** + * 设置创建时间 + * @param timestamp + */ + public void setCreationTime(long timestamp) { + this.creationTime = timestamp; + } + + /** + * 设置hashID + * @param hash + */ + public void setHashId(String hash) { + this.hashId = hash; + } + + /** + * 设置session id + * @param id + */ + public void setId(int id) { + this.id = id; + } + + /** + * 设置最后读取网络字节时间 + * @param timestamp + */ + public void setLastReadTime(long timestamp) { + this.lastReadTime = timestamp; + if(this.hashId!=null) { + this.lastActivityTime = timestamp; + } + } + + /** + * 设置最后写网络字节时间 + * @param timestamp + */ + public void setLastWriteTime(long timestamp) { + this.lastWriteTime = timestamp; + if(this.hashId!=null) { + this.lastActivityTime = timestamp; + } + } + + public void updateLastActivityTime() { + this.lastActivityTime = System.currentTimeMillis(); + } + + /** + * session 标记为驱逐 + */ + public void setMarkedForEviction() { + this.markedForEviction = true; + this.frozen = true; + } + + /** + * 设置超时时间 + * @param idleTime + */ + public void setTimeout(int idleTime) { + this.timeout = idleTime; + } + + /** + * 设置服务器内部属性 + * @param key + * @param property + */ + public void setSystemProperty(String key, Object property) { + this.systemProperties.put(key, property); + } + + /** + * 设置session 类型 + * @param type + */ + public void setType(SessionType type) { + this.type = type; + + if (type == SessionType.VOID) { + this.clientIpAddress = NO_IP; + this.clientPort = 0; + } + } + + /** + * 获取丢包数量 + * @return + */ + public int getDroppedMessages() { + return this.droppedMessages; + } + + /** + * 统计丢包数量 + */ + public void addDroppedMessages(int amount) { + this.droppedMessages += amount; + } + + /** + * session 是否被冻结 + * @return + */ + public boolean isFrozen() { + return this.frozen; + } + + /** + * 关闭session + * @throws IOException + */ + public void close() throws IOException { + this.packetQueue = null; + this.frozen = true; + try { + if(connection!=null) { + connection.close(); + } + } finally { + connected = false; + SessionManager.getInstance().removeSession(this); + } + } + + public String toString() { + return String.format("{ Id: %s, Type: %s, IP: %s }", id + (hashId!=null ? ("[" + this.hashId + "]") : ""), type, getFullIpAddress()); + } + + public boolean equals(Object obj) { + if (!(obj instanceof Session)) { + return false; + } + boolean isEqual = false; + Session session = (Session) obj; + + if (session.getId() == this.id) { + isEqual = true; + } + return isEqual; + } +} diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/data/SessionType.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/data/SessionType.java new file mode 100644 index 0000000..3e0b480 --- /dev/null +++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/data/SessionType.java @@ -0,0 +1,17 @@ +package com.taurus.permanent.data; + +/** + * session 类型 + * + */ +public enum SessionType{ + /** + * 普通 tcp udp 长链接 + */ + NORMAL, + /** + * websocket 长链接 + */ + WEBSOCKET, + VOID +} diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/io/BinaryIoHandler.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/io/BinaryIoHandler.java new file mode 100644 index 0000000..9309052 --- /dev/null +++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/io/BinaryIoHandler.java @@ -0,0 +1,242 @@ +package com.taurus.permanent.io; + +import java.io.IOException; +import java.nio.ByteBuffer; + +import com.taurus.core.entity.ITObject; +import com.taurus.core.entity.TObject; +import com.taurus.core.util.Logger; +import com.taurus.core.util.Utils; +import com.taurus.permanent.TPServer; +import com.taurus.permanent.core.BitSwarmEngine; +import com.taurus.permanent.data.Packet; +import com.taurus.permanent.data.Session; + +/** + * 协议包字节流解析 + * + */ +public class BinaryIoHandler { + + private static final int INT_SIZE = 4; + private final Logger log; + private final BitSwarmEngine engine; + private volatile long packetsRead = 0L; + private volatile long droppedIncomingPackets = 0L; + private final int maxPacketSize; + + public BinaryIoHandler(IOHandler parentHandler) { + this.log = Logger.getLogger(getClass()); + this.engine = BitSwarmEngine.getInstance(); + this.maxPacketSize = engine.getConfig().maxPacketSize; + } + + public long getReadPackets() { + return this.packetsRead; + } + + public long getIncomingDroppedPackets() { + return this.droppedIncomingPackets; + } + + public void handleWrite(Packet packet) throws Exception { + engine.getProtocolHandler().onPacketWrite(packet); + int protocolCompressionThreshold = TPServer.me().getConfig().protocolCompression; + byte[] binData = null; + try { + binData = ((TObject)packet.getData()).toBinary(); + } catch (Exception e) { + log.error(e); + log.error(((TObject)packet.getData()).toString()); + log.error(((TObject)packet.getData()).toJson()); + return; + } + boolean compression = binData.length > protocolCompressionThreshold; + if(compression) { + binData = Utils.compress(binData); + } + ByteBuffer packetBuffer = ByteBuffer.allocate(INT_SIZE + 1 + binData.length); + packetBuffer.put(compression?(byte)1:(byte)0); + packetBuffer.putInt(binData.length); + packetBuffer.put(binData); + packet.setData(packetBuffer.array()); + engine.getSocketWriter().enqueuePacket(packet); + } + + public void handleRead(Session session, byte[] data) { + + PacketReadState readState = (PacketReadState) session.getSystemProperty(Session.PACKET_READ_STATE); + try { + while (data.length > 0) { + if (readState == PacketReadState.WAIT_NEW_PACKET) { + ProcessedPacket process = handleNewPacket(session, data); + readState = process.getState(); + data = process.getData(); + } + + if (readState == PacketReadState.WAIT_DATA_SIZE) { + ProcessedPacket process = handleDataSize(session, data); + readState = process.getState(); + data = process.getData(); + } + + if (readState == PacketReadState.WAIT_DATA_SIZE_FRAGMENT) { + ProcessedPacket process = handleDataSizeFragment(session, data); + readState = process.getState(); + data = process.getData(); + } + + if (readState != PacketReadState.WAIT_DATA) + continue; + ProcessedPacket process = handlePacketData(session, data); + readState = process.getState(); + data = process.getData(); + } + + } catch (Exception err) { + this.log.error(err); + readState = PacketReadState.WAIT_NEW_PACKET; + } + + session.setSystemProperty(Session.PACKET_READ_STATE, readState); + } + + private ProcessedPacket handleNewPacket(Session session, byte[] data) { + PendingPacket pp = new PendingPacket(); + pp.compressed = data[0] > 0; + session.setSystemProperty(Session.DATA_BUFFER, pp); + data = Utils.resizeByteArray(data, 1, data.length - 1); + return new ProcessedPacket(PacketReadState.WAIT_DATA_SIZE, data); + } + + private ProcessedPacket handleDataSize(Session session, byte[] data) { + PacketReadState state = PacketReadState.WAIT_DATA; + PendingPacket pending = (PendingPacket) session.getSystemProperty(Session.DATA_BUFFER); + int dataSize = -1; + int sizeBytes = INT_SIZE; + + if (data.length >= INT_SIZE) { + dataSize = 0; + for (int i = 0; i < INT_SIZE; i++) { + int pow256 = (int) Math.pow(256.0D, 3 - i); + int intByte = data[i] & 0xFF; + dataSize += pow256 * intByte; + } + } + + if (dataSize != -1) { + validateIncomingDataSize(session, dataSize); + pending.setExpectedLen(dataSize); + pending.setBuffer(ByteBuffer.allocate(dataSize)); + data = Utils.resizeByteArray(data, sizeBytes, data.length - sizeBytes); + } else { + state = PacketReadState.WAIT_DATA_SIZE_FRAGMENT; + ByteBuffer sizeBuffer = ByteBuffer.allocate(INT_SIZE); + sizeBuffer.put(data); + pending.setBuffer(sizeBuffer); + data = new byte[0]; + } + return new ProcessedPacket(state, data); + } + + private ProcessedPacket handleDataSizeFragment(Session session, byte[] data) { + PacketReadState state = PacketReadState.WAIT_DATA_SIZE_FRAGMENT; + PendingPacket pending = (PendingPacket) session.getSystemProperty(Session.DATA_BUFFER); + ByteBuffer sizeBuffer = (ByteBuffer) pending.getBuffer(); + + int remaining = INT_SIZE - sizeBuffer.position(); + + if (data.length >= remaining) { + sizeBuffer.put(data, 0, remaining); + sizeBuffer.flip(); + int dataSize = sizeBuffer.getInt(); + + validateIncomingDataSize(session, dataSize); + pending.setExpectedLen(dataSize); + pending.setBuffer(ByteBuffer.allocate(dataSize)); + state = PacketReadState.WAIT_DATA; + + if (data.length > remaining) + data = Utils.resizeByteArray(data, remaining, data.length - remaining); + else { + data = new byte[0]; + } + + } else { + sizeBuffer.put(data); + data = new byte[0]; + } + + return new ProcessedPacket(state, data); + } + + private ProcessedPacket handlePacketData(Session session, byte[] data) throws Exception { + PacketReadState state = PacketReadState.WAIT_DATA; + PendingPacket pending = (PendingPacket) session.getSystemProperty(Session.DATA_BUFFER); + ByteBuffer dataBuffer = (ByteBuffer) pending.getBuffer(); + int readLen = dataBuffer.remaining(); + boolean isThereMore = data.length > readLen; + + if (data.length >= readLen) { + dataBuffer.put(data, 0, readLen); + + if (pending.getExpectedLen() != dataBuffer.capacity()) { + throw new IllegalStateException("Expected: " + pending.getExpectedLen() + ", Buffer size: " + dataBuffer.capacity()); + } + final byte[] tembytes = dataBuffer.array(); + final boolean compressed = pending.compressed; + dispatchRequest(session,tembytes,compressed); + this.packetsRead += 1L; + state = PacketReadState.WAIT_NEW_PACKET; + + } else { + dataBuffer.put(data); + } + + if (isThereMore) + data = Utils.resizeByteArray(data, readLen, data.length - readLen); + else { + data = new byte[0]; + } + return new ProcessedPacket(state, data); + } + + + private void dispatchRequest(Session session, byte[] data,boolean compressed) { + if(compressed) { + try { + data = Utils.uncompress(data); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + ITObject requestObject = TObject.newFromBinaryData(data); + Packet newPacket = new Packet(); + newPacket.setSender(session); + newPacket.setData(requestObject); + engine.getProtocolHandler().onPacketRead(newPacket); + } + + /** + * 验证字节流数据大小 + * @param session + * @param dataSize + */ + private void validateIncomingDataSize(Session session, int dataSize) { + String who = session.toString(); + + if (dataSize < 1) { + this.droppedIncomingPackets += 1L; + throw new IllegalArgumentException("Illegal request size: " + dataSize + " bytes, from: " + who); + } + + if (dataSize > this.maxPacketSize) { + TPServer.me().getController().disconnect(session); + this.droppedIncomingPackets += 1L; + + throw new IllegalArgumentException(String.format("Incoming request size too large: %s, Current limit: %s, From: %s", dataSize, this.maxPacketSize, who)); + } + } + +} diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/io/IOHandler.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/io/IOHandler.java new file mode 100644 index 0000000..6ad430c --- /dev/null +++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/io/IOHandler.java @@ -0,0 +1,73 @@ +package com.taurus.permanent.io; + +import com.taurus.core.util.Logger; +import com.taurus.permanent.data.Packet; +import com.taurus.permanent.data.Session; + +/** + * 读写网络字节流 + * + */ +public class IOHandler { + private final BinaryIoHandler binHandler; + private final Logger logger; + + public IOHandler() { + logger = Logger.getLogger(getClass()); + binHandler = new BinaryIoHandler(this); + + } + + /** + * 读取网络包字节流 + * @param session + * @param data + */ + public void onDataRead(Session session, byte[] data) { + if ((data == null) || (data.length < 1)) { + throw new IllegalArgumentException("Unexpected null or empty byte array!"); + } + + PacketReadState readState = (PacketReadState) session.getSystemProperty(Session.PACKET_READ_STATE); + if(readState==null){ + if (data[0] == 60) { + return; + } + session.setSystemProperty(Session.PACKET_READ_STATE, PacketReadState.WAIT_NEW_PACKET); + } + + binHandler.handleRead(session, data); + } + + /** + * 数据写入网络字节流,发送给指定客户端 + * @param packet + */ + public void onDataWrite(Packet packet) { + if (packet.getRecipients().size() > 0) { + try { + this.binHandler.handleWrite(packet); + } catch (Exception e) { + logger.error(e); + } + } + } + + /** + * 统计丢包数量 + * @return + */ + public long getReadPackets() { + return binHandler.getReadPackets(); + } + + /** + * 统计丢包数量 + * @return + */ + public long getIncomingDroppedPackets() { + return binHandler.getIncomingDroppedPackets(); + } + + +} diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/io/PacketReadState.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/io/PacketReadState.java new file mode 100644 index 0000000..6bcdbad --- /dev/null +++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/io/PacketReadState.java @@ -0,0 +1,21 @@ +package com.taurus.permanent.io; + +/** + * PacketReadState + * + */ +public enum PacketReadState { + /** + * 等待新包读取 + */ + WAIT_NEW_PACKET, + /** + * 等待读取包大小 + */ + WAIT_DATA_SIZE, + /** + * 等待读取碎片包 + */ + WAIT_DATA_SIZE_FRAGMENT, + WAIT_DATA; +} diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/io/PendingPacket.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/io/PendingPacket.java new file mode 100644 index 0000000..6b6a059 --- /dev/null +++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/io/PendingPacket.java @@ -0,0 +1,37 @@ +package com.taurus.permanent.io; + +/** + * PendingPacket + * + */ +public class PendingPacket { + private Object buffer; + private int expectedLen = -1; + public boolean compressed; + + public PendingPacket() { + + } + + + + public Object getBuffer() { + return buffer; + } + + public void setBuffer(Object buffer) { + this.buffer = buffer; + } + + public int getExpectedLen() { + return this.expectedLen; + } + + public void setExpectedLen(int len) { + this.expectedLen = len; + } + + public String toString() { + return buffer.toString(); + } +} diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/io/ProcessedPacket.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/io/ProcessedPacket.java new file mode 100644 index 0000000..741e0e3 --- /dev/null +++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/io/ProcessedPacket.java @@ -0,0 +1,23 @@ +package com.taurus.permanent.io; + +/** + * ProcessedPacket + * + */ +public class ProcessedPacket { + private byte[] data; + private PacketReadState state; + + public ProcessedPacket(PacketReadState state, byte[] data) { + this.state = state; + this.data = data; + } + + public byte[] getData() { + return data; + } + + public PacketReadState getState() { + return state; + } +} diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/io/ProtocolHandler.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/io/ProtocolHandler.java new file mode 100644 index 0000000..2a3e4f9 --- /dev/null +++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/io/ProtocolHandler.java @@ -0,0 +1,42 @@ +package com.taurus.permanent.io; + +import com.taurus.core.entity.ITObject; +import com.taurus.core.entity.TObject; +import com.taurus.permanent.TPServer; +import com.taurus.permanent.data.Packet; + +/** + * ProtocolHandler + * + * + */ +public class ProtocolHandler { + private static final String ACTION_ID = "a"; + private static final String PARAM_ID = "p"; + + public void onPacketWrite(Packet packet) { + ITObject params = TObject.newInstance(); + params.putByte(ACTION_ID, (byte) packet.getId()); + params.putTObject(PARAM_ID, (ITObject) packet.getData()); + packet.setData(params); + } + + public void onPacketRead(Packet packet) { + ITObject requestObject = (ITObject)packet.getData(); + if (requestObject.isNull(ACTION_ID)) { + throw new IllegalStateException("Request rejected: No Action ID in request!"); + } + if (requestObject.isNull(PARAM_ID)) { + throw new IllegalStateException("Request rejected: Missing parameters field!"); + } + + packet.setId(requestObject.getByte(ACTION_ID)); + if(requestObject.containsKey(PARAM_ID)) { + packet.setData(requestObject.getTObject(PARAM_ID)); + }else { + packet.setData(null); + } + + TPServer.me().getController().enqueueRequest(packet); + } +} diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/normal/NormalSocketChannel.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/normal/NormalSocketChannel.java new file mode 100644 index 0000000..1d3d67f --- /dev/null +++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/normal/NormalSocketChannel.java @@ -0,0 +1,71 @@ +package com.taurus.permanent.normal; + +import java.io.IOException; +import java.net.Socket; +import java.net.SocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; + +import com.taurus.permanent.data.ISocketChannel; + +public class NormalSocketChannel implements ISocketChannel{ + private final SocketChannel channel; + + public NormalSocketChannel(SocketChannel channel) { + this.channel = channel; + } + @Override + public long write(ByteBuffer buffer) { + try { + return channel.write(buffer); + } catch (IOException e) { + return 0; + } + } + + @Override + public void write(String p0) { + // TODO Auto-generated method stub + + } + + @Override + public SocketAddress getRemoteAddress() { + if(checkConnection()) { + return channel.socket().getRemoteSocketAddress(); + } + return null; + } + + @Override + public SocketAddress getLocalAddress() { + if(checkConnection()) { + return channel.socket().getLocalSocketAddress(); + } + return null; + } + + @Override + public void close() throws IOException{ + Socket socket = channel.socket(); + if ((socket != null) && (!socket.isClosed())) { + socket.shutdownInput(); + socket.shutdownOutput(); + socket.close(); + channel.close(); + } + } + @Override + public Object getChannel() { + return channel; + } + + @Override + public boolean checkConnection() { + if((channel != null) && (channel.socket() != null) && (!channel.socket().isClosed())) { + return true; + } + return false; + } + +} diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/normal/SocketAcceptor.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/normal/SocketAcceptor.java new file mode 100644 index 0000000..e7ecc9d --- /dev/null +++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/normal/SocketAcceptor.java @@ -0,0 +1,259 @@ +package com.taurus.permanent.normal; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; +import java.nio.channels.ServerSocketChannel; +import java.nio.channels.SocketChannel; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import com.taurus.core.util.Logger; +import com.taurus.permanent.core.BaseCoreService; +import com.taurus.permanent.core.BitSwarmEngine; +import com.taurus.permanent.core.ConnectionFilter; +import com.taurus.permanent.core.DefaultConstants; +import com.taurus.permanent.core.ServerConfig.SocketAddress; +import com.taurus.permanent.core.SessionManager; +import com.taurus.permanent.data.BindableSocket; +import com.taurus.permanent.data.Session; +import com.taurus.permanent.data.SessionType; + +/** + * SocketAcceptor + * + * + */ +public class SocketAcceptor extends BaseCoreService implements Runnable { + private final BitSwarmEngine engine; + private final Logger logger; + private volatile int threadId = 1; + private int threadPoolSize = 1; + private final ExecutorService threadPool; + private LinkedList acceptableConnections; + private List boundSockets; + + private SessionManager sessionManager; + private SocketReader socketReader; + private Selector acceptSelector; + private volatile boolean isActive = false; + + public SocketAcceptor(int threadPoolSize) { + this.threadPoolSize = threadPoolSize; + + engine = BitSwarmEngine.getInstance(); + logger = Logger.getLogger(SocketAcceptor.class); + + threadPool = Executors.newFixedThreadPool(threadPoolSize); + + acceptableConnections = new LinkedList(); + boundSockets = new ArrayList(); + socketReader = engine.getSocketReader(); + + try { + acceptSelector = Selector.open(); + logger.info("AcceptSelector opened"); + } catch (IOException e) { + logger.warn("Problems during SocketAcceptor init: " + e); + logger.error(e); + } + } + + public void init(Object o) { + super.init(o); + if (isActive) { + throw new IllegalArgumentException("Object is already initialized. Destroy it first!"); + } + if (threadPoolSize < 1) { + throw new IllegalArgumentException("Illegal value for a thread pool size: " + threadPoolSize); + } + sessionManager = engine.getSessionManager(); + + isActive = true; + initThreadPool(); + + logger.info("SocketAcceptor initialized (pool size:"+threadPoolSize+")"); + checkBoundSockets(); + } + + public void destroy(Object o) { + super.destroy(o); + + isActive = false; + shutDownBoundSockets(); + + List leftOvers = threadPool.shutdownNow(); + try { + Thread.sleep(500L); + + acceptSelector.close(); + } catch (Exception e) { + logger.warn("Error when shutting down Accept selector: " + e.getMessage()); + } + + logger.info("SocketAcceptor stopped. Unprocessed tasks: " + leftOvers.size()); + } + + private void initThreadPool() { + for (int j = 0; j < threadPoolSize; j++) + threadPool.execute(this); + } + + public void run() { + Thread.currentThread().setName("SocketAcceptor-" + threadId++); + + while (isActive) { + try { + acceptLoop(); + } catch (IOException e) { + logger.info("I/O Error with Accept Selector: " + e.getMessage()); + logger.error(e); + } + } + + logger.info("SocketAcceptor threadpool shutting down."); + } + + private void acceptLoop() throws IOException { + acceptSelector.select(); + List _list = null; + synchronized (acceptSelector) { + Set readyKeys = acceptSelector.selectedKeys(); + _list = new ArrayList(readyKeys); + readyKeys.clear(); + } + + for (SelectionKey key : _list) { + try { + ServerSocketChannel ssChannel = (ServerSocketChannel) key.channel(); + SocketChannel clientChannel = ssChannel.accept(); + synchronized (acceptableConnections) { + acceptableConnections.addLast(clientChannel); + } + } catch (IOException error) { + logger.info("I/O Error during accept loop: " + error.getMessage()); + } + } + + if (isActive) + socketReader.getSelector().wakeup(); + } + + public void handleAcceptableConnections() { + if (acceptableConnections.size() == 0) { + return; + } + SocketChannel connection = null; + synchronized (acceptableConnections) { + connection = acceptableConnections.removeFirst(); + } + if (connection == null) + return; + ConnectionFilter connectionFilter = engine.getConnectionFilter(); + + try { + Socket socket = connection.socket(); + InetAddress iAddr = null; + if (socket != null && !socket.isClosed()) { + iAddr = socket.getInetAddress(); + } + if (iAddr == null) { + handleAcceptableConnections(); + return; + } + if (!connectionFilter.validateAndAddAddress(iAddr.getHostAddress())) { + try { + connection.socket().shutdownInput(); + connection.socket().shutdownOutput(); + connection.close(); + } catch (IOException e1) { + logger.warn("Additional problem with refused connection. Was not able to shut down the channel: " + e1.getMessage()); + } + handleAcceptableConnections(); + return; + } + connection.configureBlocking(false); + connection.socket().setTcpNoDelay(engine.getConfig().tcpNoDelay); + + SelectionKey selectionKey = connection.register(socketReader.getSelector(), SelectionKey.OP_READ); + Session session = sessionManager.createSession(new NormalSocketChannel(connection), SessionType.NORMAL); + session.setSystemProperty(DefaultConstants.SESSION_SELECTION_KEY, selectionKey); + sessionManager.addSession(session); + } catch (IOException e) { + StringBuilder sb = new StringBuilder("Failed accepting connection: "); + + if ((connection != null) && (connection.socket() != null)) { + sb.append(connection.socket().getInetAddress().getHostAddress()); + } + logger.info(sb.toString()); + } + handleAcceptableConnections(); + } + + public void bindSocket(SocketAddress socketConfig) throws IOException { + if (socketConfig.type.equalsIgnoreCase(SocketAddress.TYPE_TCP)) { + bindTcpSocket(socketConfig.address, socketConfig.port); + } else + throw new UnsupportedOperationException("Invalid transport type!"); + } + + public List getBoundSockets() { + ArrayList list = null; + + synchronized (boundSockets) { + list = new ArrayList(boundSockets); + } + + return list; + } + + private void bindTcpSocket(String address, int port) throws IOException { + ServerSocketChannel socketChannel = ServerSocketChannel.open(); + socketChannel.configureBlocking(false); + socketChannel.socket().bind(new InetSocketAddress(address, port)); + socketChannel.socket().setReuseAddress(true); + socketChannel.register(acceptSelector, SelectionKey.OP_ACCEPT); + + synchronized (boundSockets) { + boundSockets.add(new BindableSocket(socketChannel, address, port)); + } + + logger.info("Added bound tcp socket --> " + address + ":" + port); + } + + private void checkBoundSockets() { + if (boundSockets.size() < 1) + logger.error("No bound sockets! Check the boot logs for possible problems!"); + } + + private void shutDownBoundSockets() { + List problematicSockets = null; + + for (BindableSocket bindableSocket : boundSockets) { + try { + bindableSocket.getChannel().close(); + } catch (IOException e) { + if (problematicSockets == null) { + problematicSockets = new ArrayList(); + } + problematicSockets.add(bindableSocket); + } + } + + if (problematicSockets != null) { + StringBuilder sb = new StringBuilder("Problems closing bound socket(s). The following socket(s) raised exceptions: "); + + for (BindableSocket socket : problematicSockets) { + sb.append(socket.toString()).append(" "); + } + throw new RuntimeException(sb.toString()); + } + } +} diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/normal/SocketReader.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/normal/SocketReader.java new file mode 100644 index 0000000..70e9de9 --- /dev/null +++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/normal/SocketReader.java @@ -0,0 +1,231 @@ +package com.taurus.permanent.normal; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.channels.CancelledKeyException; +import java.nio.channels.ClosedSelectorException; +import java.nio.channels.SelectableChannel; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; +import java.nio.channels.SocketChannel; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import com.taurus.core.util.FixedIndexThreadPool; +import com.taurus.core.util.FixedIndexThreadPool.Work; +import com.taurus.core.util.Logger; +import com.taurus.core.util.Utils; +import com.taurus.permanent.core.BaseCoreService; +import com.taurus.permanent.core.BitSwarmEngine; +import com.taurus.permanent.core.DefaultConstants; +import com.taurus.permanent.core.SessionManager; +import com.taurus.permanent.data.Session; +import com.taurus.permanent.io.IOHandler; + +/** + * SocketReader + * + * + */ +public class SocketReader extends BaseCoreService implements Runnable { + private final BitSwarmEngine engine; + private final Logger logger; + private int threadPoolSize = 1; + private ExecutorService threadPool; + private FixedIndexThreadPool packetReaderPool; + private SessionManager sessionManager; + private SocketAcceptor socketAcceptor; + private SocketWriter socketWriter; + private Selector readSelector; + private IOHandler ioHandler; + private volatile boolean isActive = false; + private volatile long readBytes = 0L; + + public SocketReader(int nThreads) { + threadPoolSize = nThreads; + + engine = BitSwarmEngine.getInstance(); + logger = Logger.getLogger(getClass()); + try { + readSelector = Selector.open(); + logger.info("TCP Selector opened"); + } catch (IOException e) { + logger.error("Failed opening UDP Selector: " + e.toString()); + e.printStackTrace(); + } + } + + public void init(Object o) { + super.init(o); + if (isActive) { + throw new IllegalArgumentException("Object is already initialized. Destroy it first!"); + } + sessionManager = engine.getSessionManager(); + socketAcceptor = engine.getSocketAcceptor(); + socketWriter = engine.getSocketWriter(); + isActive = true; + initThreadPool(); + + logger.info("SocketReader started (pool size:"+threadPoolSize+")"); + } + + public void destroy(Object o) { + super.destroy(o); + + isActive = false; + List leftOvers = threadPool.shutdownNow(); + int pr_count = packetReaderPool.shutdown(); + try { + Thread.sleep(500L); + readSelector.close(); + } catch (Exception e) { + logger.warn("Error when shutting down TCP Selector: " + e.getMessage()); + logger.error(e); + } + + logger.info("SocketReader stopped. Unprocessed tasks: " + leftOvers.size()); + logger.info("PacketReader stopped. Unprocessed tasks: " + pr_count); + } + + public void initThreadPool() { + threadPool = Executors.newSingleThreadExecutor(); + threadPool.execute(this); + packetReaderPool = new FixedIndexThreadPool(threadPoolSize, "PacketReader", PacketReaderWork.class); + } + + public void run() { + Thread.currentThread().setName("SocketReader"); + + while (isActive) { + try { + socketAcceptor.handleAcceptableConnections(); + readIncomingSocketData(); + + Thread.sleep(5L); + } catch (Throwable t) { + logger.warn("Problems in SocketReader main loop: " + t + ", Thread: " + Thread.currentThread()); + logger.error(t); + } + } + + logger.info("SocketReader threadpool shutting down."); + } + + private void readIncomingSocketData() { + SocketChannel channel = null; + SelectionKey key = null; + try { + int readyKeyCount = readSelector.selectNow(); + + if (readyKeyCount > 0) { + Set readyKeys = readSelector.selectedKeys(); + + for (Iterator it = readyKeys.iterator(); it.hasNext();) { + key = (SelectionKey) it.next(); + it.remove(); + + if (!key.isValid()) { + continue; + } + channel = (SocketChannel) key.channel(); + Session session = sessionManager.getSessionByConnection(channel); + packetReaderPool.execute(session.getId(), session); + } + } + + } catch (ClosedSelectorException e) { + logger.debug("Selector is closed!"); + } catch (CancelledKeyException localCancelledKeyException) { + } catch (IOException ioe) { + logger.warn("I/O reading/selection error: " + ioe); + logger.error(ioe); + } catch (Exception err) { + logger.warn("Generic reading/selection error: " + err); + logger.error(err); + } + } + + private void readTcpData(Session session,SocketChannel channel, ByteBuffer readBuffer) throws IOException { + SelectionKey key = (SelectionKey) session.getSystemProperty(DefaultConstants.SESSION_SELECTION_KEY); + if (!key.isValid()) { + return; + } + if (key.isWritable()) { + key.interestOps(SelectionKey.OP_READ); + socketWriter.continueWriteOp(session); + } + if (!key.isReadable()) { + return; + } + readBuffer.clear(); + long byteCount = channel.read(readBuffer); + + if (byteCount == -1L) { + closeConnection(channel); + } else if (byteCount > 0L) { + session.setLastReadTime(System.currentTimeMillis()); + readBytes += byteCount; + session.addReadBytes(byteCount); + readBuffer.flip(); + byte[] binaryData = new byte[readBuffer.limit()]; + readBuffer.get(binaryData); + ioHandler.onDataRead(session, binaryData); + } + } + + private void closeConnection(SelectableChannel channel) throws IOException { + channel.close(); + if (channel instanceof SocketChannel) + sessionManager.onSocketDisconnected(channel); + } + + public IOHandler getIOHandler() { + return ioHandler; + } + + public Selector getSelector() { + return readSelector; + } + + public void setIoHandler(IOHandler handler) { + if (handler == null) { + throw new IllegalStateException("IOHandler si already set!"); + } + ioHandler = handler; + } + + public long getReadBytes() { + return readBytes; + } + + public long getReadPackets() { + return ioHandler.getReadPackets(); + } + + public static final class PacketReaderWork extends Work { + private ByteBuffer readBuffer; + private BitSwarmEngine engine; + private SocketReader reader; + + public PacketReaderWork() { + engine = BitSwarmEngine.getInstance(); + reader = (SocketReader) engine.getSocketReader(); + readBuffer = Utils.allocateBuffer(engine.getConfig().maxReadBufferSize, engine.getConfig().readBufferType); + } + + @Override + protected void handlerTask(Object task) throws Exception { + Session session = (Session) task; + SocketChannel channel = (SocketChannel) session.getConnection().getChannel(); + readBuffer.clear(); + try { + reader.readTcpData(session,channel, readBuffer); + } catch (IOException e) { + reader.closeConnection(channel); + } + } + } +} diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/normal/SocketWriter.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/normal/SocketWriter.java new file mode 100644 index 0000000..3bf0312 --- /dev/null +++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/normal/SocketWriter.java @@ -0,0 +1,276 @@ +package com.taurus.permanent.normal; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.channels.ClosedChannelException; +import java.nio.channels.SelectionKey; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.LinkedBlockingQueue; + +import com.taurus.core.util.Logger; +import com.taurus.core.util.Utils; +import com.taurus.permanent.TPServer; +import com.taurus.permanent.core.BaseCoreService; +import com.taurus.permanent.core.BitSwarmEngine; +import com.taurus.permanent.core.DefaultConstants; +import com.taurus.permanent.core.ServerConfig; +import com.taurus.permanent.data.IPacketQueue; +import com.taurus.permanent.data.ISocketChannel; +import com.taurus.permanent.data.Packet; +import com.taurus.permanent.data.Session; +import com.taurus.permanent.data.SessionType; +import com.taurus.permanent.io.IOHandler; + +/** + * SocketWriter + * + * + */ +public final class SocketWriter extends BaseCoreService implements Runnable { + private BitSwarmEngine engine; + private IOHandler ioHandler; + private final Logger logger; + private final ExecutorService threadPool; + private final BlockingQueue sessionTicketsQueue; + private volatile int threadId = 1; + private volatile boolean isActive = false; + private volatile long droppedPacketsCount = 0L; + private volatile long writtenBytes = 0L; + private volatile long writtenPackets = 0L; + private int threadPoolSize; + + public SocketWriter(int threadPoolSize) { + this.threadPoolSize = threadPoolSize; + + threadPool = Executors.newFixedThreadPool(threadPoolSize); + logger = Logger.getLogger(SocketWriter.class); + + sessionTicketsQueue = new LinkedBlockingQueue(); + } + + public void init(Object o) { + super.init(o); + + if (isActive) { + throw new IllegalArgumentException("Object is already initialized. Destroy it first!"); + } + if (threadPoolSize < 1) { + throw new IllegalArgumentException("Illegal value for a thread pool size: " + threadPoolSize); + } + engine = BitSwarmEngine.getInstance(); + isActive = true; + + initThreadPool(); + + logger.info("Socket Writer started (pool size:" + threadPoolSize + ")"); + } + + public void destroy(Object o) { + super.destroy(o); + + isActive = false; + List leftOvers = threadPool.shutdownNow(); + logger.info("SocketWriter stopped. Unprocessed tasks: " + leftOvers.size()); + } + + public int getQueueSize() { + return sessionTicketsQueue.size(); + } + + public int getThreadPoolSize() { + return threadPoolSize; + } + + public IOHandler getIOHandler() { + return ioHandler; + } + + public void setIOHandler(IOHandler ioHandler) { + if (this.ioHandler != null) { + throw new IllegalStateException("You cannot reassign the IOHandler class!"); + } + this.ioHandler = ioHandler; + } + + public void continueWriteOp(Session session) { + if (session != null) + sessionTicketsQueue.add(session); + } + + private void initThreadPool() { + for (int j = 0; j < threadPoolSize; j++) + threadPool.execute(this); + } + + public void run() { + Thread.currentThread().setName("SocketWriter-" + threadId++); + + ServerConfig setting = TPServer.me().getConfig(); + ByteBuffer writeBuffer = Utils.allocateBuffer(setting.maxWriteBufferSize, setting.writeBufferType); + + while (isActive) { + try { + Session session = sessionTicketsQueue.take(); + processSessionQueue(writeBuffer, session); + } catch (InterruptedException e) { + logger.warn("SocketWriter thread interrupted: " + Thread.currentThread()); + isActive = false; + } catch (Throwable t) { + logger.warn("Problems in SocketWriter main loop, Thread: " + Thread.currentThread()); + logger.error(t); + } + } + + logger.info("SocketWriter threadpool shutting down."); + } + + private void processSessionQueue(ByteBuffer writeBuffer, Session session) { + if (session != null) { + SessionType type = session.getType(); + + if (type == SessionType.NORMAL) { + processRegularSession(writeBuffer, session); + }else if (type == SessionType.VOID) + return; + } + } + + private void processRegularSession(ByteBuffer writeBuffer, Session session) { + if (session.isFrozen()) { + return; + } + Packet packet = null; + try { + IPacketQueue sessionQ = session.getPacketQueue(); + + synchronized (sessionQ) { + if (!sessionQ.isEmpty()) { + packet = sessionQ.peek(); + + if (packet == null) { + return; + } + tcpSend(writeBuffer, sessionQ, session, packet); + } + } + + } catch (ClosedChannelException cce) { + logger.debug("Socket closed during write operation for session: " + session); + } catch (IOException localIOException) {} catch (Exception e) { + logger.warn("Error during write. Session: " + session); + logger.error(e); + } + } + + private void tcpSend(ByteBuffer writeBuffer, IPacketQueue sessionQ, Session session, Packet packet) throws Exception { + ISocketChannel channel = session.getConnection(); + if (channel == null) { + logger.debug("Skipping packet, found null socket for Session: " + session); + return; + } + writeBuffer.clear(); + + byte[] buffer = packet.isFragmented() ? packet.getFragmentBuffer() : (byte[]) packet.getData(); + if (writeBuffer.capacity() < buffer.length) { + writeBuffer = Utils.allocateBuffer(buffer.length, engine.getConfig().writeBufferType); + } + writeBuffer.put(buffer); + writeBuffer.flip(); + + long toWrite = writeBuffer.remaining(); + + long bytesWritten = channel.write(writeBuffer); + if(bytesWritten == 0)throw new IOException("Written Bytes excetion!"); + + writtenBytes += bytesWritten; + session.addWrittenBytes(bytesWritten); + if (bytesWritten < toWrite) { + byte[] bb = new byte[writeBuffer.remaining()]; + writeBuffer.get(bb); + packet.setFragmentBuffer(bb); + + SelectionKey sk = (SelectionKey) session.getSystemProperty(DefaultConstants.SESSION_SELECTION_KEY); + if ((sk != null) && (sk.isValid())) { + sk.interestOps(SelectionKey.OP_READ|SelectionKey.OP_WRITE); + } else { + logger.warn("Could not OP_WRITE for Session: " + session + ", written bytes: " + bytesWritten); + } + } else { + writtenPackets += 1L; + + sessionQ.take(); + if (!sessionQ.isEmpty()) { + sessionTicketsQueue.add(session); + } + } + } + + public void enqueuePacket(Packet packet) { + enqueueLocal(packet); + } + + private void enqueueLocal(Packet packet) { + Collection recipients = packet.getRecipients(); + int size = recipients.size(); + + if ((recipients != null) && (size > 0)) { + if (packet.getSender() != null) { + packet.getSender().setLastWriteTime(System.currentTimeMillis()); + } + if (size == 1) { + enqueueLocalPacket((Session) packet.getRecipients().iterator().next(), packet); + } else + for (Session session : recipients) { + enqueueLocalPacket(session, packet.clone()); + } + } + } + + private void enqueueLocalPacket(Session session, Packet packet) { + IPacketQueue sessionQ = session.getPacketQueue(); + + if (sessionQ != null) { + synchronized (sessionQ) { + try { + boolean wasEmpty = sessionQ.isEmpty(); + + sessionQ.put(packet); + + if ((wasEmpty)) { + sessionTicketsQueue.add(session); + } + + packet.setRecipients(null); + } catch (Exception error) { + dropOneMessage(session); + } + } + } + } + + /** + * 丢包处理 + * @param session + */ + private void dropOneMessage(Session session) { + session.addDroppedMessages(1); + droppedPacketsCount += 1L; + } + + public long getDroppedPacketsCount() { + return droppedPacketsCount; + } + + + public long getWrittenBytes() { + return writtenBytes; + } + + public long getWrittenPackets() { + return writtenPackets; + } +} diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/util/GhostUserHunter.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/util/GhostUserHunter.java new file mode 100644 index 0000000..07cdf74 --- /dev/null +++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/util/GhostUserHunter.java @@ -0,0 +1,82 @@ +package com.taurus.permanent.util; + +import com.taurus.core.util.Logger; +import com.taurus.permanent.TPServer; +import com.taurus.permanent.core.SessionManager; +import com.taurus.permanent.core.SystemController; +import com.taurus.permanent.data.Session; + +import java.util.ArrayList; +import java.util.List; + +/** + * GhostUserHunter + * + * + * + */ +public class GhostUserHunter { + private static final String EOL = System.getProperty("line.separator"); + private final TPServer taurus; + private SessionManager sm; + private SystemController controller; + private final Logger log; + private static final int TOT_CYCLES = 2; + private int cycleCounter = 0; + + public GhostUserHunter() { + taurus = TPServer.me(); + this.controller = TPServer.me().getController(); + log = Logger.getLogger(getClass()); + } + + public void hunt() { + if (sm == null) { + sm = taurus.getSessionManager(); + } + + if (++cycleCounter < TOT_CYCLES) { + return; + } + cycleCounter = 0; + + List ghosts = searchGhosts(); + if (ghosts.size() > 0) { + log.info(buildReport(ghosts)); + } + + for (Session ghost : ghosts) + controller.disconnect(ghost); + } + + private List searchGhosts() { + List allUsers = taurus.getSessionManager().getAllSessions(); + List ghosts = new ArrayList(); + + for (Session u : allUsers) { + Session sess = u; + + if ((!sm.containsSession(sess)) || (sess.isIdle()) || (sess.isMarkedForEviction())) { + ghosts.add(u); + } + } + return ghosts; + } + + private String buildReport(List ghosts) { + StringBuilder sb = new StringBuilder("GHOST REPORT"); + sb.append(EOL).append("Total ghosts: ").append(ghosts.size()).append(EOL); + + for (Session ghost : ghosts) { + Session ss = ghost; + + if (ss == null) { + sb.append(ghost.getId()).append(", ").append(" -> Null session").append(", SessionById: ").append(this.sm.getSessionById(ghost.getId())); + } else { + sb.append(ghost.getId()).append(", ").append(", Connected: ").append(ss.isConnected()).append(", Idle: ").append(ss.isIdle()).append(", Marked: ") + .append(ss.isMarkedForEviction()).append(", Frozen: ").append(ss.isFrozen()).append(", SessionById: ").append(this.sm.getSessionById(ghost.getId())); + } + } + return sb.toString(); + } +} diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/websocket/UndertowWebSocketChannel.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/websocket/UndertowWebSocketChannel.java new file mode 100644 index 0000000..13e363a --- /dev/null +++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/websocket/UndertowWebSocketChannel.java @@ -0,0 +1,56 @@ +package com.taurus.permanent.websocket; + +import java.io.IOException; +import java.net.SocketAddress; +import java.nio.ByteBuffer; + +import com.taurus.permanent.data.ISocketChannel; + +import io.undertow.websockets.core.WebSocketChannel; +import io.undertow.websockets.core.WebSockets; + +public class UndertowWebSocketChannel implements ISocketChannel{ + + private WebSocketChannel channel; + + public UndertowWebSocketChannel (WebSocketChannel channel) { + this.channel = channel; + } + + @Override + public long write(ByteBuffer buffer) { + return 0; + } + + @Override + public void write(String message) { + WebSockets.sendText(message, channel, null); + } + + @Override + public SocketAddress getRemoteAddress() { + return channel.getPeerAddress(); + } + + @Override + public SocketAddress getLocalAddress() { + return channel.getLocalAddress(); + } + + @Override + public void close() throws IOException{ + channel.close(); + } + + @Override + public Object getChannel() { + return channel; + } + + @Override + public boolean checkConnection() { + if(channel!=null&&channel.isOpen())return true; + return false; + } + +} diff --git a/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/websocket/WebSocketService.java b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/websocket/WebSocketService.java new file mode 100644 index 0000000..b932a4b --- /dev/null +++ b/taurus-server/taurus-permanent/src/main/java/com/taurus/permanent/websocket/WebSocketService.java @@ -0,0 +1,195 @@ +package com.taurus.permanent.websocket; + +import java.io.IOException; +import java.nio.ByteBuffer; + +import com.taurus.core.entity.ITObject; +import com.taurus.core.entity.TObject; +import com.taurus.core.util.Logger; +import com.taurus.core.util.Utils; +import com.taurus.permanent.TPServer; +import com.taurus.permanent.core.BaseCoreService; +import com.taurus.permanent.core.BitSwarmEngine; +import com.taurus.permanent.core.ServerConfig; +import com.taurus.permanent.core.SessionManager; +import com.taurus.permanent.data.ISocketChannel; +import com.taurus.permanent.data.PackDataType; +import com.taurus.permanent.data.Packet; +import com.taurus.permanent.data.Session; +import com.taurus.permanent.data.SessionType; + +import io.undertow.Handlers; +import io.undertow.Undertow; +import io.undertow.websockets.WebSocketConnectionCallback; +import io.undertow.websockets.core.AbstractReceiveListener; +import io.undertow.websockets.core.BufferedBinaryMessage; +import io.undertow.websockets.core.BufferedTextMessage; +import io.undertow.websockets.core.CloseMessage; +import io.undertow.websockets.core.WebSocketChannel; +import io.undertow.websockets.core.WebSockets; +import io.undertow.websockets.spi.WebSocketHttpExchange; + +/** + * WebSocket service + * + * + */ +public class WebSocketService extends BaseCoreService{ + private Undertow server; + private final BitSwarmEngine engine; + private SessionManager sessionManager; + private Logger logger; + + public WebSocketService() { + engine = BitSwarmEngine.getInstance(); + sessionManager = engine.getSessionManager(); + logger = Logger.getLogger(WebSocketService.class); + } + + public void init(Object o) { + super.init(o); + WSConnectionListener listener = new WSConnectionListener(this); + ServerConfig config = TPServer.me().getConfig(); + server = Undertow.builder().addHttpListener(config.webSocketConfig.port, config.webSocketConfig.address) + .setHandler(Handlers.path().addPrefixPath("/websocket", Handlers.websocket(listener))) + .build(); + server.start(); + logger.info("Websocket listen --> "+config.webSocketConfig.address+":"+config.webSocketConfig.port); + logger.info("Websocket service start!"); + } + + public void destroy(Object o) { + super.destroy(o); + server.stop(); + server = null; + logger.info("Websocket service shutdown!"); + } + + private void openAction(WebSocketChannel channel) { + Session session = sessionManager.createSession(new UndertowWebSocketChannel(channel), SessionType.WEBSOCKET); + sessionManager.addSession(session); + } + + private void readTextAction(WebSocketChannel channel,String data) { + Session session = sessionManager.getSessionByConnection(channel); + Packet newPacket = new Packet(); + newPacket.setDataType(PackDataType.TEXT); + newPacket.setSender(session); + ITObject requestObject = TObject.newFromJsonData(data); + newPacket.setData(requestObject); + session.setLastReadTime(System.currentTimeMillis()); + engine.getProtocolHandler().onPacketRead(newPacket); + } + + private void readBinaryAction(WebSocketChannel channel,ByteBuffer data) { + Session session = sessionManager.getSessionByConnection(channel); + Packet newPacket = new Packet(); + newPacket.setDataType(PackDataType.BINARY); + boolean compressed = data.get() >0; + byte[] bytes = new byte[data.remaining()]; + data.get(bytes); + if(compressed) { + try { + bytes = Utils.uncompress(bytes); + } catch (IOException e) { + logger.error(e); + return; + } + } + newPacket.setSender(session); + ITObject requestObject = TObject.newFromBinaryData(bytes); + newPacket.setData(requestObject); + session.setLastReadTime(System.currentTimeMillis()); + engine.getProtocolHandler().onPacketRead(newPacket); + } + + + /** + * send packet + */ + public void onDataWrite(Packet packet){ + if (packet.getRecipients().size() > 0) { + packet.setDataType(PackDataType.BINARY); + engine.getProtocolHandler().onPacketWrite(packet); + int protocolCompressionThreshold = TPServer.me().getConfig().protocolCompression; + byte[] binData = ((TObject)packet.getData()).toBinary(); + boolean compression = binData.length > protocolCompressionThreshold; + if(compression) { + try { + binData = Utils.compress(binData); + } catch (IOException e) { + logger.error(e); + return; + } + } + ByteBuffer writeBuffer = ByteBuffer.allocate(1 + binData.length); + writeBuffer.put(compression?(byte)1:(byte)0); + writeBuffer.put(binData); + writeBuffer.flip(); + for (final Session session : packet.getRecipients()) { + session.setLastWriteTime(System.currentTimeMillis()); + final ISocketChannel channel = session.getConnection(); + WebSockets.sendBinary(writeBuffer, (WebSocketChannel)channel.getChannel(), null); + } + } + } + + private void closeAction(WebSocketChannel channel) { + try { + sessionManager.onSocketDisconnected(channel); + } catch (IOException e) { + throw new RuntimeException("WebSocket Disconnected exception!",e); + } + } + + private static final class WSConnectionListener implements WebSocketConnectionCallback{ + private WSListener listener; + private WebSocketService wsService; + + public WSConnectionListener(WebSocketService wsService) { + this.wsService = wsService; + this.listener = new WSListener(wsService); + } + + @Override + public void onConnect(WebSocketHttpExchange exchange, WebSocketChannel channel) { + channel.getReceiveSetter().set(this.listener); + channel.resumeReceives(); + wsService.openAction(channel); + } + + } + + private static final class WSListener extends AbstractReceiveListener{ + private WebSocketService wsService; + + public WSListener(WebSocketService wsService) { + this.wsService = wsService; + } + + @Override + protected void onFullTextMessage(WebSocketChannel channel, BufferedTextMessage message) { + wsService.readTextAction(channel, message.getData()); + } + + + protected void onCloseMessage(CloseMessage cm, WebSocketChannel channel) { + wsService.closeAction(channel); + } + + protected void onFullPingMessage(final WebSocketChannel channel, BufferedBinaryMessage message) throws IOException { + super.onFullBinaryMessage(channel, message); + } + + protected void onFullBinaryMessage(final WebSocketChannel channel, BufferedBinaryMessage message) throws IOException { + ByteBuffer[] bufferList= message.getData().getResource(); + for (ByteBuffer tem : bufferList) { + wsService.readBinaryAction(channel, tem); + } + message.getData().free(); + } + + } + + +} diff --git a/taurus-server/taurus-permanent/src/test/java/com/taurus/T1Controller.java b/taurus-server/taurus-permanent/src/test/java/com/taurus/T1Controller.java new file mode 100644 index 0000000..1e9cba6 --- /dev/null +++ b/taurus-server/taurus-permanent/src/test/java/com/taurus/T1Controller.java @@ -0,0 +1,16 @@ +package com.taurus; + +import com.taurus.core.entity.TObject; +import com.taurus.core.routes.ActionKey; +import com.taurus.core.routes.IController; +import com.taurus.permanent.TPServer; +import com.taurus.permanent.data.Session; + +public class T1Controller implements IController{ + + @ActionKey("test") + public void test(Session sender,TObject params,int gid) { + System.out.println("t1 test"); + TPServer.me().getController().sendResponse(gid, 0, params, sender); + } +} diff --git a/taurus-server/taurus-permanent/src/test/java/com/taurus/T2Controller.java b/taurus-server/taurus-permanent/src/test/java/com/taurus/T2Controller.java new file mode 100644 index 0000000..82b8e99 --- /dev/null +++ b/taurus-server/taurus-permanent/src/test/java/com/taurus/T2Controller.java @@ -0,0 +1,22 @@ +package com.taurus; + +import com.taurus.core.entity.TObject; +import com.taurus.core.routes.ActionKey; +import com.taurus.core.routes.IController; +import com.taurus.permanent.TPServer; +import com.taurus.permanent.data.Session; + +public class T2Controller implements IController{ + + @ActionKey("test") + public void test(Session sender,TObject params,int gid) { + System.out.println("t1 test"); + TPServer.me().getController().sendResponse(gid, 0, params, sender); + } + + @ActionKey("test1") + public void test1(Session sender,TObject params,int gid) { + System.out.println("t2 test"); + TPServer.me().getController().sendResponse(gid, 1, params, sender); + } +} diff --git a/taurus-server/taurus-permanent/src/test/java/com/taurus/TestExtension.java b/taurus-server/taurus-permanent/src/test/java/com/taurus/TestExtension.java new file mode 100644 index 0000000..7057140 --- /dev/null +++ b/taurus-server/taurus-permanent/src/test/java/com/taurus/TestExtension.java @@ -0,0 +1,44 @@ +package com.taurus; + +import com.taurus.core.routes.Extension; +import com.taurus.core.routes.Routes; + +/** + * + * @date 2016年12月21日 下午12:42:33 + * @version V2.9 + */ +public class TestExtension extends Extension{ + + public TestExtension() { + super(); +// login_cmd_map.put("req_test", true); + } + + @Override + public void configRoute(Routes me) { + me.add("t1", new T1Controller()); + me.add("t2", new T2Controller()); + } + +// @Override +// public void handleEvent(Event event) { +// if( event.getName() == TPEvents.EVENT_SESSION_DISCONNECT){ +// Session session = (Session) event.getParameter(TPEvents.PARAM_SESSION); +// logger.info("session:" + session.isIdle()); +// } +// +// } +// +// @Override +// protected void handlerRequest(Session sender, String cmdName, ITObject params, int gid) { +// // TODO Auto-generated method stub +// params.putInt("ttt", 1); +// sendResponse(gid, 0, params, sender); +// +// //api.disconnect(sender); +// } + + + +} diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/Main.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/Main.class new file mode 100644 index 0000000..bcd38cb Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/Main.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/TPServer$1.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/TPServer$1.class new file mode 100644 index 0000000..0fd56d3 Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/TPServer$1.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/TPServer$NetworkEvtListener.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/TPServer$NetworkEvtListener.class new file mode 100644 index 0000000..29cfdd9 Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/TPServer$NetworkEvtListener.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/TPServer$TPThreadFactory.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/TPServer$TPThreadFactory.class new file mode 100644 index 0000000..c97905a Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/TPServer$TPThreadFactory.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/TPServer.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/TPServer.class new file mode 100644 index 0000000..fa8f3e0 Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/TPServer.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/BaseCoreService.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/BaseCoreService.class new file mode 100644 index 0000000..e3f82e6 Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/BaseCoreService.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/BitSwarmEngine$1.class b/taurus-server/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-server/taurus-permanent/target/classes/com/taurus/permanent/core/BitSwarmEngine$1.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/BitSwarmEngine$PacketWriteWork.class b/taurus-server/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-server/taurus-permanent/target/classes/com/taurus/permanent/core/BitSwarmEngine$PacketWriteWork.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/BitSwarmEngine.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/BitSwarmEngine.class new file mode 100644 index 0000000..efbac1d Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/BitSwarmEngine.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/ConnectionFilter.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/ConnectionFilter.class new file mode 100644 index 0000000..c4a2e41 Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/ConnectionFilter.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/DefaultConstants.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/DefaultConstants.class new file mode 100644 index 0000000..40587e8 Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/DefaultConstants.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/IConnectionFilter.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/IConnectionFilter.class new file mode 100644 index 0000000..f73b19d Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/IConnectionFilter.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$ExecutorConfig.class b/taurus-server/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-server/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$ExecutorConfig.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$ExtensionConfig.class b/taurus-server/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-server/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$ExtensionConfig.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$IpFilterConfig.class b/taurus-server/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-server/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$IpFilterConfig.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$SocketAddress.class b/taurus-server/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-server/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$SocketAddress.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$WebSocketConfig.class b/taurus-server/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-server/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig$WebSocketConfig.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig.class new file mode 100644 index 0000000..9bbe8cc Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/ServerConfig.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/ServerState.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/ServerState.class new file mode 100644 index 0000000..17c35c9 Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/ServerState.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/SessionManager$1.class b/taurus-server/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-server/taurus-permanent/target/classes/com/taurus/permanent/core/SessionManager$1.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/SessionManager$SessionCleaner.class b/taurus-server/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-server/taurus-permanent/target/classes/com/taurus/permanent/core/SessionManager$SessionCleaner.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/SessionManager.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/SessionManager.class new file mode 100644 index 0000000..a04e759 Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/SessionManager.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/SystemController$1.class b/taurus-server/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-server/taurus-permanent/target/classes/com/taurus/permanent/core/SystemController$1.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/SystemController$2.class b/taurus-server/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-server/taurus-permanent/target/classes/com/taurus/permanent/core/SystemController$2.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/SystemController.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/SystemController.class new file mode 100644 index 0000000..e4273de Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/SystemController.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/TPEvents.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/TPEvents.class new file mode 100644 index 0000000..e2cf056 Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/core/TPEvents.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/data/BindableSocket.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/data/BindableSocket.class new file mode 100644 index 0000000..dfa9fbd Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/data/BindableSocket.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/data/IPacketQueue.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/data/IPacketQueue.class new file mode 100644 index 0000000..a839197 Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/data/IPacketQueue.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/data/ISocketChannel.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/data/ISocketChannel.class new file mode 100644 index 0000000..71f2370 Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/data/ISocketChannel.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/data/NonBlockingPacketQueue.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/data/NonBlockingPacketQueue.class new file mode 100644 index 0000000..13aabb6 Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/data/NonBlockingPacketQueue.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/data/PackDataType.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/data/PackDataType.class new file mode 100644 index 0000000..1dc926c Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/data/PackDataType.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/data/Packet.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/data/Packet.class new file mode 100644 index 0000000..58340e4 Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/data/Packet.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/data/Session.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/data/Session.class new file mode 100644 index 0000000..25ddbc9 Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/data/Session.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/data/SessionType.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/data/SessionType.class new file mode 100644 index 0000000..ca9602f Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/data/SessionType.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/io/BinaryIoHandler.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/io/BinaryIoHandler.class new file mode 100644 index 0000000..5a3a352 Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/io/BinaryIoHandler.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/io/IOHandler.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/io/IOHandler.class new file mode 100644 index 0000000..cf7d569 Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/io/IOHandler.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/io/PacketReadState.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/io/PacketReadState.class new file mode 100644 index 0000000..3ba5680 Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/io/PacketReadState.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/io/PendingPacket.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/io/PendingPacket.class new file mode 100644 index 0000000..4bef9ac Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/io/PendingPacket.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/io/ProcessedPacket.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/io/ProcessedPacket.class new file mode 100644 index 0000000..a8371b4 Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/io/ProcessedPacket.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/io/ProtocolHandler.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/io/ProtocolHandler.class new file mode 100644 index 0000000..faca5b7 Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/io/ProtocolHandler.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/normal/NormalSocketChannel.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/normal/NormalSocketChannel.class new file mode 100644 index 0000000..db5406e Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/normal/NormalSocketChannel.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/normal/SocketAcceptor.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/normal/SocketAcceptor.class new file mode 100644 index 0000000..34b2814 Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/normal/SocketAcceptor.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/normal/SocketReader$PacketReaderWork.class b/taurus-server/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-server/taurus-permanent/target/classes/com/taurus/permanent/normal/SocketReader$PacketReaderWork.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/normal/SocketReader.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/normal/SocketReader.class new file mode 100644 index 0000000..d534d50 Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/normal/SocketReader.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/normal/SocketWriter.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/normal/SocketWriter.class new file mode 100644 index 0000000..6cde0ff Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/normal/SocketWriter.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/util/GhostUserHunter.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/util/GhostUserHunter.class new file mode 100644 index 0000000..6f57b9d Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/util/GhostUserHunter.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/websocket/UndertowWebSocketChannel.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/websocket/UndertowWebSocketChannel.class new file mode 100644 index 0000000..3b5ae48 Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/websocket/UndertowWebSocketChannel.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/websocket/WebSocketService$WSConnectionListener.class b/taurus-server/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-server/taurus-permanent/target/classes/com/taurus/permanent/websocket/WebSocketService$WSConnectionListener.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/websocket/WebSocketService$WSListener.class b/taurus-server/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-server/taurus-permanent/target/classes/com/taurus/permanent/websocket/WebSocketService$WSListener.class differ diff --git a/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/websocket/WebSocketService.class b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/websocket/WebSocketService.class new file mode 100644 index 0000000..f068b49 Binary files /dev/null and b/taurus-server/taurus-permanent/target/classes/com/taurus/permanent/websocket/WebSocketService.class differ diff --git a/taurus-server/taurus-permanent/target/maven-archiver/pom.properties b/taurus-server/taurus-permanent/target/maven-archiver/pom.properties new file mode 100644 index 0000000..5314af1 --- /dev/null +++ b/taurus-server/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-server/taurus-permanent/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/taurus-server/taurus-permanent/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..01c49fb --- /dev/null +++ b/taurus-server/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-server/taurus-permanent/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/taurus-server/taurus-permanent/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..ba73987 --- /dev/null +++ b/taurus-server/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-server/taurus-permanent/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/taurus-server/taurus-permanent/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..a99516d --- /dev/null +++ b/taurus-server/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-server/taurus-permanent/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/taurus-server/taurus-permanent/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..afefdc5 --- /dev/null +++ b/taurus-server/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-server/taurus-permanent/target/surefire-reports/2026-06-16T00-56-20_309.dumpstream b/taurus-server/taurus-permanent/target/surefire-reports/2026-06-16T00-56-20_309.dumpstream new file mode 100644 index 0000000..b65f890 --- /dev/null +++ b/taurus-server/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-server/taurus-permanent/target/surefire-reports/TEST-com.taurus.TestExtension.xml b/taurus-server/taurus-permanent/target/surefire-reports/TEST-com.taurus.TestExtension.xml new file mode 100644 index 0000000..dc8c962 --- /dev/null +++ b/taurus-server/taurus-permanent/target/surefire-reports/TEST-com.taurus.TestExtension.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/taurus-server/taurus-permanent/target/surefire-reports/com.taurus.TestExtension.txt b/taurus-server/taurus-permanent/target/surefire-reports/com.taurus.TestExtension.txt new file mode 100644 index 0000000..65ebd11 --- /dev/null +++ b/taurus-server/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-server/taurus-permanent/target/taurus-permanent-1.0.1.jar b/taurus-server/taurus-permanent/target/taurus-permanent-1.0.1.jar new file mode 100644 index 0000000..f024577 Binary files /dev/null and b/taurus-server/taurus-permanent/target/taurus-permanent-1.0.1.jar differ diff --git a/taurus-server/taurus-permanent/target/test-classes/com/taurus/T1Controller.class b/taurus-server/taurus-permanent/target/test-classes/com/taurus/T1Controller.class new file mode 100644 index 0000000..4e8fff3 Binary files /dev/null and b/taurus-server/taurus-permanent/target/test-classes/com/taurus/T1Controller.class differ diff --git a/taurus-server/taurus-permanent/target/test-classes/com/taurus/T2Controller.class b/taurus-server/taurus-permanent/target/test-classes/com/taurus/T2Controller.class new file mode 100644 index 0000000..dcf7ddc Binary files /dev/null and b/taurus-server/taurus-permanent/target/test-classes/com/taurus/T2Controller.class differ diff --git a/taurus-server/taurus-permanent/target/test-classes/com/taurus/TestExtension.class b/taurus-server/taurus-permanent/target/test-classes/com/taurus/TestExtension.class new file mode 100644 index 0000000..84476ce Binary files /dev/null and b/taurus-server/taurus-permanent/target/test-classes/com/taurus/TestExtension.class differ diff --git a/taurus-web/pom.xml b/taurus-server/taurus-web/pom.xml similarity index 100% rename from taurus-web/pom.xml rename to taurus-server/taurus-web/pom.xml diff --git a/taurus-web/src/main/java/com/taurus/web/Controller.java b/taurus-server/taurus-web/src/main/java/com/taurus/web/Controller.java similarity index 100% rename from taurus-web/src/main/java/com/taurus/web/Controller.java rename to taurus-server/taurus-web/src/main/java/com/taurus/web/Controller.java diff --git a/taurus-web/src/main/java/com/taurus/web/JettyServer.java b/taurus-server/taurus-web/src/main/java/com/taurus/web/JettyServer.java similarity index 100% rename from taurus-web/src/main/java/com/taurus/web/JettyServer.java rename to taurus-server/taurus-web/src/main/java/com/taurus/web/JettyServer.java diff --git a/taurus-web/src/main/java/com/taurus/web/ServletHealthCheck.java b/taurus-server/taurus-web/src/main/java/com/taurus/web/ServletHealthCheck.java similarity index 100% rename from taurus-web/src/main/java/com/taurus/web/ServletHealthCheck.java rename to taurus-server/taurus-web/src/main/java/com/taurus/web/ServletHealthCheck.java diff --git a/taurus-web/src/main/java/com/taurus/web/SessionInfo.java b/taurus-server/taurus-web/src/main/java/com/taurus/web/SessionInfo.java similarity index 100% rename from taurus-web/src/main/java/com/taurus/web/SessionInfo.java rename to taurus-server/taurus-web/src/main/java/com/taurus/web/SessionInfo.java diff --git a/taurus-web/src/main/java/com/taurus/web/StatusServlet.java b/taurus-server/taurus-web/src/main/java/com/taurus/web/StatusServlet.java similarity index 100% rename from taurus-web/src/main/java/com/taurus/web/StatusServlet.java rename to taurus-server/taurus-web/src/main/java/com/taurus/web/StatusServlet.java diff --git a/taurus-web/src/main/java/com/taurus/web/TWebServer.java b/taurus-server/taurus-web/src/main/java/com/taurus/web/TWebServer.java similarity index 100% rename from taurus-web/src/main/java/com/taurus/web/TWebServer.java rename to taurus-server/taurus-web/src/main/java/com/taurus/web/TWebServer.java diff --git a/taurus-web/src/main/java/com/taurus/web/WebException.java b/taurus-server/taurus-web/src/main/java/com/taurus/web/WebException.java similarity index 100% rename from taurus-web/src/main/java/com/taurus/web/WebException.java rename to taurus-server/taurus-web/src/main/java/com/taurus/web/WebException.java diff --git a/taurus-web/src/main/java/com/taurus/web/WebFilter.java b/taurus-server/taurus-web/src/main/java/com/taurus/web/WebFilter.java similarity index 100% rename from taurus-web/src/main/java/com/taurus/web/WebFilter.java rename to taurus-server/taurus-web/src/main/java/com/taurus/web/WebFilter.java diff --git a/taurus-web/src/main/java/com/taurus/web/WebUtils.java b/taurus-server/taurus-web/src/main/java/com/taurus/web/WebUtils.java similarity index 100% rename from taurus-web/src/main/java/com/taurus/web/WebUtils.java rename to taurus-server/taurus-web/src/main/java/com/taurus/web/WebUtils.java diff --git a/taurus-web/src/test/java/com/taurus/Test.java b/taurus-server/taurus-web/src/test/java/com/taurus/Test.java similarity index 100% rename from taurus-web/src/test/java/com/taurus/Test.java rename to taurus-server/taurus-web/src/test/java/com/taurus/Test.java diff --git a/taurus-server/taurus-web/target/classes/com/taurus/web/Controller.class b/taurus-server/taurus-web/target/classes/com/taurus/web/Controller.class new file mode 100644 index 0000000..527d7aa Binary files /dev/null and b/taurus-server/taurus-web/target/classes/com/taurus/web/Controller.class differ diff --git a/taurus-server/taurus-web/target/classes/com/taurus/web/JettyServer.class b/taurus-server/taurus-web/target/classes/com/taurus/web/JettyServer.class new file mode 100644 index 0000000..6a4a210 Binary files /dev/null and b/taurus-server/taurus-web/target/classes/com/taurus/web/JettyServer.class differ diff --git a/taurus-server/taurus-web/target/classes/com/taurus/web/ServletHealthCheck.class b/taurus-server/taurus-web/target/classes/com/taurus/web/ServletHealthCheck.class new file mode 100644 index 0000000..cdf2f89 Binary files /dev/null and b/taurus-server/taurus-web/target/classes/com/taurus/web/ServletHealthCheck.class differ diff --git a/taurus-server/taurus-web/target/classes/com/taurus/web/SessionInfo.class b/taurus-server/taurus-web/target/classes/com/taurus/web/SessionInfo.class new file mode 100644 index 0000000..2059151 Binary files /dev/null and b/taurus-server/taurus-web/target/classes/com/taurus/web/SessionInfo.class differ diff --git a/taurus-server/taurus-web/target/classes/com/taurus/web/StatusServlet.class b/taurus-server/taurus-web/target/classes/com/taurus/web/StatusServlet.class new file mode 100644 index 0000000..df3bf62 Binary files /dev/null and b/taurus-server/taurus-web/target/classes/com/taurus/web/StatusServlet.class differ diff --git a/taurus-server/taurus-web/target/classes/com/taurus/web/TWebServer$1.class b/taurus-server/taurus-web/target/classes/com/taurus/web/TWebServer$1.class new file mode 100644 index 0000000..fc39006 Binary files /dev/null and b/taurus-server/taurus-web/target/classes/com/taurus/web/TWebServer$1.class differ diff --git a/taurus-server/taurus-web/target/classes/com/taurus/web/TWebServer$2.class b/taurus-server/taurus-web/target/classes/com/taurus/web/TWebServer$2.class new file mode 100644 index 0000000..5b0eab7 Binary files /dev/null and b/taurus-server/taurus-web/target/classes/com/taurus/web/TWebServer$2.class differ diff --git a/taurus-server/taurus-web/target/classes/com/taurus/web/TWebServer.class b/taurus-server/taurus-web/target/classes/com/taurus/web/TWebServer.class new file mode 100644 index 0000000..47274b5 Binary files /dev/null and b/taurus-server/taurus-web/target/classes/com/taurus/web/TWebServer.class differ diff --git a/taurus-server/taurus-web/target/classes/com/taurus/web/WebException.class b/taurus-server/taurus-web/target/classes/com/taurus/web/WebException.class new file mode 100644 index 0000000..b746c85 Binary files /dev/null and b/taurus-server/taurus-web/target/classes/com/taurus/web/WebException.class differ diff --git a/taurus-server/taurus-web/target/classes/com/taurus/web/WebFilter.class b/taurus-server/taurus-web/target/classes/com/taurus/web/WebFilter.class new file mode 100644 index 0000000..cafa701 Binary files /dev/null and b/taurus-server/taurus-web/target/classes/com/taurus/web/WebFilter.class differ diff --git a/taurus-server/taurus-web/target/classes/com/taurus/web/WebUtils.class b/taurus-server/taurus-web/target/classes/com/taurus/web/WebUtils.class new file mode 100644 index 0000000..5ecee80 Binary files /dev/null and b/taurus-server/taurus-web/target/classes/com/taurus/web/WebUtils.class differ diff --git a/taurus-server/taurus-web/target/maven-archiver/pom.properties b/taurus-server/taurus-web/target/maven-archiver/pom.properties new file mode 100644 index 0000000..83e68fa --- /dev/null +++ b/taurus-server/taurus-web/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=taurus-web +groupId=com.taurus +version=1.0.1 diff --git a/taurus-server/taurus-web/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/taurus-server/taurus-web/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..7fe9390 --- /dev/null +++ b/taurus-server/taurus-web/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,11 @@ +com\taurus\web\ServletHealthCheck.class +com\taurus\web\StatusServlet.class +com\taurus\web\TWebServer.class +com\taurus\web\WebUtils.class +com\taurus\web\WebException.class +com\taurus\web\JettyServer.class +com\taurus\web\WebFilter.class +com\taurus\web\TWebServer$1.class +com\taurus\web\TWebServer$2.class +com\taurus\web\Controller.class +com\taurus\web\SessionInfo.class diff --git a/taurus-server/taurus-web/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/taurus-server/taurus-web/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..07ca66b --- /dev/null +++ b/taurus-server/taurus-web/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,9 @@ +D:\cuican\server\taurus-server\taurus-web\src\main\java\com\taurus\web\SessionInfo.java +D:\cuican\server\taurus-server\taurus-web\src\main\java\com\taurus\web\Controller.java +D:\cuican\server\taurus-server\taurus-web\src\main\java\com\taurus\web\JettyServer.java +D:\cuican\server\taurus-server\taurus-web\src\main\java\com\taurus\web\WebUtils.java +D:\cuican\server\taurus-server\taurus-web\src\main\java\com\taurus\web\WebException.java +D:\cuican\server\taurus-server\taurus-web\src\main\java\com\taurus\web\WebFilter.java +D:\cuican\server\taurus-server\taurus-web\src\main\java\com\taurus\web\TWebServer.java +D:\cuican\server\taurus-server\taurus-web\src\main\java\com\taurus\web\StatusServlet.java +D:\cuican\server\taurus-server\taurus-web\src\main\java\com\taurus\web\ServletHealthCheck.java diff --git a/taurus-server/taurus-web/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/taurus-server/taurus-web/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..39cd4d8 --- /dev/null +++ b/taurus-server/taurus-web/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst @@ -0,0 +1 @@ +com\taurus\Test.class diff --git a/taurus-server/taurus-web/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/taurus-server/taurus-web/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..4be9ecb --- /dev/null +++ b/taurus-server/taurus-web/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst @@ -0,0 +1 @@ +D:\cuican\server\taurus-server\taurus-web\src\test\java\com\taurus\Test.java diff --git a/taurus-server/taurus-web/target/surefire-reports/2026-06-16T00-56-20_309.dumpstream b/taurus-server/taurus-web/target/surefire-reports/2026-06-16T00-56-20_309.dumpstream new file mode 100644 index 0000000..8ac69c6 --- /dev/null +++ b/taurus-server/taurus-web/target/surefire-reports/2026-06-16T00-56-20_309.dumpstream @@ -0,0 +1,5 @@ +# Created at 2026-06-16T00:56:21.911 +Boot Manifest-JAR contains absolute paths in classpath 'D:\cuican\server\taurus-server\taurus-web\target\test-classes' +Hint: -Djdk.net.URLClassPath.disableClassPathURLCheck=true +'other' has different root + diff --git a/taurus-server/taurus-web/target/surefire-reports/TEST-com.taurus.Test.xml b/taurus-server/taurus-web/target/surefire-reports/TEST-com.taurus.Test.xml new file mode 100644 index 0000000..3faf231 --- /dev/null +++ b/taurus-server/taurus-web/target/surefire-reports/TEST-com.taurus.Test.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/taurus-server/taurus-web/target/surefire-reports/com.taurus.Test.txt b/taurus-server/taurus-web/target/surefire-reports/com.taurus.Test.txt new file mode 100644 index 0000000..26a51c5 --- /dev/null +++ b/taurus-server/taurus-web/target/surefire-reports/com.taurus.Test.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: com.taurus.Test +------------------------------------------------------------------------------- +Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.004 s -- in com.taurus.Test diff --git a/taurus-server/taurus-web/target/taurus-web-1.0.1.jar b/taurus-server/taurus-web/target/taurus-web-1.0.1.jar new file mode 100644 index 0000000..19fd6a0 Binary files /dev/null and b/taurus-server/taurus-web/target/taurus-web-1.0.1.jar differ diff --git a/taurus-server/taurus-web/target/test-classes/com/taurus/Test.class b/taurus-server/taurus-web/target/test-classes/com/taurus/Test.class new file mode 100644 index 0000000..8919116 Binary files /dev/null and b/taurus-server/taurus-web/target/test-classes/com/taurus/Test.class differ diff --git a/web_group/src/main/java/com/group/service/GroupRoomService.java b/web_group/src/main/java/com/group/service/GroupRoomService.java index e00e58b..0349646 100644 --- a/web_group/src/main/java/com/group/service/GroupRoomService.java +++ b/web_group/src/main/java/com/group/service/GroupRoomService.java @@ -6,6 +6,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.CompletableFuture; import com.data.bean.AccountBean; import com.data.bean.GameBean; @@ -32,6 +33,8 @@ import com.taurus.web.WebException; import redis.clients.jedis.Jedis; +import static java.lang.Thread.sleep; + public class GroupRoomService { private static final Logger log = Logger.getLogger(GroupRoomService.class); @@ -1063,12 +1066,116 @@ public class GroupRoomService { Jedis jedis11 = Redis.use("group1_db11").getJedis(); try { jedis11.zremrangeByScore(grooms_key, 0, 0); + + //通知 机器人 + String gameId1 = jedis11.hget("g{383709}:play:"+pid,"gameId"); + String robot_host = null; + if(StringUtil.isNotEmpty(gameId1)) { + if (Integer.parseInt(gameId1) == 10) { + robot_host = "8.138.120.132:8701"; + } + if (Integer.parseInt(gameId1) == 22) { + robot_host = "8.138.120.132:8722"; + } + + + + if (StringUtil.isNotEmpty(gameId1)) { + String roomid = resData.getString("room_id"); + //String players = playersStr.substring(1, playersStr.length() - 1); + //判断是否有开机器人 + sendRobotData(roomid, groupId,robot_host,Integer.parseInt(gameId1)); + + } + + } + } finally { jedis11.close(); } return resData; } + /** + * //发起机器人请求 + * @return + */ + public static ITObject sendRobotData(String roomid,int groupid,String robot_host,int gameId){ + + Jedis js1 = Redis.use("group1_db3").getJedis(); + + String flag = js1.get("roomsend"+roomid); + if(flag!=null){ + return null; + } + log.info("sendRobotData :"+roomid+"groupid:"+groupid+"robot_host:"+robot_host); + + CompletableFuture future = CompletableFuture.supplyAsync(() -> { + // 执行任务 + //Jedis js1 = Redis.use("group1_db2").getJedis(); + js1.set("roomsend"+roomid,1+""); + js1.expire("roomsend"+roomid,5); + try { + Thread eventThread = new Thread(() -> { + while (true) { + NetManager.processEvents(); + try { + Thread.sleep(100); + } catch (InterruptedException e) { + break; + } catch (Exception e) { + } + } + }, "tstse"); + + eventThread.setDaemon(true); // 设置为守护线程 + eventThread.start(); + int robotid = 0; + // + Set jsRobot = js1.smembers("robots"); + String wokelock = "wokelock"; + for (String key : jsRobot) { + String tmp = js1.get(wokelock+key); + if(StringUtil.isEmpty(tmp)){ + robotid = Integer.parseInt(key); + } + } + + if(robotid!=0){ + js1.set(wokelock+robotid, String.valueOf(1)); + js1.expire(wokelock+robotid,2); + TaurusClient client = new TaurusClient(robot_host, "games"+robotid, TaurusClient.ConnectionProtocol.Tcp); + client.setSession("abbccccd"); + client.connect(); + sleep(1500); + ITObject params = TObject.newInstance(); + params.putString("roomid",roomid); + params.putInt("groupid",groupid); + params.putInt("robotid",robotid); + System.out.println("ssss"); + System.out.println(client.isConnected()); + log.info("=====================sendRobotData发送前 :"+roomid+"robotid:"+robotid); + Message msg= client.send("225", params, response -> { + System.out.println("abcd"); + }); + log.info("=====================sendRobotData发送了 :"+roomid+"robotid:"+robotid); + sleep(10000); + eventThread.setDaemon(false); + client.killConnection(); + } + eventThread.yield(); + log.info("sendRobotData :"+roomid+"robotid:"+robotid); + }catch (Exception e){ + js1.close(); + }finally { + js1.close(); + } + return "执行结果"; + }); + //client.killConnection(); + return null; + } + /** * 删除房间 * diff --git a/web_group/src/main/java/com/group/service/HttpClient.java b/web_group/src/main/java/com/group/service/HttpClient.java new file mode 100644 index 0000000..6106162 --- /dev/null +++ b/web_group/src/main/java/com/group/service/HttpClient.java @@ -0,0 +1,220 @@ +package com.group.service; + +import com.group.service.TaurusClient.ConnectionProtocol; +import com.taurus.core.entity.ITObject; +import com.taurus.core.entity.TObject; +import com.taurus.core.util.*; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.ConnectException; +import java.net.HttpURLConnection; +import java.net.SocketTimeoutException; +import java.net.URL; +import java.util.LinkedList; +import java.util.Queue; + + +/** + * Http缃戠粶璇锋眰澶勭悊绫? + * @author daixiwei daixiwei15@126.com + * + */ +public class HttpClient implements ISocketLayer { + private static final Logger logger = Logger.getLogger(HttpClient.class); + private static final byte[] NULL_BYTES = new byte[0]; + private static final String _Method = "POST"; + private static final String _ContentTypeName = "Content-Type"; + private static final String _ContentType = "application/octet-stream"; + private static final String _Result = "$r"; + private static final String _Param = "$p"; + private static final String _Session = "$s"; + private static final String _Version = "$v"; + String _url; + String _session_id = ""; + + final Queue _actionQueue = new LinkedList(); + + + public HttpClient(String url) { + _url = url; + } + + private void __sendMsg(Message msg) { + byte[] bytes = NULL_BYTES; + ITObject _data = TObject.newInstance(); + _data.putString(_Session, _session_id); + _data.putInt(_Version, NetManager.VERSION); + if (msg.useText && msg.param == null) { + if (StringUtil.isEmpty(msg.textParam)) { + msg.param = TObject.newInstance(); + } else { + try { + msg.param = TObject.newFromJsonData(msg.textParam); + } catch (Exception e) { + msg.param = TObject.newInstance(); + } + } + } + _data.putTObject(_Param, msg.param); + ByteArray buff = new ByteArray(_data.toBinary()); + try { + buff.compress(); + } catch (Exception e) { + logger.error(e); + } + bytes = buff.bytes(); + + __requestAsync(msg, bytes); + } + + private void __requestAsync(final Message msg,byte[] bytes) { + OutputStream out = null; + InputStream in = null; + int code = 500; + HttpURLConnection conn = null; + try { + + URL realUrl = new URL(_url + msg.command); + conn = (HttpURLConnection) realUrl.openConnection(); + conn.setDoOutput(true); + conn.setDoInput(true); + conn.setRequestProperty(_ContentTypeName, _ContentType); + conn.setUseCaches(false);// Post 璇锋眰涓嶈兘浣跨敤缂撳瓨 + conn.setRequestMethod(_Method); + conn.setConnectTimeout(NetManager.TIMEOUT_TIME * 1000); + conn.setReadTimeout(NetManager.TIMEOUT_TIME * 1000); + conn.connect(); + + + out = conn.getOutputStream(); + out.write(bytes); + if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { + in = conn.getInputStream(); + bytes = Utils.uncompress(in); + if (bytes!=null) { + + ITObject tem = TObject.newFromBinaryData(bytes); + int result = tem.getInt(_Result); + + if (result == 0) { + ITObject _param = tem.getTObject(_Param); + msg.param = _param; + if(msg.useText) { + msg.textParam = _param.toJson(); + } + } + code = result; + + } + } + } catch (SocketTimeoutException e) { + logger.error(e); + code = 102; + } catch (ConnectException ex1) { + logger.error(ex1); + code = 101; + } catch (Exception ex2) { + logger.error(ex2); + code = 500; + }finally { + try { + if (out != null) { + out.close(); + } + } catch (IOException ex) { + logger.error(ex); + } + try { + if (in != null) { + in.close(); + } + }catch (IOException ex) { + logger.error(ex); + } + if(conn!=null) { + conn.disconnect(); + } + } + if (msg.callback != null) { + final MessageResponse response = new MessageResponse(); + response.messageData = msg; + response.returnCode = code; + enqueueActionForDispatch(new Runnable() { + @Override + public void run() { + msg.callback.action(response); + } + }); + } + + } + + @Override + public void connect(String ip, String game) { + + } + + @Override + public void disconnect() { + + } + + private void enqueueActionForDispatch(Runnable action) { + synchronized (_actionQueue) { + _actionQueue.offer(action); + } + } + + @Override + public void processEvent() { + while (true) { + Runnable myAction; + synchronized (_actionQueue) { + if (_actionQueue.size() <= 0) { + break; + } + myAction = _actionQueue.poll(); + } + myAction.run(); + } + } + + public void write(final Message msg) { + new Thread(new Runnable() { + @Override + public void run() { + __sendMsg(msg); + } + }).start(); + } + + public int getAveragePingTime() { + return 1000; + } + + public void setSession(String session) { + _session_id = session == null ? StringUtil.Empty : session; + } + + public String getSession() { + return _session_id; + + } + + @Override + public void setOnConnect(ICallback onConnect) { + + } + + @Override + public void setOnEvent(ICallback onEvent) { + + } + + @Override + public ConnectionProtocol getProtocol() { + return ConnectionProtocol.Web; + } +} diff --git a/web_group/src/main/java/com/group/service/ISocketLayer.java b/web_group/src/main/java/com/group/service/ISocketLayer.java new file mode 100644 index 0000000..a28c35b --- /dev/null +++ b/web_group/src/main/java/com/group/service/ISocketLayer.java @@ -0,0 +1,67 @@ +package com.group.service; + +import com.group.service.TaurusClient.ConnectionProtocol; +import com.taurus.core.util.ICallback; + +/** + * 网络协议处理通用接口 + * @author daixiwei daixiwei15@126.com + * + */ +public interface ISocketLayer { + /** + * 连接服务器 + * @param ip + * @param game + */ + public void connect(String ip, String game); + + /** + * 断开连接 + */ + public void disconnect(); + + /** + * 处理事件 + */ + public void processEvent(); + + /** + * 发送消息 + * @param msg + */ + public void write(Message msg); + + /** + * get Protocol type + * @return + */ + public ConnectionProtocol getProtocol(); + + /** + * 设置连接状态回调 + */ + public void setOnConnect(ICallback onConnect); + + + /** + * 设置事件消息回调E + */ + public void setOnEvent(ICallback onEvent); + + /** + * 网络延时 + */ + public int getAveragePingTime(); + + /** + * 获取服务器Session字符 + */ + public String getSession(); + + /** + * 设置服务器Session字符 + * @param session + */ + public void setSession(String session); +} diff --git a/web_group/src/main/java/com/group/service/Message.java b/web_group/src/main/java/com/group/service/Message.java new file mode 100644 index 0000000..11e57d1 --- /dev/null +++ b/web_group/src/main/java/com/group/service/Message.java @@ -0,0 +1,47 @@ +package com.group.service; + +import com.taurus.core.entity.ITObject; +import com.taurus.core.util.ICallback; + +/** + * 网络协议消息包 + * @author daixiwei daixiwei15@126.com + * + */ +public class Message { + /** + * 使用文本,不转换ITObject + */ + public boolean useText; + /** + * 网络协议指令Key + */ + public String command; + + /** + * 参数 + */ + public ITObject param; + /** + * 文本数据 + */ + public String textParam; + + /** + * 网络消息回调 + */ + public ICallback callback; + /** + * 自定义参数 + */ + public Object data; + /** + * 网络包最后写入时间 + */ + public long lastTime; + /** + * 网络包返回匹配的GID + */ + public int gid; + +} diff --git a/web_group/src/main/java/com/group/service/MessageResponse.java b/web_group/src/main/java/com/group/service/MessageResponse.java new file mode 100644 index 0000000..fa79180 --- /dev/null +++ b/web_group/src/main/java/com/group/service/MessageResponse.java @@ -0,0 +1,17 @@ +package com.group.service; + +/** + * 缃戠粶娑堟伅鍥炶皟鏁版嵁瀵硅薄 + * @author daixiwei daixiwei15@126.com + * + */ +public class MessageResponse { + /** + * 娑堟伅鏁版嵁 + */ + public Message messageData; + /** + * 杩斿洖缁撴瀯鍊? + */ + public int returnCode; +} diff --git a/web_group/src/main/java/com/group/service/NetManager.java b/web_group/src/main/java/com/group/service/NetManager.java new file mode 100644 index 0000000..b4c119a --- /dev/null +++ b/web_group/src/main/java/com/group/service/NetManager.java @@ -0,0 +1,107 @@ +package com.group.service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 网络管理对象 + * @author daixiwei daixiwei15@126.com + * + */ +public class NetManager { + + private static List _clientList = new ArrayList(); + private static Map _clientMap = new HashMap(); + + /** + * 网络超时时间 + */ + public static int TIMEOUT_TIME = 10; + /** + * 网络版本号 + */ + public static int VERSION = 10; + public static boolean debug_print = false; + + static void addNetClient(TaurusClient net) { + if (net == null) { + throw new RuntimeException("TaurusClient is null, it can't be added."); + } + if (_clientMap.containsKey(net.getId())) { + throw new RuntimeException("A client with id: " + net.getId() + " already exists! Controller can't be added: " + net); + } + synchronized (_clientList) { + _clientMap.put(net.getId(), net); + _clientList.add(net); + } + + } + + /** + * The process events + */ + public static void processEvents() { + for (int i = 0; i < _clientList.size(); ++i) { + TaurusClient nc = _clientList.get(i); + if (nc._kill){ + synchronized (_clientList) { + _clientMap.remove(nc.getId()); + _clientList.remove(nc); + } + i--; + continue; + }else{ + nc.processEvent(); + } + } + + } + + /** + * 返回指定的NetClient + * @param id + * @return + */ + public static TaurusClient getNetClient(int id) { + for (int i = 0; i < _clientList.size(); ++i) { + TaurusClient nc = _clientList.get(i); + if (nc.getId() == id) + return nc; + } + return null; + } + + /** + * 断开指定连接 + * @param id + */ + public static void killConnection(int id) { + for (int i = 0; i < _clientList.size(); ++i) { + TaurusClient nc = _clientList.get(i); + if (nc.getId() == id) { + nc.killConnection(); + synchronized (_clientList) { + _clientMap.remove(id); + _clientList.remove(nc); + } + break; + } + } + } + + /** + * 断开所有连接 + */ + public static void killAllConnection() { + synchronized (_clientList) { + for (TaurusClient nc : _clientList) { + nc.killConnection(); + } + _clientList.clear(); + _clientMap.clear(); + } + + } +} diff --git a/web_group/src/main/java/com/group/service/SocketCode.java b/web_group/src/main/java/com/group/service/SocketCode.java new file mode 100644 index 0000000..a35b639 --- /dev/null +++ b/web_group/src/main/java/com/group/service/SocketCode.java @@ -0,0 +1,46 @@ +package com.group.service; + +/** + * Socket code + * @author daixiwei daixiwei15@126.com + * + */ +public enum SocketCode { + /** + * 杩炴帴鎴愬姛 + */ + Connect, + Disconnect, + /** + * 鏈煡寮傚父 + */ + Exception, + /** + * 杩炴帴鏈嶅姟寮傚父 + */ + ExceptionOnConnect, + /** + * 鍙戦€佹暟鎹祦閿欒 + */ + SendError, + /** + * 鎺ユ敹鏈嶅姟鍣ㄦ暟鎹祦寮傚父 + */ + ExceptionOnReceive, + /** + * 鏈嶅姟鍣ㄨ繛鎺ヨ秴鏃? + */ + TimeoutDisconnect, + /** + * 鏈嶅姟鍣ㄦ柇寮€杩炴帴 + */ + DisconnectByServer, + /** + * 瀹㈡埛绔綉缁滃紓甯? + */ + NetworkException, + /** + * 杩炴帴瀹夊叏寮傚父锛屼竴鑸负闃茬伀澧欓樆姝? + */ + SecurityExceptionOnConnect +} diff --git a/web_group/src/main/java/com/group/service/TaurusClient.java b/web_group/src/main/java/com/group/service/TaurusClient.java new file mode 100644 index 0000000..016dfde --- /dev/null +++ b/web_group/src/main/java/com/group/service/TaurusClient.java @@ -0,0 +1,355 @@ +package com.group.service; + +import com.group.service.io.SocketEngine; +import com.taurus.core.entity.ITObject; +import com.taurus.core.events.Event; +import com.taurus.core.events.EventDispatcher; +import com.taurus.core.events.IEventListener; +import com.taurus.core.util.ICallback; +import com.taurus.core.util.Logger; + + +import java.util.HashMap; +import java.util.Map; + + +/** + * 缃戠粶鏍稿績鍔熻兘澶勭悊绫? + * @author daixiwei daixiwei15@126.com + * + */ +public class TaurusClient { + private static final Logger logger = Logger.getLogger(TaurusClient.class); + private int _id; + private boolean _connect; + private String _gameId; + private String _currentIp; + + private ISocketLayer _scoket; + private ThreadManager _threadManager; + + private EventDispatcher _dispatcher; + private Map> _responseMap; + volatile boolean _kill = false; + private static int _tempID; + private int _protocolCompression=100; + + private static int _getValidID() { + return ++_tempID; + } + + /** + * + * @param host + * @param game + * @param protocol + */ + public TaurusClient(String host, String game, ConnectionProtocol protocol) { + ISocketLayer socket = null; + switch (protocol) { + case Tcp: + socket = new SocketEngine(this); + break; + case Web: + socket = new HttpClient(host); + _connect = true; + break; + default: + socket = new SocketEngine(this); + break; + } + __initialize(host, game, socket); + } + + /** + * + * @param host + * @param game + * @param socket + * @param protocol + */ + public TaurusClient(String host, String game, ISocketLayer socket) { + __initialize(host, game, socket); + + } + + /** + * 娣诲姞浜嬩欢 + * @param eventType + * @param listener + */ + public void addEventListener(String eventType, IEventListener listener) { + _dispatcher.addEventListener(eventType, listener); + } + + /** + * 绉婚櫎鎵€鏈変簨浠? + */ + public void removeAllListener() { + _dispatcher.removeAllListener(); + } + + /** + * 绉婚櫎鎸囧畾浜嬩欢 + * @param eventType + * @param listener + */ + public void removeEventListener(String eventType, IEventListener listener) { + _dispatcher.removeEventListener(eventType, listener); + } + + private void __initialize(String host, String game, ISocketLayer socket) { + _dispatcher = new EventDispatcher(); + _responseMap = new HashMap>(); + _id = _getValidID(); + NetManager.addNetClient(this); + _currentIp = host; + _gameId = game; + _threadManager = new ThreadManager(); + _threadManager.start(); + _scoket = socket; + _scoket.setOnConnect(new ICallback() { + @Override + public void action(SocketCode code) { + if (code == SocketCode.Connect) + _connect = true; + else + _connect = false; + Event evt = new Event(NetClientEvent.Connect); + evt.setParameter("code", code); + _dispatcher.dispatchEvent(evt); + } + }); + _scoket.setOnEvent(new ICallback() { + @Override + public void action(Message msg) { + if (_connect) { + Event evt = new Event(NetClientEvent.OnEvent); + evt.setParameter("msg", msg); + _dispatcher.dispatchEvent(evt); + if (NetManager.debug_print){ + String str = getProtocol() == ConnectionProtocol.Web ? "WEB" : "TCP"; + String data_str = msg.useText ? msg.textParam : (msg.param != null ? msg.param.toJson() : "null"); + logger.debug("Event [" + str + "->" + msg.command + "] data:" + data_str); + } + } + } + }); + } + + /** + * 杩炴帴鏈嶅姟鍣? + */ + public void connect() { + _scoket.connect(_currentIp, _gameId); + } + + /** + * Kill net connection. + */ + public void killConnection() { + removeAllListener(); + _responseMap.clear(); + _threadManager.stop(); + _scoket.disconnect(); + _connect = false; + _kill = true; + } + + /** + * 鍙戦€佺綉缁滄秷鎭寘 + * @param msg 娑堟伅鏁版嵁瀵硅薄 + */ + protected void send(Message msg) { + if (msg == null) + return; + if (NetManager.debug_print) { + String str = getProtocol() == ConnectionProtocol.Web ? "WEB" : "TCP"; + String data_str = msg.useText ? msg.textParam : (msg.param != null ? msg.param.toJson() : "null"); + str = "Requst [" + str + "->" + msg.command + "] ->data:" + data_str; + logger.debug(str); + } + if (msg.callback != null) { + _responseMap.put(msg, msg.callback); + msg.callback = new ICallback() { + + @Override + public void action(MessageResponse response) { + ICallback callback = _responseMap.get(response.messageData); + if (callback == null) { + return; + } + if (NetManager.debug_print){ + String str = getProtocol() == ConnectionProtocol.Web ? "WEB" : "TCP"; + String data_str = msg.useText ? msg.textParam : (msg.param != null ? msg.param.toJson() : "null"); + str = "Response [" + str + "->" + msg.command + "] ->result:"+ response.returnCode + " param:" + data_str; + logger.debug(str); + } + _responseMap.remove(response.messageData); + callback.action(response); + } + + }; + } + + _threadManager.enqueueSend(new ICallback() { + @Override + public void action(Message msg) { + sendData(msg); + } + }, msg); + } + + + /** + * 鍙戦€佺綉缁滄秷鎭寘 + * @param cmd 缃戠粶鍗忚鎸囦护Key + * @param param 鍙傛暟 + * @param callback 缃戠粶娑堟伅鍥炶皟 + * @return + */ + public Message send(String cmd, ITObject param, ICallback callback) { + Message msg = new Message(); + msg.useText = false; + msg.command = cmd; + msg.param = param; + msg.callback = callback; + this.send(msg); + return msg; + } + + /** + * 鍙戦€佺綉缁滄秷鎭寘 + * @param cmd 缃戠粶鍗忚鎸囦护Key + * @param text JSON 鏂囨湰 + * @param callback 缃戠粶娑堟伅鍥炶皟 + * @return + */ + public Message sendText(String cmd, String text, ICallback callback) { + Message msg = new Message(); + msg.command = cmd; + msg.textParam = text; + msg.callback = callback; + msg.useText = true; + this.send(msg); + return msg; + } + + /** + * 鍙戦€佹暟鎹嚎绋嬫柟娉? + * @param message + */ + private void sendData(Message msg) { + _scoket.write(msg); + } + + /** + * 澶勭悊浜嬩欢 + */ + void processEvent() { + if(_scoket!=null) { + _scoket.processEvent(); + } + } + + /** + * 娓呯悊鍝嶅簲鍥炶皟 + */ + public void clearResponse() { + _responseMap.clear(); + } + + /** + * The net client id + * @return + */ + public int getId() { + + return _id; + + } + + /** + * The curren ip + * @return + */ + public String getCurrentIp() { + return _currentIp; + } + + /** + * The curren Game ID + * @return + */ + public String getGameID() { + return _gameId; + } + + /** + * 缃戠粶鏄惁宸茶繛鎺? + * @return + */ + public boolean isConnected() { + return _connect; + } + + /** + * 褰撳墠缃戠粶绫诲瀷 + * @return + */ + public ConnectionProtocol getProtocol() { + return _scoket.getProtocol(); + } + + /** + * 缃戠粶寤舵椂 + * @return + */ + public int getAveragePingTime() { + return _scoket.getAveragePingTime(); + } + + /** + * 鑾峰彇鏈嶅姟鍣⊿ession瀛楃 + * @return + */ + public String getSession() { + return _scoket.getSession(); + } + + /** + * 璁剧疆鏈嶅姟鍣⊿ession瀛楃 + * @param session + */ + public void setSession(String session) { + _scoket.setSession(session); + } + + /** + * 璁剧疆鍘嬬缉闃€鍊? + * @param protocolCompression + */ + public void setProtocolCompression(int protocolCompression) { + _protocolCompression = protocolCompression; + } + + /** + * 鑾峰彇鍘嬬缉闃€鍊? + * + * @return + */ + public int getProtocolCompression() { + return _protocolCompression; + } + + + public static enum ConnectionProtocol { + Tcp, Web, + } + + public static class NetClientEvent { + public static final String Connect = "connect"; + + public static final String OnEvent = "onevent"; + } +} diff --git a/web_group/src/main/java/com/group/service/ThreadManager.java b/web_group/src/main/java/com/group/service/ThreadManager.java new file mode 100644 index 0000000..b9e2078 --- /dev/null +++ b/web_group/src/main/java/com/group/service/ThreadManager.java @@ -0,0 +1,123 @@ +package com.group.service; + +import com.taurus.core.util.ICallback; + +import java.util.LinkedList; +import java.util.Queue; +import java.util.Stack; + + + +/** + * 网络(读/写) 线程管理 + * @author daixiwei daixiwei15@126.com + * + */ +public class ThreadManager { + class MessgaeThread { + public ICallback _dataDelegate; + + public Message _message; + } + + private boolean _running = false; + private Thread _outThread; + private boolean _outHasQueuedItems = false; + private Queue _outThreadQueue = new LinkedList(); + private Object _outQueueLocker = new Object(); + private Stack pool = new Stack(); + + private MessgaeThread MessgaeThreadGet() { + if (pool.size() > 0) { + MessgaeThread msg = pool.pop(); + return msg; + } else + return new MessgaeThread(); + } + + private void MessgaeThreadReturn(MessgaeThread value) { + pool.push(value); + value._dataDelegate = null; + value._message = null; + } + + private static void sleep(int ms) { + try { + Thread.sleep(ms); + } catch (InterruptedException e) { + + } + } + + private void outThread() { + while (_running) { + sleep(5); + if (_outHasQueuedItems) { + Object obj = _outQueueLocker; + synchronized (obj) { + while (_outThreadQueue.size() > 0) { + MessgaeThread item = _outThreadQueue.poll(); + processOutItem(item); + } + _outHasQueuedItems = false; + } + } + } + } + + private void processOutItem(MessgaeThread item) { + ICallback _dataDelegate = item._dataDelegate; + Message message = item._message; + MessgaeThreadReturn(item); + if (_dataDelegate != null) { + _dataDelegate.action(message); + } + } + + public void start() { + if (_running) { + return; + } + _running = true; + if (_outThread == null) { + _outThread = new Thread(new Runnable() { + @Override + public void run() { + outThread(); + } + }); + _outThread.start(); + _outThread.setName("WriteMessage"); + } + } + + public void stop() { + Thread thread = new Thread(new Runnable() { + @Override + public void run() { + stopThread(); + } + }); + thread.start(); + } + + private void stopThread() { + _running = false; + + if (_outThread != null) { + _outThread.interrupt(); + } + _outThread = null; + } + + public void enqueueSend(ICallback callback, Message message) { + MessgaeThread hashtable = MessgaeThreadGet(); + hashtable._dataDelegate = callback; + hashtable._message = message; + Object obj = _outQueueLocker; + synchronized (obj) { + _outThreadQueue.offer(hashtable); + _outHasQueuedItems = true; + } + } +} diff --git a/web_group/src/main/java/com/group/service/io/IOHandler.java b/web_group/src/main/java/com/group/service/io/IOHandler.java new file mode 100644 index 0000000..ce90f90 --- /dev/null +++ b/web_group/src/main/java/com/group/service/io/IOHandler.java @@ -0,0 +1,251 @@ +package com.group.service.io; + +import com.group.service.SocketCode; +import com.taurus.core.entity.ITObject; +import com.taurus.core.entity.TObject; +import com.taurus.core.util.ByteArray; +import com.taurus.core.util.Logger; +import com.taurus.core.util.Utils; + +import java.io.IOException; + +/** + * 鍗忚鍖呭瓧鑺傛祦瑙f瀽 + * + * @author daixiwei daixiwei15@126.com + * + */ +class IOHandler { + private final Logger logger = Logger.getLogger(IOHandler.class); + private static final String ACTION_ID = "a"; + private static final String PARAM_ID = "p"; + static final int INT_BYTE_SIZE = 4; + + private static final ByteArray EMPTY_BUFFER = new ByteArray(); + private int _skipBytes = 0; + private ByteArray _buffer; + private int _expectedLength = -1; + private boolean _compressed = false; + + private SocketEngine _engine; + private SystemController _controller; + + /** + * 璇诲彇鐘舵€? + */ + private PacketReadState _readState = PacketReadState.WAIT_NEW_PACKET; + + IOHandler(SocketEngine client, SystemController controller) { + _engine = client; + _controller = controller; + } + + /** + * + * @param data + * @return + * @throws IOException + */ + private ByteArray handleDataSize(ByteArray data) throws Exception { + int num = data.readInt(); + int pos = INT_BYTE_SIZE; + if (num != -1) { + _expectedLength = num; + data = resizeByteArray(data, pos, data.length() - pos); + _readState = PacketReadState.WAIT_DATA; + return data; + } + _readState = PacketReadState.WAIT_DATA_SIZE_FRAGMENT; + _buffer.writeBytes(data.bytes()); + data = EMPTY_BUFFER; + return data; + } + + /** + * + * @param data + * @return + * @throws IOException + */ + private ByteArray handleDataSizeFragment(ByteArray data) throws Exception { + int count = INT_BYTE_SIZE - _buffer.length(); + if (data.length() >= count) { + _buffer.writeBytes(data.bytes(), 0, count); + int num2 = INT_BYTE_SIZE; + ByteArray array = new ByteArray(); + array.writeBytes(_buffer.bytes(), 0, num2); + array.position(0); + int num3 = array.readInt(); + _expectedLength = num3; + _buffer = new ByteArray(); + _readState = PacketReadState.WAIT_DATA; + if (data.length() > count) { + data = resizeByteArray(data, count, data.length() - count); + return data; + } + data = EMPTY_BUFFER; + return data; + } + _buffer.writeBytes(data.bytes()); + data = EMPTY_BUFFER; + return data; + } + + /** + * + * @param data + * @return + */ + private ByteArray handleInvalidData(ByteArray data) { + if (_skipBytes == 0) { + _readState = PacketReadState.WAIT_NEW_PACKET; + return data; + } + int pos = Math.min(data.length(), _skipBytes); + data = resizeByteArray(data, pos, data.length() - pos); + _skipBytes -= pos; + return data; + } + + /** + * + * @param data + * @return + */ + private ByteArray handleNewPacket(ByteArray data) throws Exception { + _buffer = new ByteArray(); + _expectedLength = -1; + _compressed = data.readByte() > 0; + data = resizeByteArray(data, 1, data.length() - 1); + _readState = PacketReadState.WAIT_DATA_SIZE; + return data; + } + + /** + * + * @param data + * @return + */ + private ByteArray handlePacketData(ByteArray data) throws Exception { + int count = _expectedLength - _buffer.length(); + boolean flag = data.length() > count; + ByteArray array = new ByteArray(data.bytes()); + try { + if (data.length() >= count) { + _buffer.writeBytes(data.bytes(), 0, count); + if (_compressed) { + _buffer.uncompress(); + } + dispatchRequest(_buffer); + _readState = PacketReadState.WAIT_NEW_PACKET; + } else { + _buffer.writeBytes(data.bytes()); + } + if (flag) { + data = resizeByteArray(data, count, data.length() - count); + return data; + } + data = EMPTY_BUFFER; + } catch (Exception exception) { + logger.error("Error handling data ", exception); + _skipBytes = count; + _readState = PacketReadState.INVALID_DATA; + return array; + } + return data; + } + + private void dispatchRequest(ByteArray _buffer) throws IOException { + ITObject requestObject = TObject.newFromBinaryData(_buffer.bytes()); + Packet packet = new Packet(); + if (requestObject.isNull(ACTION_ID)) { + throw new IOException("Request rejected: No Action ID in request!"); + } + packet.actionID = requestObject.getByte(ACTION_ID); + packet.parameters = requestObject.getTObject(PARAM_ID); + _controller.handlePacket(packet); + } + + /** + * + * @param data + * @throws IOException + */ + public void onDataRead(ByteArray data) throws IOException { + if (data.length() == 0) { + throw new IOException("Unexpected empty packet data: no readable bytes available!"); + } + + data.position(0); + try { + while (data.length() > 0) { + if (_readState == PacketReadState.WAIT_NEW_PACKET) { + data = handleNewPacket(data); + } else { + if (_readState == PacketReadState.WAIT_DATA_SIZE) { + data = handleDataSize(data); + continue; + } + if (_readState == PacketReadState.WAIT_DATA_SIZE_FRAGMENT) { + data = handleDataSizeFragment(data); + continue; + } + if (_readState == PacketReadState.WAIT_DATA) { + data = handlePacketData(data); + continue; + } + if (_readState == PacketReadState.INVALID_DATA) { + data = handleInvalidData(data); + } + } + } + } catch (Exception e) { + this.logger.error(e); + } + + } + + /** + * + * @param packet + * @throws IOException + */ + public void onDataWrite(Packet packet) throws IOException { + ByteArray binData = new ByteArray(); + + ITObject obj2 = new TObject(); + obj2.putByte(ACTION_ID, (byte) packet.actionID); + obj2.putTObject(PARAM_ID, packet.parameters); + byte[] array2 = obj2.toBinary(); + boolean compression = array2.length > _engine.getProtocolCompression(); + if (compression) { + array2 = Utils.compress(array2); + } + binData.writeByte((byte) (compression ? 1 : 0)); + binData.writeInt(array2.length); + binData.writeBytes(array2); + + if (_engine._socket.isConnected()) { + if (!_engine._socket.send(binData.bytes())) { + _engine.enqueueStatusCallback(SocketCode.SendError); + } + } + } + + /** + * + * @param array + * @param pos + * @param len + * @return + */ + private ByteArray resizeByteArray(ByteArray array, int pos, int len) { + byte[] dst = new byte[len]; + System.arraycopy(array.bytes(), pos, dst, 0, len); + return new ByteArray(dst); + } + + static enum PacketReadState { + WAIT_NEW_PACKET, WAIT_DATA_SIZE, WAIT_DATA_SIZE_FRAGMENT, WAIT_DATA, INVALID_DATA + } +} diff --git a/web_group/src/main/java/com/group/service/io/ISocket.java b/web_group/src/main/java/com/group/service/io/ISocket.java new file mode 100644 index 0000000..baabdea --- /dev/null +++ b/web_group/src/main/java/com/group/service/io/ISocket.java @@ -0,0 +1,113 @@ +package com.group.service.io; + +import com.group.service.SocketCode; +import com.taurus.core.util.Logger; +import com.taurus.core.util.StringUtil; + +/** + * Socket核心基类 + * @author daixiwei daixiwei15@126.com + * + */ +public abstract class ISocket { + protected static final Logger logger = Logger.getLogger(ISocket.class); + SocketEngine _engine; + /** + * 当前socket状态 + */ + public volatile SocketState state = SocketState.Disconnected; + /** + * 服务器地址 + */ + protected String serverAddress; + /** + * 服务器端口 + */ + protected int serverPort; + + /** + * 网络链接状态 + * @return + */ + public boolean isConnected() { + return state == SocketState.Connected; + } + + public ISocket(SocketEngine peerBase) { + if (peerBase == null) { + throw new RuntimeException("Can't init without peer"); + } + this._engine = peerBase; + } + + public boolean connect() { + boolean result; + if (state != SocketState.Disconnected) { + logger.error("Calling connect when the socket is not disconnected"); + result = false; + } else if (_engine == null) { + result = false; + } else if (!tryParseAddress(_engine.getServerAddress())) { + logger.error("Failed parsing address: " + _engine.getServerAddress()); + result = false; + } else { + result = true; + } + return result; + } + + /** + * 断开连接 + * @return + */ + public abstract boolean disconnect(); + + /** + * 发送流数据 + * @param data + * @return + */ + public abstract boolean send(byte[] data); + + protected void handleException(SocketCode statusCode) { + state = SocketState.Disconnecting; + _engine.enqueueStatusCallback(statusCode); + _engine.enqueueActionForDispatch(new Runnable() { + @Override + public void run() { + disconnect(); + } + }); + } + + /** + * 解析网络地址 + * @param addressAndPort + * @param address + * @param port + * @return + */ + protected boolean tryParseAddress(String addressAndPort) { + boolean result = true; + if (StringUtil.isEmpty(addressAndPort)) { + result = false; + } else { + int num = addressAndPort.lastIndexOf(':'); + if (num <= 0) { + result = false; + } else if (addressAndPort.indexOf(':') != num && (!addressAndPort.contains("[") || !addressAndPort.contains("]"))) { + result = false; + } else { + serverAddress = addressAndPort.substring(0, num); + String s = addressAndPort.substring(num + 1); + try { + serverPort = Integer.parseInt(s); + } catch (Exception e) { + result = false; + } + } + } + return result; + } + +} diff --git a/web_group/src/main/java/com/group/service/io/LagMonitor.java b/web_group/src/main/java/com/group/service/io/LagMonitor.java new file mode 100644 index 0000000..5eeca79 --- /dev/null +++ b/web_group/src/main/java/com/group/service/io/LagMonitor.java @@ -0,0 +1,104 @@ +package com.group.service.io; + +import com.taurus.core.util.Logger; + +import java.io.IOException; +import java.util.*; + + +/** + * 网络监听/心跳 + * @author daixiwei daixiwei15@126.com + * + */ +public class LagMonitor extends TimerTask { + private static final Logger logger = Logger.getLogger(LagMonitor.class); + private int _averagePingTime; + private Timer _pollTimer; + private int _queueSize; + private int _interval; + private boolean _run; + private SocketEngine _engine; + private List _valueQueue; + private Queue write_queue = new LinkedList(); + + public LagMonitor(SocketEngine engine, int interval, int queueSize) { + if (interval < 1) { + interval = 1; + } + _engine = engine; + _valueQueue = new ArrayList(); + _queueSize = queueSize; + _pollTimer = new Timer(); + _interval = interval * 1000; + _averagePingTime = 1000; + } + + public void fnPingPong() { + long w_time = write_queue.poll(); + long item = System.currentTimeMillis() - w_time; + if (_valueQueue.size() >= _queueSize) { + _valueQueue.remove(0); + } + _valueQueue.add(item); + if (_valueQueue.size() == 0) { + _averagePingTime = 0; + } + int num = 0; + for (int i = 0; i < _valueQueue.size(); ++i) { + num += _valueQueue.get(i); + } + _averagePingTime = (num / _valueQueue.size()); + } + + /** + * 启动监听 + */ + public void start() { + if (!isRunning()) { + this._run = true; + _pollTimer.scheduleAtFixedRate(this, 0, _interval); + } + } + + /** + * 停止监听 + */ + public void stop() { + if (isRunning()) { + this._run = false; + _pollTimer.purge(); + } + } + + public void destroy() { + stop(); + _pollTimer.cancel(); + _pollTimer = null; + _engine = null; + } + + /** + * 平均Ping的时间 + * @return + */ + public int getAveragePingTime() { + return _averagePingTime; + + } + + public boolean isRunning() { + return _run; + + } + + @Override + public void run() { + try { + _engine._controller.sendPingPong(); + write_queue.offer(System.currentTimeMillis()); + } catch (IOException e) { + logger.error(e); + } + } +} diff --git a/web_group/src/main/java/com/group/service/io/Packet.java b/web_group/src/main/java/com/group/service/io/Packet.java new file mode 100644 index 0000000..574fce0 --- /dev/null +++ b/web_group/src/main/java/com/group/service/io/Packet.java @@ -0,0 +1,20 @@ +package com.group.service.io; + +import com.taurus.core.entity.ITObject; + +/** + * 网络协议数据包 + * @author daixiwei daixiwei15@126.com + * + */ +public class Packet { + + /** + * 协议包ID + */ + public int actionID; + /** + * 参数数据 + */ + public ITObject parameters; +} diff --git a/web_group/src/main/java/com/group/service/io/SocketEngine.java b/web_group/src/main/java/com/group/service/io/SocketEngine.java new file mode 100644 index 0000000..68e07fb --- /dev/null +++ b/web_group/src/main/java/com/group/service/io/SocketEngine.java @@ -0,0 +1,160 @@ +package com.group.service.io; + +import com.group.service.*; +import com.group.service.TaurusClient.ConnectionProtocol; +import com.taurus.core.util.ICallback; +import com.taurus.core.util.Logger; + +import java.io.IOException; +import java.util.LinkedList; +import java.util.Queue; + +/** + * SocketEngine + * + * @author daixiwei daixiwei15@126.com + * + */ +public class SocketEngine implements ISocketLayer { + private static final Logger logger = Logger.getLogger(SocketEngine.class); + + ISocket _socket; + private String _sessionToken; + private String _serverAddress; + + private ICallback _onConnect; + ICallback _onEvent; + private Queue _actionQueue = new LinkedList(); + + SystemController _controller; + LagMonitor _lagMonitor; + IOHandler _packetHandler; + TaurusClient _client; + + public SocketEngine(TaurusClient client) { + _socket = new SocketTcp(this); + _controller = new SystemController(this); + _packetHandler = new IOHandler(this, _controller); + _lagMonitor = new LagMonitor(this, NetManager.TIMEOUT_TIME, 10); + } + + @Override + public void connect(String ip, String game) { + _serverAddress = ip; + _socket.connect(); + } + + @Override + public void disconnect() { + _socket.disconnect(); + if (_lagMonitor != null) + _lagMonitor.destroy(); + _lagMonitor = null; + } + + @Override + public void processEvent() { + if (_socket.isConnected() && _controller.isTimeOut()) { + if (_onConnect != null) + _onConnect.action(SocketCode.TimeoutDisconnect); + return; + } + + while (true) { + Runnable myAction; + synchronized (_actionQueue) { + if (_actionQueue.size() <= 0) { + break; + } + myAction = _actionQueue.poll(); + } + myAction.run(); + } + } + + public void write(Message msg) { + try { + _controller.sendRequest(msg); + } catch (IOException e) { + logger.error(e); + } + } + + void onStatusChanged(SocketCode statusCode) { + if (statusCode != SocketCode.Connect) { + _socket.disconnect(); + this.disconnect(); + } + System.out.println("status : " + statusCode); + logger.info("status : " + statusCode); + if (statusCode == SocketCode.Connect) { + this.onHandshake(); + } else { + if (_onConnect != null) + _onConnect.action(statusCode); + } + } + + void onHandshake() { + _controller.refreshTime(); + _lagMonitor.start(); + if (_onConnect != null) + _onConnect.action(SocketCode.Connect); + } + + void enqueueActionForDispatch(Runnable action) { + synchronized (_actionQueue) { + _actionQueue.offer(action); + } + } + + void enqueueStatusCallback(final SocketCode statusValue) { + synchronized (_actionQueue) { + _actionQueue.offer(new Runnable() { + @Override + public void run() { + onStatusChanged(statusValue); + } + }); + } + } + + + + + public String getServerAddress() { + return _serverAddress; + } + + @Override + public ConnectionProtocol getProtocol() { + return ConnectionProtocol.Tcp; + } + + public int getAveragePingTime() { + return _lagMonitor != null ? _lagMonitor.getAveragePingTime() : 1000; + } + + public void setSession(String session) { + _sessionToken = session == null ? "" : session; + } + + public String getSession() { + return _sessionToken; + + } + + @Override + public void setOnConnect(ICallback onConnect) { + _onConnect = onConnect; + } + + @Override + public void setOnEvent(ICallback onEvent) { + _onEvent = onEvent; + } + + public int getProtocolCompression() { + return 100; + } +} diff --git a/web_group/src/main/java/com/group/service/io/SocketState.java b/web_group/src/main/java/com/group/service/io/SocketState.java new file mode 100644 index 0000000..6b0046e --- /dev/null +++ b/web_group/src/main/java/com/group/service/io/SocketState.java @@ -0,0 +1,13 @@ +package com.group.service.io; + +/** + * 缃戠粶鐘舵€佹灇涓? + * @author daixiwei daixiwei15@126.com + * + */ +public enum SocketState{ + Disconnected, + Connecting, + Connected, + Disconnecting +} diff --git a/web_group/src/main/java/com/group/service/io/SocketTcp.java b/web_group/src/main/java/com/group/service/io/SocketTcp.java new file mode 100644 index 0000000..b0d0ee4 --- /dev/null +++ b/web_group/src/main/java/com/group/service/io/SocketTcp.java @@ -0,0 +1,156 @@ +package com.group.service.io; + +import com.group.service.NetManager; +import com.group.service.SocketCode; +import com.taurus.core.util.ByteArray; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.net.SocketAddress; + +/** + * Tcp协议 Socket核心类 + * @author daixiwei daixiwei15@126.com + * + */ +class SocketTcp extends ISocket { + private static final int READ_BUFFER_SIZE = 0x1000; + private byte[] _byteBuffer = new byte[READ_BUFFER_SIZE]; + + private Socket _connection; + private final Object _syncer = new Object(); + + public SocketTcp(SocketEngine npeer) { + super(npeer); + } + + @Override + public boolean connect() { + if (!super.connect()) { + return false; + } else { + state = SocketState.Connecting; + Thread t = new Thread(new Runnable() { + @Override + public void run() { + connectThread(); + } + }); + t.setName("mpnet connect thread"); + t.start(); + return true; + } + } + + private void connectThread() { + try { + SocketAddress remoteAddr = new InetSocketAddress(serverAddress, super.serverPort); + _connection = new Socket(); + _connection.setTcpNoDelay(true); + _connection.connect(remoteAddr, NetManager.TIMEOUT_TIME * 1000); + state = SocketState.Connected; + _engine.enqueueStatusCallback(SocketCode.Connect); + } catch (Exception ex) { + try { + if (_connection != null) + _connection.close(); + } catch (Exception e) { + logger.error("Connection close error", e); + } + logger.error("Connection error", ex); + handleException(SocketCode.ExceptionOnConnect); + return; + } + Thread _thrSocketReader = new Thread(new Runnable() { + @Override + public void run() { + __read(); + } + }); + _thrSocketReader.start(); + } + + @Override + public boolean disconnect() { + if (state == SocketState.Disconnected) + return false; + state = SocketState.Disconnecting; + synchronized (_syncer) { + if (_connection != null) { + try { + _connection.close(); + } catch (Exception ex) { + logger.error("Disconnect error", ex); + } + _connection = null; + } + } + state = SocketState.Disconnected; + return true; + } + + @Override + public boolean send(byte[] data) { + return __writeSocket(data); + } + + private boolean __writeSocket(byte[] buf) { + if (_connection == null || state != SocketState.Connected) { + logger.error("Trying to write to disconnected socket"); + return false; + } else { + try { + OutputStream outStream = _connection.getOutputStream(); + outStream.write(buf); + outStream.flush(); + } catch (Exception exception2) { + logger.error("General error writing to socket", exception2); + handleException(SocketCode.SendError); + return false; + } + } + return true; + } + + private void __read() { + int size = 0; + while (state == SocketState.Connected) { + try { + try { + InputStream inputStream = _connection.getInputStream(); + size = inputStream.read(_byteBuffer); + } catch (Exception ex) { + throw new TSocketException(SocketCode.ExceptionOnReceive); + } + if (size == 0 || size == -1) { +// System.out.println("socket----报错--------111111--------"); + throw new TSocketException(SocketCode.DisconnectByServer); + } + __handleBinaryData(_byteBuffer, size); + + } catch (TSocketException ex3) { + if (state != SocketState.Disconnecting && state.ordinal() > SocketState.Disconnected.ordinal()) { + logger.error("Receiving failed.: ", ex3); + super.handleException(ex3.socketCode); + } + } catch (Exception ex4) { + if (state != SocketState.Disconnecting && state.ordinal() > SocketState.Disconnected.ordinal()) { + logger.error("Receiving Exception: ", ex4); + super.handleException(SocketCode.ExceptionOnReceive); + } + } + } + + this.disconnect(); + } + + private void __handleBinaryData(byte[] buf, int size) throws IOException { + byte[] dst = new byte[size]; + System.arraycopy(buf, 0, dst, 0, size); + ByteArray array = new ByteArray(dst); + _engine._packetHandler.onDataRead(array); + } +} diff --git a/web_group/src/main/java/com/group/service/io/SystemController.java b/web_group/src/main/java/com/group/service/io/SystemController.java new file mode 100644 index 0000000..ec47b8d --- /dev/null +++ b/web_group/src/main/java/com/group/service/io/SystemController.java @@ -0,0 +1,177 @@ +package com.group.service.io; + +import com.group.service.Message; +import com.group.service.MessageResponse; +import com.group.service.NetManager; +import com.taurus.core.entity.ITObject; +import com.taurus.core.entity.TObject; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * 协议处理控制器 + * + * @author daixiwei daixiwei15@126.com + * + */ +public class SystemController { + public static final String CONNECT_TOKE = "$t"; + public static final String CONNECT_PROT_COMPRESSION = "$pc"; + public static final String REQUEST_CMD = "$c"; + public static final String REQUEST_GID = "$gi"; + public static final String REQUEST_PARM = "$p"; + public static final String REQUEST_RESULT = "$r"; + + /** + * pingpong + */ + public static final int ACTION_PINGPONG = 0; + /** + * 客户端请求 + */ + public static final int ACTION_REQUST_CMD = 1; + /** + * 服务器事件消息 + */ + public static final int ACTION_EVENT_CMD = 2; + + private SocketEngine _engine; + private long _lastTime; + private List _handleList = new ArrayList(); + private int _tempID; + + public SystemController(SocketEngine client) { + _engine = client; + _lastTime = System.currentTimeMillis(); + } + + private int _getValidID() { + return ++_tempID; + } + + + public void handlePacket(Packet packet) { + _lastTime = System.currentTimeMillis(); + switch (packet.actionID) { + case ACTION_PINGPONG: + fnPingPong(packet); + break; + case ACTION_REQUST_CMD: + fnOperationResponse(packet); + break; + case ACTION_EVENT_CMD: + fnOperationEvent(packet); + break; + } + } + + void sendRequest(Message msg) throws IOException { + Packet packet = new Packet(); + packet.actionID = SystemController.ACTION_REQUST_CMD; + ITObject obj = TObject.newInstance(); + obj.putString(SystemController.REQUEST_CMD, msg.command); + int gid = 0; + if (msg.callback != null) { + gid = _getValidID(); + msg.lastTime = System.currentTimeMillis(); + msg.gid = gid; + synchronized (_handleList) { + _handleList.add(msg); + } + } + obj.putInt(SystemController.REQUEST_GID, gid); + obj.putTObject(SystemController.REQUEST_PARM, msg.param); + packet.parameters = obj; + _engine._packetHandler.onDataWrite(packet); + } + + void sendPingPong() throws IOException { + Packet packet = new Packet(); + packet.actionID = SystemController.ACTION_PINGPONG; + packet.parameters = TObject.newInstance(); + _engine._packetHandler.onDataWrite(packet); + } + + private final void fnOperationResponse(final Packet packet) { + final int gid = packet.parameters.getInt(REQUEST_GID); + final int result = packet.parameters.getInt(REQUEST_RESULT); + ITObject tem = null; + if (packet.parameters.containsKey(REQUEST_PARM)) { + tem = packet.parameters.getTObject(REQUEST_PARM); + } + final ITObject param = tem; + _engine.enqueueActionForDispatch(new Runnable() { + @Override + public void run() { + handleOperationResponse(result, gid, param); + } + }); + } + + private void handleOperationResponse(int result, int gid, ITObject param) { + Message msg = null; + int index = 0; + int len = _handleList.size(); + if (gid > 0) { + for (int i = 0; i < len; ++i) { + if (gid == _handleList.get(i).gid) { + msg = _handleList.get(i); + index = i; + break; + } + } + } + + if (msg != null) { + if (msg.callback != null) { + MessageResponse response = new MessageResponse(); + msg.param = param; + response.messageData = msg; + response.returnCode = result; + msg.callback.action(response); + } + synchronized (_handleList) { + _handleList.remove(index); + } + } + } + + private final void fnOperationEvent(Packet packet) { + final String cmd = packet.parameters.getString(REQUEST_CMD); + ITObject tem = null; + if (packet.parameters.containsKey(REQUEST_PARM)) { + tem = packet.parameters.getTObject(REQUEST_PARM); + } + final ITObject param = tem; + _engine.enqueueActionForDispatch(new Runnable() { + @Override + public void run() { + handleEvent(cmd, param); + } + }); + } + + void handleEvent(String cmd, ITObject param) { + Message msg = new Message(); + msg.command = cmd; + msg.param = param; + if (_engine._onEvent != null) + _engine._onEvent.action(msg); + } + + + private final void fnPingPong(Packet packet) { + _engine._lagMonitor.fnPingPong(); + } + + public boolean isTimeOut() { + return (System.currentTimeMillis() - _lastTime) / 1000 > NetManager.TIMEOUT_TIME; + } + + public void refreshTime() { + _lastTime = System.currentTimeMillis(); + } + +} diff --git a/web_group/src/main/java/com/group/service/io/TSocketException.java b/web_group/src/main/java/com/group/service/io/TSocketException.java new file mode 100644 index 0000000..3875a23 --- /dev/null +++ b/web_group/src/main/java/com/group/service/io/TSocketException.java @@ -0,0 +1,23 @@ +package com.group.service.io; + +import com.group.service.SocketCode; + +/** + * 缃戠粶閫氫俊寮傚父 + * @author daixiwei daixiwei15@126.com + * + */ +public class TSocketException extends Exception{ + + /** + * + */ + private static final long serialVersionUID = 1L; + + public SocketCode socketCode; + + public TSocketException(SocketCode code) { + socketCode = code; + } + +} diff --git a/web_group/target/ROOT.war b/web_group/target/ROOT.war new file mode 100644 index 0000000..fe67441 Binary files /dev/null and b/web_group/target/ROOT.war differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/MainServer$1.class b/web_group/target/ROOT/WEB-INF/classes/com/group/MainServer$1.class new file mode 100644 index 0000000..5be7db9 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/MainServer$1.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/MainServer.class b/web_group/target/ROOT/WEB-INF/classes/com/group/MainServer.class new file mode 100644 index 0000000..5a68b37 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/MainServer.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/Protocol.class b/web_group/target/ROOT/WEB-INF/classes/com/group/Protocol.class new file mode 100644 index 0000000..39b6429 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/Protocol.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/WebInterceptor.class b/web_group/target/ROOT/WEB-INF/classes/com/group/WebInterceptor.class new file mode 100644 index 0000000..a1e29ad Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/WebInterceptor.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/controller/GroupController.class b/web_group/target/ROOT/WEB-INF/classes/com/group/controller/GroupController.class new file mode 100644 index 0000000..705166c Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/controller/GroupController.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/controller/GroupLogController.class b/web_group/target/ROOT/WEB-INF/classes/com/group/controller/GroupLogController.class new file mode 100644 index 0000000..6deddec Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/controller/GroupLogController.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/controller/GroupRoomController.class b/web_group/target/ROOT/WEB-INF/classes/com/group/controller/GroupRoomController.class new file mode 100644 index 0000000..fbb4d46 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/controller/GroupRoomController.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/job/UpdatePlayRoomJob.class b/web_group/target/ROOT/WEB-INF/classes/com/group/job/UpdatePlayRoomJob.class new file mode 100644 index 0000000..58f00e4 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/job/UpdatePlayRoomJob.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/GroupLogService.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/GroupLogService.class new file mode 100644 index 0000000..ff2742a Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/GroupLogService.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/GroupPublisherService.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/GroupPublisherService.class new file mode 100644 index 0000000..9767603 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/GroupPublisherService.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/GroupRoomService.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/GroupRoomService.class new file mode 100644 index 0000000..4d7c4fe Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/GroupRoomService.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/GroupService.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/GroupService.class new file mode 100644 index 0000000..c56bb12 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/GroupService.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/HttpClient$1.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/HttpClient$1.class new file mode 100644 index 0000000..69d66ad Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/HttpClient$1.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/HttpClient$2.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/HttpClient$2.class new file mode 100644 index 0000000..cfa8c19 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/HttpClient$2.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/HttpClient.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/HttpClient.class new file mode 100644 index 0000000..d9bbfa0 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/HttpClient.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/ISocketLayer.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/ISocketLayer.class new file mode 100644 index 0000000..d9bdab8 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/ISocketLayer.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/Message.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/Message.class new file mode 100644 index 0000000..f76099a Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/Message.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/MessageResponse.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/MessageResponse.class new file mode 100644 index 0000000..9e7f12e Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/MessageResponse.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/NetManager.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/NetManager.class new file mode 100644 index 0000000..92ed8bc Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/NetManager.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/RSAUtils.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/RSAUtils.class new file mode 100644 index 0000000..68c42a5 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/RSAUtils.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/SocketCode.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/SocketCode.class new file mode 100644 index 0000000..a0a8443 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/SocketCode.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/TaurusClient$1.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/TaurusClient$1.class new file mode 100644 index 0000000..1922d9d Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/TaurusClient$1.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/TaurusClient$2.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/TaurusClient$2.class new file mode 100644 index 0000000..23d9ecb Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/TaurusClient$2.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/TaurusClient$3.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/TaurusClient$3.class new file mode 100644 index 0000000..8c46eaf Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/TaurusClient$3.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/TaurusClient$4.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/TaurusClient$4.class new file mode 100644 index 0000000..9a49b30 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/TaurusClient$4.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/TaurusClient$5.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/TaurusClient$5.class new file mode 100644 index 0000000..43b7c1f Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/TaurusClient$5.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/TaurusClient$ConnectionProtocol.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/TaurusClient$ConnectionProtocol.class new file mode 100644 index 0000000..ed70f49 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/TaurusClient$ConnectionProtocol.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/TaurusClient$NetClientEvent.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/TaurusClient$NetClientEvent.class new file mode 100644 index 0000000..e3c1d6f Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/TaurusClient$NetClientEvent.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/TaurusClient.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/TaurusClient.class new file mode 100644 index 0000000..6ea1fa7 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/TaurusClient.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/ThreadManager$1.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/ThreadManager$1.class new file mode 100644 index 0000000..be9a347 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/ThreadManager$1.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/ThreadManager$2.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/ThreadManager$2.class new file mode 100644 index 0000000..9f390c6 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/ThreadManager$2.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/ThreadManager$MessgaeThread.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/ThreadManager$MessgaeThread.class new file mode 100644 index 0000000..e3a97cf Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/ThreadManager$MessgaeThread.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/ThreadManager.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/ThreadManager.class new file mode 100644 index 0000000..3e68eea Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/ThreadManager.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/IOHandler$PacketReadState.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/IOHandler$PacketReadState.class new file mode 100644 index 0000000..3c4bbb9 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/IOHandler$PacketReadState.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/IOHandler.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/IOHandler.class new file mode 100644 index 0000000..14f9875 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/IOHandler.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/ISocket$1.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/ISocket$1.class new file mode 100644 index 0000000..15f9eee Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/ISocket$1.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/ISocket.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/ISocket.class new file mode 100644 index 0000000..52bb737 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/ISocket.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/LagMonitor.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/LagMonitor.class new file mode 100644 index 0000000..8452990 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/LagMonitor.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/Packet.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/Packet.class new file mode 100644 index 0000000..4f8fb38 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/Packet.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SocketEngine$1.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SocketEngine$1.class new file mode 100644 index 0000000..4cd7876 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SocketEngine$1.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SocketEngine.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SocketEngine.class new file mode 100644 index 0000000..0cdb161 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SocketEngine.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SocketState.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SocketState.class new file mode 100644 index 0000000..c6eef02 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SocketState.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SocketTcp$1.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SocketTcp$1.class new file mode 100644 index 0000000..0f67447 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SocketTcp$1.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SocketTcp$2.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SocketTcp$2.class new file mode 100644 index 0000000..48848f2 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SocketTcp$2.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SocketTcp.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SocketTcp.class new file mode 100644 index 0000000..79c7d03 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SocketTcp.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SystemController$1.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SystemController$1.class new file mode 100644 index 0000000..7298488 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SystemController$1.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SystemController$2.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SystemController$2.class new file mode 100644 index 0000000..599e7f7 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SystemController$2.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SystemController.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SystemController.class new file mode 100644 index 0000000..efff50b Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/SystemController.class differ diff --git a/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/TSocketException.class b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/TSocketException.class new file mode 100644 index 0000000..26374e0 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/classes/com/group/service/io/TSocketException.class differ diff --git a/web_group/target/ROOT/WEB-INF/lib/HikariCP-3.3.1.jar b/web_group/target/ROOT/WEB-INF/lib/HikariCP-3.3.1.jar new file mode 100644 index 0000000..476e0c0 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/lib/HikariCP-3.3.1.jar differ diff --git a/web_group/target/ROOT/WEB-INF/lib/activation-1.1.1.jar b/web_group/target/ROOT/WEB-INF/lib/activation-1.1.1.jar new file mode 100644 index 0000000..1b703ab Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/lib/activation-1.1.1.jar differ diff --git a/web_group/target/ROOT/WEB-INF/lib/aliyun-java-sdk-core-4.0.3.jar b/web_group/target/ROOT/WEB-INF/lib/aliyun-java-sdk-core-4.0.3.jar new file mode 100644 index 0000000..eeab8e4 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/lib/aliyun-java-sdk-core-4.0.3.jar differ diff --git a/web_group/target/ROOT/WEB-INF/lib/c3p0-0.9.1.1.jar b/web_group/target/ROOT/WEB-INF/lib/c3p0-0.9.1.1.jar new file mode 100644 index 0000000..8d283e4 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/lib/c3p0-0.9.1.1.jar differ diff --git a/web_group/target/ROOT/WEB-INF/lib/commons-codec-1.9.jar b/web_group/target/ROOT/WEB-INF/lib/commons-codec-1.9.jar new file mode 100644 index 0000000..ef35f1c Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/lib/commons-codec-1.9.jar differ diff --git a/web_group/target/ROOT/WEB-INF/lib/commons-logging-1.2.jar b/web_group/target/ROOT/WEB-INF/lib/commons-logging-1.2.jar new file mode 100644 index 0000000..93a3b9f Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/lib/commons-logging-1.2.jar differ diff --git a/web_group/target/ROOT/WEB-INF/lib/commons-pool2-2.4.2.jar b/web_group/target/ROOT/WEB-INF/lib/commons-pool2-2.4.2.jar new file mode 100644 index 0000000..fdf8b6f Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/lib/commons-pool2-2.4.2.jar differ diff --git a/web_group/target/ROOT/WEB-INF/lib/data_cache-1.0.1.jar b/web_group/target/ROOT/WEB-INF/lib/data_cache-1.0.1.jar new file mode 100644 index 0000000..880a688 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/lib/data_cache-1.0.1.jar differ diff --git a/web_group/target/ROOT/WEB-INF/lib/gson-2.8.5.jar b/web_group/target/ROOT/WEB-INF/lib/gson-2.8.5.jar new file mode 100644 index 0000000..0d5baf3 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/lib/gson-2.8.5.jar differ diff --git a/web_group/target/ROOT/WEB-INF/lib/httpclient-4.5.3.jar b/web_group/target/ROOT/WEB-INF/lib/httpclient-4.5.3.jar new file mode 100644 index 0000000..8af4561 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/lib/httpclient-4.5.3.jar differ diff --git a/web_group/target/ROOT/WEB-INF/lib/httpcore-4.4.6.jar b/web_group/target/ROOT/WEB-INF/lib/httpcore-4.4.6.jar new file mode 100644 index 0000000..16ed0d1 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/lib/httpcore-4.4.6.jar differ diff --git a/web_group/target/ROOT/WEB-INF/lib/jaxb-api-2.1.jar b/web_group/target/ROOT/WEB-INF/lib/jaxb-api-2.1.jar new file mode 100644 index 0000000..be3d6dc Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/lib/jaxb-api-2.1.jar differ diff --git a/web_group/target/ROOT/WEB-INF/lib/jaxb-core-2.1.14.jar b/web_group/target/ROOT/WEB-INF/lib/jaxb-core-2.1.14.jar new file mode 100644 index 0000000..2329ef1 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/lib/jaxb-core-2.1.14.jar differ diff --git a/web_group/target/ROOT/WEB-INF/lib/jaxb-impl-2.1.jar b/web_group/target/ROOT/WEB-INF/lib/jaxb-impl-2.1.jar new file mode 100644 index 0000000..f3341e5 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/lib/jaxb-impl-2.1.jar differ diff --git a/web_group/target/ROOT/WEB-INF/lib/jdom-1.0.jar b/web_group/target/ROOT/WEB-INF/lib/jdom-1.0.jar new file mode 100644 index 0000000..288e64c Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/lib/jdom-1.0.jar differ diff --git a/web_group/target/ROOT/WEB-INF/lib/jedis-2.9.0.jar b/web_group/target/ROOT/WEB-INF/lib/jedis-2.9.0.jar new file mode 100644 index 0000000..f4d27d3 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/lib/jedis-2.9.0.jar differ diff --git a/web_group/target/ROOT/WEB-INF/lib/log4j-1.2.17.jar b/web_group/target/ROOT/WEB-INF/lib/log4j-1.2.17.jar new file mode 100644 index 0000000..1d425cf Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/lib/log4j-1.2.17.jar differ diff --git a/web_group/target/ROOT/WEB-INF/lib/mysql-connector-java-8.0.16.jar b/web_group/target/ROOT/WEB-INF/lib/mysql-connector-java-8.0.16.jar new file mode 100644 index 0000000..dd45f8c Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/lib/mysql-connector-java-8.0.16.jar differ diff --git a/web_group/target/ROOT/WEB-INF/lib/protobuf-java-3.6.1.jar b/web_group/target/ROOT/WEB-INF/lib/protobuf-java-3.6.1.jar new file mode 100644 index 0000000..8a18789 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/lib/protobuf-java-3.6.1.jar differ diff --git a/web_group/target/ROOT/WEB-INF/lib/quartz-2.2.3.jar b/web_group/target/ROOT/WEB-INF/lib/quartz-2.2.3.jar new file mode 100644 index 0000000..158c1c2 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/lib/quartz-2.2.3.jar differ diff --git a/web_group/target/ROOT/WEB-INF/lib/slf4j-api-1.7.25.jar b/web_group/target/ROOT/WEB-INF/lib/slf4j-api-1.7.25.jar new file mode 100644 index 0000000..0143c09 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/lib/slf4j-api-1.7.25.jar differ diff --git a/web_group/target/ROOT/WEB-INF/lib/stax-api-1.0-2.jar b/web_group/target/ROOT/WEB-INF/lib/stax-api-1.0-2.jar new file mode 100644 index 0000000..015169d Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/lib/stax-api-1.0-2.jar differ diff --git a/web_group/target/ROOT/WEB-INF/lib/taurus-core-1.0.1.jar b/web_group/target/ROOT/WEB-INF/lib/taurus-core-1.0.1.jar new file mode 100644 index 0000000..41b6c73 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/lib/taurus-core-1.0.1.jar differ diff --git a/web_group/target/ROOT/WEB-INF/lib/taurus-web-1.0.1.jar b/web_group/target/ROOT/WEB-INF/lib/taurus-web-1.0.1.jar new file mode 100644 index 0000000..19fd6a0 Binary files /dev/null and b/web_group/target/ROOT/WEB-INF/lib/taurus-web-1.0.1.jar differ diff --git a/web_group/target/ROOT/WEB-INF/web.xml b/web_group/target/ROOT/WEB-INF/web.xml new file mode 100644 index 0000000..a71270c --- /dev/null +++ b/web_group/target/ROOT/WEB-INF/web.xml @@ -0,0 +1,19 @@ + + + + + taurus-web + com.taurus.web.WebFilter + + main + com.group.MainServer + + + + + taurus-web + /* + + diff --git a/web_group/target/ROOT/config/bank_hp.lua b/web_group/target/ROOT/config/bank_hp.lua new file mode 100644 index 0000000..d3a02ce --- /dev/null +++ b/web_group/target/ROOT/config/bank_hp.lua @@ -0,0 +1,19 @@ +local tag_hp = tonumber(redis.call('hget', KEYS[1],'hp')) +local bank_hp = tonumber(redis.call('hget', KEYS[2],KEYS[3])) +bank_hp = not bank_hp and 0 or bank_hp +local hp = tonumber(ARGV[1]) +local opt = tonumber(ARGV[2]) +if opt==0 then + if bank_hp < hp then + return 3 + end + bank_hp = redis.call('hincrBy',KEYS[2],KEYS[3],-hp) + tag_hp = redis.call('hincrBy',KEYS[1],'hp',hp) +else + if tag_hp < hp then + return 4 + end + bank_hp = redis.call('hincrBy',KEYS[2],KEYS[3],hp) + tag_hp = redis.call('hincrBy',KEYS[1],'hp',-hp) +end +return {tag_hp,bank_hp} \ No newline at end of file diff --git a/web_group/target/ROOT/config/mgr.lua b/web_group/target/ROOT/config/mgr.lua new file mode 100644 index 0000000..50b3c69 --- /dev/null +++ b/web_group/target/ROOT/config/mgr.lua @@ -0,0 +1,25 @@ +-- redis.call('select',0) +local mgr_hp = tonumber(redis.call('hget', KEYS[1],'hp')) +local tag_hp = tonumber(redis.call('hget', KEYS[2],'hp')) + +local ulev = tonumber(ARGV[2]) +local hp = tonumber(ARGV[1]) +if ulev == 3 or ulev == 2 then + if hp > 0 and mgr_hp 0 and reward_hp < hp then + return 3 +else + reward_hp = redis.call('incrBy',KEYS[1],-hp) + tag_hp = redis.call('hincrBy',KEYS[2],'hp',hp) +end +return {reward_hp,tag_hp} \ No newline at end of file diff --git a/web_group/target/ROOT/config/taurus-core.xml b/web_group/target/ROOT/config/taurus-core.xml new file mode 100644 index 0000000..49049a5 --- /dev/null +++ b/web_group/target/ROOT/config/taurus-core.xml @@ -0,0 +1,99 @@ + + + log4j.properties + + + database + com.taurus.core.plugin.database.DataBasePlugin + + + + 100 + + 5 + + 180000 + + select 1 + + 10000 + + 60000 + + + + false + true + utf-8 + + UTC + + true + + 250 + + 2048 + + + + + + db1 + com.mysql.cj.jdbc.Driver + jdbc:mysql://192.168.0.11:6060/wb_game + proto_ff + 37du_game + + + + + + redis + com.taurus.core.plugin.redis.RedisPlugin + + + + 80 + + 8 + + 2 + + -1 + + true + + true + + true + + 100 + + 60000 + + 30000 + + 1800000 + + true + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web_group/target/ROOT/config/trade.lua b/web_group/target/ROOT/config/trade.lua new file mode 100644 index 0000000..c03a438 --- /dev/null +++ b/web_group/target/ROOT/config/trade.lua @@ -0,0 +1,12 @@ +local mgr_hp = tonumber(redis.call('hget', KEYS[1],'hp')) +local tag_hp = tonumber(redis.call('hget', KEYS[2],'hp')) +mgr_hp = not mgr_hp and 0 or mgr_hp +tag_hp = not tag_hp and 0 or tag_hp +local hp = tonumber(ARGV[1]) +if hp > 0 and mgr_hp