game_machine 0.0.11 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +12 -1
  3. data/Gemfile.lock +32 -47
  4. data/Rakefile +0 -27
  5. data/bin/bundle_run.sh +1 -0
  6. data/bin/game_machine +29 -27
  7. data/config/cluster.conf +6 -5
  8. data/config/default.conf +164 -0
  9. data/config/game_machine.sql +33 -0
  10. data/config/game_messages.proto +87 -25
  11. data/config/gamecloud.conf +140 -0
  12. data/config/messages.proto +46 -53
  13. data/config/test.conf +149 -0
  14. data/game_machine.gemspec +10 -5
  15. data/games/boot.rb +3 -0
  16. data/games/example/data/game_data.yml +4 -4
  17. data/games/example/lib/aggressive_npc.rb +1 -1
  18. data/games/example/lib/game.rb +1 -2
  19. data/games/example/lib/player_register.rb +1 -1
  20. data/games/routes.rb +9 -0
  21. data/games/tutorial/boot.rb +12 -0
  22. data/games/tutorial/item_manager.rb +256 -0
  23. data/games/tutorial/object_store.rb +55 -0
  24. data/games/tutorial/seed.rb +52 -0
  25. data/games/tutorial/sql_store.rb +30 -0
  26. data/java/project/build.gradle +134 -0
  27. data/java/project/component.erb +719 -0
  28. data/java/{gradle.properties → project/gradle.properties} +1 -1
  29. data/java/project/gradle/wrapper/gradle-wrapper.jar +0 -0
  30. data/java/{gradle → project/gradle}/wrapper/gradle-wrapper.properties +2 -2
  31. data/java/{gradlew → project/gradlew} +0 -0
  32. data/java/{gradlew.bat → project/gradlew.bat} +0 -0
  33. data/java/project/local_lib/AdminUi.jar +0 -0
  34. data/java/{local_lib/protostuff-compiler-1.0.7-jarjar.jar → project/local_lib/protostuff-compiler-1.0.8-jarjar.jar} +0 -0
  35. data/java/project/local_lib/sigar/libsigar-amd64-freebsd-6.so +0 -0
  36. data/java/project/local_lib/sigar/libsigar-amd64-linux.so +0 -0
  37. data/java/project/local_lib/sigar/libsigar-amd64-solaris.so +0 -0
  38. data/java/project/local_lib/sigar/libsigar-ia64-hpux-11.sl +0 -0
  39. data/java/project/local_lib/sigar/libsigar-ia64-linux.so +0 -0
  40. data/java/project/local_lib/sigar/libsigar-pa-hpux-11.sl +0 -0
  41. data/java/project/local_lib/sigar/libsigar-ppc-aix-5.so +0 -0
  42. data/java/project/local_lib/sigar/libsigar-ppc-linux.so +0 -0
  43. data/java/project/local_lib/sigar/libsigar-ppc64-aix-5.so +0 -0
  44. data/java/project/local_lib/sigar/libsigar-ppc64-linux.so +0 -0
  45. data/java/project/local_lib/sigar/libsigar-s390x-linux.so +0 -0
  46. data/java/project/local_lib/sigar/libsigar-sparc-solaris.so +0 -0
  47. data/java/project/local_lib/sigar/libsigar-sparc64-solaris.so +0 -0
  48. data/java/project/local_lib/sigar/libsigar-universal-macosx.dylib +0 -0
  49. data/java/project/local_lib/sigar/libsigar-universal64-macosx.dylib +0 -0
  50. data/java/project/local_lib/sigar/libsigar-x86-freebsd-5.so +0 -0
  51. data/java/project/local_lib/sigar/libsigar-x86-freebsd-6.so +0 -0
  52. data/java/project/local_lib/sigar/libsigar-x86-linux.so +0 -0
  53. data/java/project/local_lib/sigar/libsigar-x86-solaris.so +0 -0
  54. data/java/project/local_lib/sigar/sigar-amd64-winnt.dll +0 -0
  55. data/java/project/local_lib/sigar/sigar-x86-winnt.dll +0 -0
  56. data/java/project/local_lib/sigar/sigar-x86-winnt.lib +0 -0
  57. data/java/project/model.erb +99 -0
  58. data/java/{settings.gradle → project/settings.gradle} +0 -0
  59. data/java/project/src/main/java/com/game_machine/authentication/DefaultAuthenticator.java +28 -0
  60. data/java/project/src/main/java/com/game_machine/authentication/PlayerAuthenticator.java +6 -0
  61. data/java/project/src/main/java/com/game_machine/authentication/PublicAuthenticator.java +20 -0
  62. data/java/{src → project/src}/main/java/com/game_machine/core/ActorFactory.java +0 -0
  63. data/java/{src → project/src}/main/java/com/game_machine/core/ActorUtil.java +13 -0
  64. data/java/project/src/main/java/com/game_machine/core/AuthorizedPlayers.java +23 -0
  65. data/java/project/src/main/java/com/game_machine/core/ClientMessageDecoder.java +36 -0
  66. data/java/project/src/main/java/com/game_machine/core/ClientMessageEncoder.java +19 -0
  67. data/java/project/src/main/java/com/game_machine/core/CloudClient.java +298 -0
  68. data/java/{src → project/src}/main/java/com/game_machine/core/CommandProxy.java +0 -0
  69. data/java/project/src/main/java/com/game_machine/core/Commands.java +20 -0
  70. data/java/project/src/main/java/com/game_machine/core/DatastoreCommands.java +43 -0
  71. data/java/project/src/main/java/com/game_machine/core/DbConnectionPool.java +72 -0
  72. data/java/project/src/main/java/com/game_machine/core/DefaultMovementVerifier.java +56 -0
  73. data/java/{src → project/src}/main/java/com/game_machine/core/EntitySerializer.java +0 -0
  74. data/java/project/src/main/java/com/game_machine/core/EntityTracking.java +119 -0
  75. data/java/{src → project/src}/main/java/com/game_machine/core/EventStreamHandler.java +1 -1
  76. data/java/project/src/main/java/com/game_machine/core/GameActor.java +73 -0
  77. data/java/project/src/main/java/com/game_machine/core/GameMachineLoader.java +43 -0
  78. data/java/project/src/main/java/com/game_machine/core/GameMessageActor.java +44 -0
  79. data/java/project/src/main/java/com/game_machine/core/Grid.java +255 -0
  80. data/java/{src → project/src}/main/java/com/game_machine/core/GridValue.java +0 -0
  81. data/java/project/src/main/java/com/game_machine/core/Hashring.java +66 -0
  82. data/java/{src → project/src}/main/java/com/game_machine/core/IActorFactory.java +0 -0
  83. data/java/project/src/main/java/com/game_machine/core/LocalLinkedBuffer.java +20 -0
  84. data/java/project/src/main/java/com/game_machine/core/MessageGateway.java +120 -0
  85. data/java/project/src/main/java/com/game_machine/core/MessagePersister.java +26 -0
  86. data/java/project/src/main/java/com/game_machine/core/MonoProxy.java +39 -0
  87. data/java/project/src/main/java/com/game_machine/core/MovementVerifier.java +7 -0
  88. data/java/{src → project/src}/main/java/com/game_machine/core/NetMessage.java +10 -6
  89. data/java/project/src/main/java/com/game_machine/core/PersistentMessage.java +9 -0
  90. data/java/project/src/main/java/com/game_machine/core/PlayerCommands.java +31 -0
  91. data/java/project/src/main/java/com/game_machine/core/TcpServer.java +100 -0
  92. data/java/project/src/main/java/com/game_machine/core/TcpServerHandler.java +54 -0
  93. data/java/project/src/main/java/com/game_machine/core/TcpServerInitializer.java +32 -0
  94. data/java/project/src/main/java/com/game_machine/core/UdpClient.java +86 -0
  95. data/java/{src → project/src}/main/java/com/game_machine/core/UdpServer.java +18 -27
  96. data/java/{src → project/src}/main/java/com/game_machine/core/UdpServerHandler.java +23 -26
  97. data/java/project/src/main/java/com/game_machine/core/Vector3.java +159 -0
  98. data/java/project/src/main/java/com/game_machine/orm/models/PlayerItem.java +118 -0
  99. data/java/project/src/main/java/com/game_machine/orm/models/TestObject.java +110 -0
  100. data/java/project/src/main/java/com/game_machine/tutorial/LootGenerator.java +26 -0
  101. data/java/{src → project/src}/main/resources/game_machine.java.stg +3 -1
  102. data/java/project/src/main/resources/logback.properties +13 -0
  103. data/java/project/src/main/resources/logback.xml +76 -0
  104. data/java/{src → project/src}/main/resources/protostuff.properties +0 -0
  105. data/java/src/main/java/game/MyGameActor.java +26 -0
  106. data/lib/game_machine.rb +17 -16
  107. data/lib/game_machine/actor.rb +1 -1
  108. data/lib/game_machine/actor/base.rb +8 -31
  109. data/lib/game_machine/actor/builder.rb +5 -6
  110. data/lib/game_machine/actor/game_actor.rb +55 -0
  111. data/lib/game_machine/actor/reloadable.rb +6 -1
  112. data/lib/game_machine/akka.rb +26 -32
  113. data/lib/game_machine/app_config.rb +39 -26
  114. data/lib/game_machine/application.rb +56 -62
  115. data/lib/game_machine/client_manager.rb +14 -8
  116. data/lib/game_machine/cloud_updater.rb +51 -0
  117. data/lib/game_machine/cluster_monitor.rb +3 -3
  118. data/lib/game_machine/commands.rb +1 -1
  119. data/lib/game_machine/commands/misc_commands.rb +4 -8
  120. data/lib/game_machine/commands/player_commands.rb +8 -0
  121. data/lib/game_machine/console.rb +1 -0
  122. data/lib/game_machine/console/build.rb +57 -24
  123. data/lib/game_machine/console/bundle.rb +95 -0
  124. data/lib/game_machine/console/deploy.rb +30 -0
  125. data/lib/game_machine/console/install.rb +70 -36
  126. data/lib/game_machine/console/server.rb +2 -69
  127. data/lib/game_machine/data_store.rb +111 -15
  128. data/lib/game_machine/data_stores/couchbase.rb +8 -3
  129. data/lib/game_machine/data_stores/gamecloud.rb +93 -0
  130. data/lib/game_machine/data_stores/jdbc.rb +98 -0
  131. data/lib/game_machine/default_handlers.rb +2 -0
  132. data/lib/game_machine/default_handlers/team_handler.rb +51 -0
  133. data/lib/game_machine/default_handlers/zone_manager.rb +30 -0
  134. data/lib/game_machine/endpoints.rb +0 -4
  135. data/lib/game_machine/endpoints/udp_incoming.rb +13 -5
  136. data/lib/game_machine/endpoints/udp_outgoing.rb +15 -9
  137. data/lib/game_machine/game_systems.rb +0 -2
  138. data/lib/game_machine/game_systems/agents/controller.rb +2 -2
  139. data/lib/game_machine/game_systems/entity_tracking.rb +0 -3
  140. data/lib/game_machine/game_systems/region_manager.rb +3 -2
  141. data/lib/game_machine/game_systems/region_service.rb +2 -2
  142. data/lib/game_machine/game_systems/remote_echo.rb +10 -0
  143. data/lib/game_machine/game_systems/team_manager.rb +2 -11
  144. data/lib/game_machine/grid.rb +5 -18
  145. data/lib/game_machine/handlers/authentication.rb +1 -9
  146. data/lib/game_machine/handlers/game.rb +27 -2
  147. data/lib/game_machine/handlers/player_authentication.rb +87 -0
  148. data/lib/game_machine/handlers/request.rb +9 -11
  149. data/lib/game_machine/hocon_config.rb +81 -0
  150. data/lib/game_machine/java_lib.rb +14 -1
  151. data/lib/game_machine/logger.rb +10 -23
  152. data/lib/game_machine/models.rb +1 -0
  153. data/lib/game_machine/mono_server.rb +6 -1
  154. data/lib/game_machine/object_db.rb +12 -6
  155. data/lib/game_machine/protobuf.rb +1 -1
  156. data/lib/game_machine/protobuf/game_messages.rb +13 -3
  157. data/lib/game_machine/protobuf/generate.rb +107 -5
  158. data/lib/game_machine/restart_watcher.rb +1 -1
  159. data/lib/game_machine/routes.rb +23 -0
  160. data/lib/game_machine/scheduler.rb +1 -1
  161. data/lib/game_machine/securerandom.rb +2 -0
  162. data/lib/game_machine/system_stats.rb +28 -7
  163. data/lib/game_machine/version.rb +1 -1
  164. data/lib/game_machine/wavefront_ext.rb +47 -0
  165. data/lib/game_machine/write_behind_cache.rb +24 -9
  166. data/mono/server/Makefile +1 -1
  167. data/mono/server/Newtonsoft.Json.dll +0 -0
  168. data/mono/server/build.bat +1 -1
  169. data/mono/server/callable.cs +9 -0
  170. data/mono/server/echo.cs +17 -0
  171. data/mono/server/message_router.cs +16 -23
  172. data/mono/server/messages.cs +1792 -417
  173. data/mono/server/protobuf-net.dll +0 -0
  174. data/mono/server/server.cs +120 -0
  175. data/mono/server/server.exe +0 -0
  176. data/pathfinding/astar.cpp +149 -0
  177. data/pathfinding/build.sh +6 -0
  178. data/pathfinding/build.txt +16 -0
  179. data/pathfinding/crowd.cpp +194 -0
  180. data/pathfinding/include/astar.h +49 -0
  181. data/pathfinding/include/common.h +5 -0
  182. data/pathfinding/include/crowd.h +43 -0
  183. data/pathfinding/include/micropather.h +511 -0
  184. data/pathfinding/include/navmesh.h +114 -0
  185. data/pathfinding/include/pathfinder.h +24 -0
  186. data/pathfinding/main.cpp +108 -17
  187. data/pathfinding/micropather.cpp +1062 -0
  188. data/pathfinding/navmesh.cpp +408 -0
  189. data/pathfinding/overrides/DetourCrowd.cpp +1446 -0
  190. data/pathfinding/overrides/DetourNavMeshQuery.cpp +3551 -0
  191. data/pathfinding/overrides/DetourNavMeshQuery.h +538 -0
  192. data/pathfinding/pathfinder.cpp +117 -0
  193. data/pathfinding/{bin → premake}/premake4 +0 -0
  194. data/pathfinding/premake/premake4.exe +0 -0
  195. data/pathfinding/premake4.lua +12 -3
  196. data/spec/actor/actor_spec.rb +0 -7
  197. data/spec/client_manager_spec.rb +1 -1
  198. data/spec/couchproxy_spec.rb +38 -0
  199. data/spec/entity_persistence_spec.rb +129 -0
  200. data/spec/game_systems/team_manager_spec.rb +2 -2
  201. data/spec/hashring_spec.rb +17 -39
  202. data/spec/java_grid_spec.rb +0 -2
  203. data/spec/misc_spec.rb +111 -0
  204. data/spec/mono_spec.rb +50 -3
  205. data/spec/reliable_message_spec.rb +38 -0
  206. data/spec/spec_helper.rb +4 -4
  207. data/spec/spec_helper_minimal.rb +10 -0
  208. data/web/app.rb +108 -86
  209. data/web/config/trinidad.yml +1 -0
  210. data/web/views/add_player.erb +25 -0
  211. data/web/views/index.erb +0 -0
  212. data/web/views/layout.erb +48 -0
  213. data/web/views/login.erb +25 -0
  214. data/web/views/players.erb +24 -0
  215. metadata +209 -94
  216. data/config/config.example.yml +0 -100
  217. data/config/regions.example.yml +0 -9
  218. data/games/example/lib/authentication_handler.rb +0 -69
  219. data/games/models.rb +0 -3
  220. data/games/models/clan_member.rb +0 -8
  221. data/games/models/clan_profile.rb +0 -9
  222. data/games/models/player.rb +0 -7
  223. data/games/plugins.rb +0 -1
  224. data/games/plugins/team_handler.rb +0 -49
  225. data/games/preload.rb +0 -13
  226. data/java/.gitignore +0 -1
  227. data/java/build.gradle +0 -95
  228. data/java/component.erb +0 -396
  229. data/java/gradle/wrapper/gradle-wrapper.jar +0 -0
  230. data/java/src/main/java/com/game_machine/core/GameMachineLoader.java +0 -25
  231. data/java/src/main/java/com/game_machine/core/Grid.java +0 -195
  232. data/java/src/main/resources/logback.xml +0 -14
  233. data/java/src/main/resources/logging.properties +0 -3
  234. data/lib/game_machine/actor/mono_actor.rb +0 -89
  235. data/lib/game_machine/auth_handlers/base.rb +0 -21
  236. data/lib/game_machine/auth_handlers/public.rb +0 -34
  237. data/lib/game_machine/endpoints/mono_gateway.rb +0 -87
  238. data/lib/game_machine/endpoints/tcp.rb +0 -51
  239. data/lib/game_machine/endpoints/tcp_handler.rb +0 -75
  240. data/lib/game_machine/endpoints/udp.rb +0 -88
  241. data/lib/game_machine/game_loader.rb +0 -46
  242. data/lib/game_machine/game_systems/region_settings.rb +0 -13
  243. data/lib/game_machine/hashring.rb +0 -48
  244. data/lib/game_machine/settings.rb +0 -11
  245. data/mono/server/actor.cs +0 -37
  246. data/mono/server/iactor.cs +0 -11
  247. data/mono/server/message_util.cs +0 -29
  248. data/mono/server/proxy_client.cs +0 -73
  249. data/mono/server/proxy_server.cs +0 -30
  250. data/mono/server/test_actor.cs +0 -33
  251. data/pathfinding/include/pathfind.h +0 -167
  252. data/pathfinding/pathfind.cpp +0 -174
  253. data/pathfinding/pathfinder.cs +0 -66
  254. data/script/server.sh +0 -109
  255. data/script/watch.sh +0 -11
  256. data/spec/commands/navigation_commands_spec.rb +0 -51
  257. data/spec/game_systems/entity_tracking_spec.rb +0 -64
  258. data/spec/navigation/detour_navmesh_spec.rb +0 -34
  259. data/spec/navigation/detour_path_spec.rb +0 -25
  260. data/spec/udp_server_spec.rb +0 -10
  261. data/web/controllers/auth_controller.rb +0 -19
  262. data/web/controllers/base_controller.rb +0 -16
  263. data/web/controllers/index_controller.rb +0 -7
  264. data/web/controllers/log_controller.rb +0 -47
  265. data/web/controllers/messages_controller.rb +0 -59
  266. data/web/controllers/player_register_controller.rb +0 -15
  267. data/web/views/game_messages.haml +0 -45
  268. data/web/views/index.haml +0 -6
  269. data/web/views/layout.haml +0 -41
  270. data/web/views/logs.haml +0 -32
  271. data/web/views/player_register.haml +0 -22
  272. data/web/views/player_registered.haml +0 -2
  273. data/web/views/register_layout.haml +0 -22
  274. data/web/views/restart.haml +0 -35
@@ -1,100 +0,0 @@
1
- ---
2
- development:
3
- servers:
4
- default:
5
- environment: development
6
- # Handles requests for matchmaking and custom filtering for teams.
7
- # If no team handler is defined defaults are used
8
- team_handler: Plugins::TeamHandler
9
- # Authorization handler. Public allows any authtoken to be used and
10
- # does not check username/password
11
- auth_handler: Example::AuthenticationHandler
12
- #auth_handler: GameMachine::AuthHandlers::Public
13
- # Class that handles user registration via web page
14
- player_register_handler: Example::PlayerRegister
15
- # Player manager. Receives player status updates
16
- player_manager: Example::PlayerManager
17
- # Top level actor that handles game messages. Don't change this
18
- game_handler: GameMachine::Handlers::Request
19
- # Hook for accessing location updates from players (cheat prevention)
20
- entity_tracking_handler: Example::TrackingHandler
21
- # Size of the router for incoming message from all clients
22
- game_handler_routers: 10
23
- # Also in the pipeline for all incoming requests, should be set the same as
24
- # game_handler_routers
25
- request_handler_routers: 10
26
- # router size for the udp actor that handles all incoming upd messages
27
- udp_routers: 10
28
- # What data store the object database will use (one of memory, mapdb, or couchbase)
29
- data_store: mapdb
30
- # Advanced settings for write behind cache. -1 disables. This is fine for
31
- # all but large games with high traffic (hundreds of writes per second)
32
- cache_write_interval: -1
33
- cache_writes_per_second: -1
34
- # Spatial grids. default, aoe, and local_chat are required.
35
- # value is grid size, cell size, and update frequency
36
- grids:
37
- default: 4000, 50, 1
38
- aoe: 4000, 5, 1
39
- local_chat: 4000, 10, 10
40
- # Couchbase config
41
- couchbase_bucket: default
42
- couchbase_password:
43
- couchbase_servers:
44
- - http://127.0.0.1:8091/pools
45
- http_enabled: true
46
- http_host: 0.0.0.0
47
- http_port: 3000
48
- udp_enabled: true
49
- udp_host: 0.0.0.0
50
- udp_port: 24130
51
- tcp_enabled: true
52
- tcp_host: 0.0.0.0
53
- tcp_port: 8700
54
- akka_host: 127.0.0.1
55
- akka_port: 2551
56
- # array of seed servers. Required if node is in a cluster
57
- seeds: [default,seed01]
58
- # Mono server settings
59
- mono_enabled: false
60
- mono_dll: test_actor.dll
61
- mono_gateway_host: 127.0.0.1
62
- mono_gateway_port: 8800
63
- seed01:
64
- environment: development
65
- team_handler: Plugins::TeamHandler
66
- auth_handler: Example::AuthenticationHandler
67
- player_register_handler: Example::PlayerRegister
68
- player_manager: Example::PlayerManager
69
- game_handler: GameMachine::Handlers::Request
70
- entity_tracking_handler: Example::TrackingHandler
71
- game_handler_routers: 10
72
- request_handler_routers: 10
73
- udp_routers: 10
74
- data_store: mapdb
75
- cache_write_interval: -1
76
- cache_writes_per_second: -1
77
- grids:
78
- default: 4000, 50, 1
79
- aoe: 4000, 5, 1
80
- local_chat: 4000, 10, 10
81
- couchbase_bucket: default
82
- couchbase_password:
83
- couchbase_servers:
84
- - http://127.0.0.1:8091/pools
85
- http_enabled: false
86
- http_host: 127.0.0.1
87
- http_port: 3000
88
- udp_enabled: true
89
- udp_host: 0.0.0.0
90
- udp_port: 24130
91
- tcp_enabled: false
92
- tcp_host: 0.0.0.0
93
- tcp_port: 8700
94
- akka_host: 127.0.0.1
95
- akka_port: 2551
96
- seeds: [default,seed01]
97
- mono_enabled: false
98
- mono_dll: test_actor.dll
99
- mono_gateway_host: 127.0.0.1
100
- mono_gateway_port: 8800
@@ -1,9 +0,0 @@
1
- ---
2
- development:
3
- regions:
4
- zone1: Example::ZoneManager
5
- zone2: Example::ZoneManager
6
- test:
7
- regions:
8
- zone1: GameMachine::GameSystems::Zone1Manager
9
- zone2: GameMachine::GameSystems::Zone2Manager
@@ -1,69 +0,0 @@
1
-
2
- # This class is set in the configuration.
3
-
4
- # This is a simple implementation that works together with the built in
5
- # user registration and login via http. User data is stored in the object database.
6
-
7
- # The minimum necessary to implement is the authtoken_for method. That method can
8
- # block as it is only called once when the client first connects and is cached
9
- # internally after that. So you could make an external http call for example.
10
- require 'digest/md5'
11
- module Example
12
- class AuthenticationHandler
13
- include Models
14
-
15
- def initialize
16
- @sessions = {}
17
- end
18
-
19
- # Returns true is authorized, false if not
20
- def authorize(username,password)
21
- GameMachine.logger.info "authorize: #{username} #{password}"
22
- if user = User.find(username,5000)
23
- GameMachine.logger.info "user: #{user.id} #{user.password}"
24
- if password == user.password
25
- @sessions[username] = authtoken(username,password)
26
- user.authtoken = @sessions[username]
27
- user.save
28
- return @sessions[username]
29
- else
30
- GameMachine.logger.info "user: #{user.id} password does not match"
31
- false
32
- end
33
- else
34
- GameMachine.logger.info "user: #{username} not found"
35
- false
36
- end
37
- false
38
- end
39
-
40
- # Returns a session token for a logged in user. This must be a string and
41
- # should not be too long, as it gets sent with every message.
42
- def authtoken_for(username)
43
- if authtoken = @sessions.fetch(username,nil)
44
- return authtoken
45
-
46
- # user authenticated on different server, we have to look up their authtoken
47
- # and save it in the local sessions hash
48
- elsif user = User.find(username)
49
- if user.authtoken
50
- @sessions[username] = authtoken
51
- return user.authtoken
52
- else
53
- GameMachine.logger.info "Authoken for #{username} is nil"
54
- nil
55
- end
56
- else
57
- GameMachine.logger.info "User #{username} not found"
58
- nil
59
- end
60
- end
61
-
62
- private
63
-
64
- def authtoken(username,password)
65
- Digest::MD5.hexdigest("#{username}#{password}#{rand(10000)}")
66
- end
67
- end
68
- end
69
-
@@ -1,3 +0,0 @@
1
- require_relative 'models/clan_member'
2
- require_relative 'models/clan_profile'
3
- require_relative 'models/player'
@@ -1,8 +0,0 @@
1
- module Game
2
- module Models
3
- class ClanMember < GameMachine::Model
4
- attribute :name, String
5
- attribute :rating, String
6
- end
7
- end
8
- end
@@ -1,9 +0,0 @@
1
- module Game
2
- module Models
3
- class ClanProfile < GameMachine::Model
4
- attribute :name, String
5
- attribute :rating, String
6
- attribute :members, Array
7
- end
8
- end
9
- end
@@ -1,7 +0,0 @@
1
- module Game
2
- module Models
3
- class Player < GameMachine::Model
4
-
5
- end
6
- end
7
- end
@@ -1 +0,0 @@
1
- require_relative 'plugins/team_handler'
@@ -1,49 +0,0 @@
1
-
2
- module Plugins
3
- class TeamHandler
4
-
5
- attr_reader :teams
6
- def initialize
7
- update_teams
8
- end
9
-
10
- def update_teams
11
- @teams = GameMachine::Models::Teams.find('teams')
12
- end
13
-
14
- # Should return a Match object if a match is found, otherwise nil
15
- def match!(team_name)
16
- GameMachine.logger.info "match! team_name:#{team_name} teams:#{teams}"
17
- if team = teams.teams.select {|team| team.name != team_name}.first
18
- return GameMachine::Models::StartMatch.new(:team_names => [team_name,team.name])
19
- end
20
- nil
21
- end
22
-
23
- # Called when Game Machine has started the match
24
- def match_started(match)
25
-
26
- end
27
-
28
- # Filter you can apply to the teams list sent to clients
29
- # You can add whatever extra fields you want to the TeamsRequest
30
- # class on the client and they will show up here.
31
- def teams_filter(teams,teams_request)
32
- teams
33
- end
34
-
35
- # return true if member has rights to create team
36
- def can_create_team?(team_name,member)
37
- true
38
- end
39
-
40
- # return true if member has rights to join team
41
- def can_add_member?(team_name,member)
42
- true
43
- end
44
-
45
- def destroy_on_owner_leave?
46
- true
47
- end
48
- end
49
- end
@@ -1,13 +0,0 @@
1
-
2
- # If you have things you want loaded before game machine starts up, this
3
- # is the place to do it. Examples might be specific handlers, or loading up
4
- # static data that needs to be there before the rest of the system starts up.
5
-
6
- # json models that are global accross all games/plugins
7
- require_relative 'models'
8
-
9
- # Plugins that extend or work with core Game Machine features
10
- require_relative 'plugins'
11
-
12
- # This needs to be loaded before the entity tracking system starts
13
- require_relative 'example/lib/tracking_handler'
@@ -1 +0,0 @@
1
- /bin
@@ -1,95 +0,0 @@
1
- apply plugin: 'java'
2
- apply plugin: 'maven'
3
- apply plugin: 'eclipse'
4
- apply plugin:'application'
5
- apply plugin:'scala'
6
-
7
- group = 'game_machine'
8
- version = '0.0.1'
9
-
10
-
11
- description = """"""
12
-
13
- sourceCompatibility = 1.7
14
- targetCompatibility = 1.7
15
-
16
- repositories {
17
- flatDir(dirs: 'third_party')
18
- mavenRepo url: "http://repo.typesafe.com/typesafe/releases/"
19
- mavenRepo url: "http://files.couchbase.com/maven2/"
20
- mavenRepo url: "http://repo.maven.apache.org/maven2"
21
- }
22
-
23
- dependencies {
24
- compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.+'
25
- //compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.+'
26
- compile group: 'com.typesafe.akka', name: "akka-actor_$scala_version", version:"$akka_version"
27
- compile group: 'com.typesafe.akka', name: "akka-remote_$scala_version", version:"$akka_version"
28
- compile group: 'com.typesafe.akka', name: "akka-testkit_$scala_version", version:"$akka_version"
29
- //compile group: 'com.typesafe.akka', name: "akka-camel_$scala_version", version:"$akka_version"
30
- compile group: 'com.typesafe.akka', name: "akka-kernel_$scala_version", version:"$akka_version"
31
- compile group: 'com.typesafe.akka', name: "akka-agent_$scala_version", version:"$akka_version"
32
- compile group: 'com.typesafe.akka', name: "akka-contrib_$scala_version", version:"$akka_version"
33
- compile group: 'com.typesafe.akka', name: "akka-cluster_$scala_version", version:"$akka_version"
34
- //compile group: 'com.typesafe.akka', name: "akka-zeromq_$scala_version", version:"$akka_version"
35
-
36
- compile 'com.dyuproject.protostuff:protostuff-uberjar:1.0.7'
37
- compile 'com.dyuproject.protostuff:protostuff:1.0.7'
38
- //compile 'com.dyuproject.protostuff:protostuff-compiler:1.0.7'
39
- compile 'com.dyuproject.protostuff:protostuff-json:1.0.7'
40
- //compile 'com.dyuproject.protostuff:protostuff-yaml:1.0.7'
41
- //compile 'com.dyuproject.protostuff:protostuff-xml:1.0.7'
42
-
43
- //compile group: 'com.barchart.udt', name: 'barchart-udt-bundle', version:'2.3.0'
44
- compile group: 'com.google.code.findbugs', name: 'jsr305', version:'2.0.1'
45
- compile group: 'org.javassist', name: 'javassist', version:'3.17.1-GA'
46
- //compile(group: 'io.netty', name: 'netty-all', version:'4.0.11.Final')
47
- //compile 'org.apache.camel:camel-jetty:2.10.3'
48
- //compile(group: 'couchbase', name: 'couchbase-client', version:'1.4.2')
49
- //compile 'com.basho.riak:riak-client:1.4.4'
50
- compile 'com.couchbase.client:couchbase-client:1.4.2'
51
- compile 'redis.clients:jedis:2.2.1'
52
- compile 'org.mapdb:mapdb:1.0.3'
53
- compile 'io.netty:netty-testsuite:4.0.20.Final'
54
-
55
- }
56
-
57
- task wrapper(type: Wrapper) {
58
- gradleVersion = '1.7'
59
- }
60
- task uberjar(type: Jar) {
61
- from files(sourceSets.main.output.classesDir)
62
- from configurations.runtime.asFileTree.files.collect { zipTree(it) }
63
- }
64
-
65
- task codegen(type: Exec) {
66
- File templateFile = file('protogen.rb')
67
- commandLine 'jruby',templateFile
68
- }
69
-
70
- task protogen(type: Exec) {
71
- File configFile = file('src/main/resources/protostuff.properties')
72
- File jar = file('protostuff-compiler-1.0.7-jarjar.jar')
73
- commandLine 'java','-jar',jar,configFile
74
- }
75
-
76
- test {
77
- useTestNG()
78
- //outputs.upToDateWhen { false }
79
- testLogging.showStandardStreams = true
80
- dependsOn cleanTest
81
- testLogging { exceptionFormat "full" }
82
- }
83
-
84
- task install_libs(type: Copy) {
85
- into "$buildDir/../lib"
86
- from configurations.runtime
87
- from "$buildDir/libs"
88
- }
89
-
90
- task install_libs_ruby(type: Copy) {
91
- into "$buildDir/../lib"
92
- from configurations.runtime
93
- from "$buildDir/libs"
94
- }
95
-
@@ -1,396 +0,0 @@
1
-
2
- package GameMachine.Messages;
3
-
4
- import java.io.Externalizable;
5
- import java.io.IOException;
6
- import java.io.ObjectInput;
7
- import java.io.ObjectOutput;
8
- import java.util.ArrayList;
9
- import java.util.List;
10
-
11
- import com.dyuproject.protostuff.ByteString;
12
- import com.dyuproject.protostuff.GraphIOUtil;
13
- import com.dyuproject.protostuff.Input;
14
- import com.dyuproject.protostuff.Message;
15
- import com.dyuproject.protostuff.Output;
16
- import com.dyuproject.protostuff.ProtobufOutput;
17
-
18
- import java.io.ByteArrayOutputStream;
19
- import com.dyuproject.protostuff.JsonIOUtil;
20
- import com.dyuproject.protostuff.LinkedBuffer;
21
- import com.dyuproject.protostuff.ProtobufIOUtil;
22
- import com.dyuproject.protostuff.ProtostuffIOUtil;
23
- import com.dyuproject.protostuff.runtime.RuntimeSchema;
24
-
25
- import java.util.ArrayList;
26
- import java.util.List;
27
- import java.util.Map;
28
- import GameMachine.Messages.Entity;
29
-
30
- import com.dyuproject.protostuff.Pipe;
31
- import com.dyuproject.protostuff.Schema;
32
- import com.dyuproject.protostuff.UninitializedMessageException;
33
-
34
- public final class <%=klass%> implements Externalizable, Message<<%=klass%>>, Schema<<%=klass%>>
35
- {
36
-
37
- <%- message.nestedEnumGroups.each do |group| -%>
38
- public enum <%=group.name %> implements com.dyuproject.protostuff.EnumLite<<%=group.name %>>
39
- {
40
- <%- group.values.each do |value| -%>
41
- <%= "#{value.getName}(#{value.getNumber})" %><%= value.getNumber == (group.values.length - 1) ? ";" : "," %>
42
- <%- end -%>
43
-
44
- public final int number;
45
-
46
- private Corpus (int number)
47
- {
48
- this.number = number;
49
- }
50
-
51
- public int getNumber()
52
- {
53
- return number;
54
- }
55
-
56
- public static Corpus valueOf(int number)
57
- {
58
- switch(number)
59
- {
60
- <%- group.values.each do |value| -%>
61
- case <%= "#{value.getNumber}: return (#{value.getName})" %>;
62
- <%- end -%>
63
- default: return null;
64
- }
65
- }
66
- }
67
- <%- end -%>
68
-
69
-
70
- public static Schema<<%=klass%>> getSchema()
71
- {
72
- return DEFAULT_INSTANCE;
73
- }
74
-
75
- public static <%=klass%> getDefaultInstance()
76
- {
77
- return DEFAULT_INSTANCE;
78
- }
79
-
80
- static final <%=klass%> DEFAULT_INSTANCE = new <%=klass%>();
81
-
82
- <%- message.getFields.each do |field| -%>
83
- <%- if field.isRepeated -%>
84
- public List<<%=get_type(field)%>> <%=field.name -%>;
85
- <%- else -%>
86
- public <%=get_type(field)%> <%=field.name -%>;
87
- <%- end -%>
88
- <%- end -%>
89
-
90
-
91
-
92
- public <%=klass%>()
93
- {
94
-
95
- }
96
-
97
-
98
- <%- if klass == 'Entity' -%>
99
- public ArrayList<String> componentNames() {
100
- ArrayList<String> names = new ArrayList<String>();
101
- <%- messages.each do |m| -%>
102
- <%- if message.getFields.collect {|f| f.name}.include?(varname(m.getName)) -%>
103
- if (this.has<%=m.getName%>()) {
104
- names.add(this.<%=varname(m.getName)%>.getClass().getSimpleName());
105
- }
106
- <%- end -%>
107
- <%- end -%>
108
- return names;
109
- }
110
- <%- end -%>
111
-
112
- <%- message.getFields.each do |field| -%>
113
- <%- field_name = field.name.slice(0,1).capitalize + field.name.slice(1..-1) -%>
114
-
115
- <%- if field.isRepeated -%>
116
- public List<<%=get_type(field)%>> get<%=field_name -%>List() {
117
- return <%= field.name %>;
118
- }
119
-
120
- public <%=klass%> set<%=field_name %>List(List<<%=get_type(field)%>> <%=field.name%>) {
121
- this.<%=field.name%> = <%=field.name%>;
122
- return this;
123
- }
124
-
125
- public <%=get_type(field) %> get<%=field_name %>(int index) {
126
- return <%=field.name%> == null ? null : <%=field.name%>.get(index);
127
- }
128
-
129
- public int get<%=field_name %>Count() {
130
- return <%=field.name%> == null ? 0 : <%=field.name%>.size();
131
- }
132
-
133
- public <%=klass%> add<%=field_name %>(<%=get_type(field) %> <%=field.name%>) {
134
- if(this.<%=field.name%> == null)
135
- this.<%=field.name%> = new ArrayList<<%=get_type(field) %>>();
136
- this.<%=field.name%>.add(<%=field.name%>);
137
- return this;
138
- }
139
-
140
- <%- else -%>
141
- public <%=get_type(field)%> get<%=field_name -%>() {
142
- return <%= field.name %>;
143
- }
144
-
145
- public <%= field_name == '_EntityId' ? 'void' : klass%> set<%=field_name %>(<%=get_type(field)%> <%=field.name%>) {
146
- this.<%=field.name%> = <%=field.name%>;
147
- <%= field_name == '_EntityId' ? '' : 'return this;'%>
148
- }
149
-
150
- public Boolean has<%=field_name %>() {
151
- return <%=field.name%> == null ? false : true;
152
- }
153
- <%- end -%>
154
- <%- end -%>
155
-
156
-
157
- // java serialization
158
-
159
- public void readExternal(ObjectInput in) throws IOException
160
- {
161
- GraphIOUtil.mergeDelimitedFrom(in, this, this);
162
- }
163
-
164
- public void writeExternal(ObjectOutput out) throws IOException
165
- {
166
- GraphIOUtil.writeDelimitedTo(out, this, this);
167
- }
168
-
169
- // message method
170
-
171
- public Schema<<%=klass%>> cachedSchema()
172
- {
173
- return DEFAULT_INSTANCE;
174
- }
175
-
176
- // schema methods
177
-
178
- public <%=klass%> newMessage()
179
- {
180
- return new <%=klass%>();
181
- }
182
-
183
- public Class<<%=klass%>> typeClass()
184
- {
185
- return <%=klass%>.class;
186
- }
187
-
188
- public String messageName()
189
- {
190
- return <%=klass%>.class.getSimpleName();
191
- }
192
-
193
- public String messageFullName()
194
- {
195
- return <%=klass%>.class.getName();
196
- }
197
-
198
- public boolean isInitialized(<%=klass%> message)
199
- {
200
- return true;
201
- }
202
-
203
- public void mergeFrom(Input input, <%=klass%> message) throws IOException
204
- {
205
- for(int number = input.readFieldNumber(this);; number = input.readFieldNumber(this))
206
- {
207
- switch(number)
208
- {
209
- case 0:
210
- return;
211
- <%- message.getFields.each do |field| -%>
212
- case <%=field.number%>:
213
- <%- if field.isRepeated -%>
214
- if(message.<%=field.name%> == null)
215
- message.<%=field.name%> = new ArrayList<<%=get_type(field)%>>();
216
- <%- if field.isMessageField -%>
217
- message.<%=field.name%>.add(input.mergeObject(null, <%=get_type(field)%>.getSchema()));
218
- <%- elsif field.enumField -%>
219
- message.<%=field.name%>.add(<%=get_type(field)%>.valueOf(input.readEnum()));
220
- <%- else -%>
221
- message.<%=field.name%>.add(input.read<%=field.getClass.getSimpleName%>());
222
- <%- end -%>
223
- break;
224
- <%- else -%>
225
- <%- if field.isMessageField -%>
226
- message.<%=field.name%> = input.mergeObject(message.<%=field.name%>, <%=get_type(field)%>.getSchema());
227
- break;
228
- <%- elsif field.enumField -%>
229
- message.<%=field.name%> = <%=classname(field.name)%>.valueOf(input.readEnum());
230
- break;
231
- <%- else -%>
232
- message.<%=field.name%> = input.read<%=field.getClass.getSimpleName%>();
233
- break;
234
- <%- end -%>
235
-
236
- <%- end -%>
237
- <%- end -%>
238
-
239
- default:
240
- input.handleUnknownField(number, this);
241
- }
242
- }
243
- }
244
-
245
-
246
- public void writeTo(Output output, <%=klass%> message) throws IOException
247
- {
248
- <%- message.getFields.each do |field| -%>
249
-
250
- <%- if field.isRequired -%>
251
- if(message.<%=field.name%> == null)
252
- throw new UninitializedMessageException(message);
253
- <%- end %>
254
-
255
- <%- if field.isRepeated -%>
256
- if(message.<%=field.name%> != null)
257
- {
258
- for(<%=get_type(field)%> <%=field.name%> : message.<%=field.name%>)
259
- {
260
- if(<%=field.name%> != null) {
261
- <%- if field.isMessageField -%>
262
- output.writeObject(<%=field.number%>, <%=field.name%>, <%=get_type(field)%>.getSchema(), true);
263
- <%- elsif field.enumField -%>
264
- output.writeEnum(<%=field.number%>, <%=field.name%>.number, true);
265
- <%- else -%>
266
- output.write<%=field.getClass.getSimpleName%>(<%=field.number%>, <%=field.name%>, true);
267
- <%- end -%>
268
- }
269
- }
270
- }
271
- <%- else -%>
272
- <%- if field.isMessageField -%>
273
- if(message.<%=field.name%> != null)
274
- output.writeObject(<%=field.number%>, message.<%=field.name%>, <%=get_type(field)%>.getSchema(), false);
275
- <%- elsif field.enumField -%>
276
- output.writeEnum(<%=field.number%>, message.<%=field.name%>.number, false);
277
- <%- else -%>
278
- if(message.<%=field.name%> != null)
279
- output.write<%=field.getClass.getSimpleName%>(<%=field.number%>, message.<%=field.name%>, false);
280
- <%- end -%>
281
-
282
- <%- end -%>
283
- <%- end -%>
284
-
285
- }
286
-
287
- public String getFieldName(int number)
288
- {
289
- switch(number)
290
- {
291
- <%- message.getFields.each do |field| -%>
292
- case <%=field.number%>: return "<%=field.name%>";
293
- <%- end -%>
294
- default: return null;
295
- }
296
- }
297
-
298
- public int getFieldNumber(String name)
299
- {
300
- final Integer number = __fieldMap.get(name);
301
- return number == null ? 0 : number.intValue();
302
- }
303
-
304
- private static final java.util.HashMap<String,Integer> __fieldMap = new java.util.HashMap<String,Integer>();
305
- static
306
- {
307
- <%- message.getFields.each do |field| -%>
308
- __fieldMap.put("<%=field.name%>", <%=field.number%>);
309
- <%- end -%>
310
- }
311
-
312
- public static List<String> getFields() {
313
- ArrayList<String> fieldNames = new ArrayList<String>();
314
- String fieldName = null;
315
- Integer i = 1;
316
-
317
- while(true) {
318
- fieldName = <%=klass%>.getSchema().getFieldName(i);
319
- if (fieldName == null) {
320
- break;
321
- }
322
- fieldNames.add(fieldName);
323
- i++;
324
- }
325
- return fieldNames;
326
- }
327
-
328
- public static <%=klass%> parseFrom(byte[] bytes) {
329
- <%=klass%> message = new <%=klass%>();
330
- ProtobufIOUtil.mergeFrom(bytes, message, RuntimeSchema.getSchema(<%=klass%>.class));
331
- return message;
332
- }
333
-
334
- public <%=klass%> clone() {
335
- byte[] bytes = this.toByteArray();
336
- <%=klass%> <%=varname(klass)%> = <%=klass%>.parseFrom(bytes);
337
- return <%=varname(klass)%>;
338
- }
339
-
340
- public byte[] toByteArray() {
341
- return toProtobuf();
342
- //return toJson();
343
- }
344
-
345
- public byte[] toJson() {
346
- boolean numeric = false;
347
- ByteArrayOutputStream out = new ByteArrayOutputStream();
348
- try {
349
- JsonIOUtil.writeTo(out, this, <%=klass%>.getSchema(), numeric);
350
- } catch (IOException e) {
351
- e.printStackTrace();
352
- throw new RuntimeException("Json encoding failed");
353
- }
354
- return out.toByteArray();
355
- }
356
-
357
- public byte[] toPrefixedByteArray() {
358
- LinkedBuffer buffer = LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE);
359
- Schema<<%=klass%>> schema = RuntimeSchema.getSchema(<%=klass%>.class);
360
-
361
- final ByteArrayOutputStream out = new ByteArrayOutputStream();
362
- final ProtobufOutput output = new ProtobufOutput(buffer);
363
- try
364
- {
365
- schema.writeTo(output, this);
366
- final int size = output.getSize();
367
- ProtobufOutput.writeRawVarInt32Bytes(out, size);
368
- final int msgSize = LinkedBuffer.writeTo(out, buffer);
369
- assert size == msgSize;
370
-
371
- buffer.clear();
372
- return out.toByteArray();
373
- }
374
- catch (IOException e)
375
- {
376
- throw new RuntimeException("Serializing to a byte array threw an IOException " +
377
- "(should never happen).", e);
378
- }
379
-
380
- }
381
-
382
- public byte[] toProtobuf() {
383
- LinkedBuffer buffer = LinkedBuffer.allocate(8024);
384
- byte[] bytes = null;
385
-
386
- try {
387
- bytes = ProtobufIOUtil.toByteArray(this, RuntimeSchema.getSchema(<%=klass%>.class), buffer);
388
- buffer.clear();
389
- } catch (Exception e) {
390
- e.printStackTrace();
391
- throw new RuntimeException("Protobuf encoding failed");
392
- }
393
- return bytes;
394
- }
395
-
396
- }