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
@@ -12,16 +12,14 @@ module GameMachine
12
12
  if message.has_player_logout
13
13
  if Authentication.authenticated?(message.player)
14
14
  unregister_client(message)
15
- commands.misc.player_status_change(message.player.id,:unregistered)
16
15
  end
17
16
  elsif message.has_player
18
- update_entities(message)
17
+ update_entities(message)
19
18
  if Authentication.authenticated?(message.player)
20
19
  game_handler.tell(message)
21
20
  else
22
21
  if @auth_handler.authenticate!(message.player)
23
22
  register_client(message)
24
- commands.misc.player_status_change(message.player.id,:registered)
25
23
  game_handler.tell(message)
26
24
  end
27
25
  end
@@ -35,6 +33,14 @@ module GameMachine
35
33
 
36
34
  private
37
35
 
36
+ def update_entities(message)
37
+ if message.get_entity_list
38
+ message.get_entity_list.each do |entity|
39
+ entity.set_player(message.player)
40
+ end
41
+ end
42
+ end
43
+
38
44
  def register_client(message)
39
45
  GameMachine.logger.info "Register #{message.player.id}"
40
46
  player_id = message.player.id
@@ -71,14 +77,6 @@ module GameMachine
71
77
  @game_handler ||= Handlers::Game.find
72
78
  end
73
79
 
74
- def update_entities(message)
75
- if message.get_entity_list
76
- message.get_entity_list.each do |entity|
77
- entity.set_player(message.player)
78
- end
79
- end
80
- end
81
-
82
80
  end
83
81
  end
84
82
  end
@@ -0,0 +1,81 @@
1
+ require 'java'
2
+ require File.join(ENV['JAVA_ROOT'], 'lib', 'config-1.2.1.jar')
3
+
4
+ module GameMachine
5
+ class HoconConfig
6
+
7
+ def self.config
8
+ java_import 'com.typesafe.config.Config'
9
+ java_import 'com.typesafe.config.ConfigFactory'
10
+ file = File.join(ENV['APP_ROOT'],'config',"#{ENV['GAME_ENV']}.conf")
11
+ data = File.read(file)
12
+ config = ConfigFactory.parseString(data).getConfig('gamemachine')
13
+ top = [:handlers, :routers, :jdbc, :datastore, :gamecloud, :grids, :couchbase, :http, :udp, :tcp, :akka, :admin, :regions, :client]
14
+ conf = OpenStruct.new
15
+ top.each {|t| conf.send("#{t}=",OpenStruct.new)}
16
+
17
+ conf.environment = config.get_string('environment')
18
+ conf.use_regions = config.get_boolean('use_regions')
19
+ conf.orm = config.get_boolean('orm')
20
+ conf.mono_enabled = config.get_boolean('mono_enabled')
21
+ conf.seeds = config.get_string_list('seeds')
22
+
23
+ conf.regions = config.get_list('regions').map {|i| i.map(&:unwrapped)}
24
+
25
+ conf.client.protocol = config.get_string('client.protocol')
26
+
27
+ conf.handlers.team = config.get_string('handlers.team')
28
+ conf.handlers.auth = config.get_string('handlers.auth')
29
+
30
+ conf.routers.game_handler = config.get_int('routers.game_handler')
31
+ conf.routers.request_handler = config.get_int('routers.request_handler')
32
+ conf.routers.udp = config.get_int('routers.udp')
33
+ conf.routers.objectdb = config.get_int('routers.objectdb')
34
+
35
+ conf.datastore.store = config.get_string('datastore.store')
36
+ conf.datastore.serialization = config.get_string('datastore.serialization')
37
+ conf.datastore.cache_write_interval = config.get_int('datastore.cache_write_interval')
38
+ conf.datastore.cache_writes_per_second = config.get_int('datastore.cache_writes_per_second')
39
+
40
+ conf.gamecloud.host = config.get_string('gamecloud.host')
41
+ conf.gamecloud.user = config.get_string('gamecloud.user')
42
+ conf.gamecloud.api_key = config.get_string('gamecloud.api_key')
43
+
44
+ conf.grids.default = config.get_string('grids.default')
45
+ conf.grids.aoe = config.get_string('grids.aoe')
46
+ conf.grids.local_chat = config.get_string('grids.local_chat')
47
+
48
+ conf.couchbase.bucket = config.get_string('couchbase.bucket')
49
+ conf.couchbase.password = config.get_string('couchbase.password')
50
+ conf.couchbase.servers = config.get_string_list('couchbase.servers').to_a
51
+
52
+ conf.jdbc.hostname = config.get_string('jdbc.hostname')
53
+ conf.jdbc.port = config.get_int('jdbc.port')
54
+ conf.jdbc.database = config.get_string('jdbc.database')
55
+ conf.jdbc.url = config.get_string('jdbc.url')
56
+ conf.jdbc.ds = config.get_string('jdbc.ds')
57
+ conf.jdbc.driver = config.get_string('jdbc.driver')
58
+ conf.jdbc.username = config.get_string('jdbc.username')
59
+ conf.jdbc.password = config.get_string('jdbc.password')
60
+
61
+ conf.http.enabled = config.get_boolean('http.enabled')
62
+ conf.http.host = config.get_string('http.host')
63
+ conf.http.port = config.get_int('http.port')
64
+
65
+ conf.tcp.enabled = config.get_boolean('tcp.enabled')
66
+ conf.tcp.host = config.get_string('tcp.host')
67
+ conf.tcp.port = config.get_int('tcp.port')
68
+
69
+ conf.udp.enabled = config.get_boolean('udp.enabled')
70
+ conf.udp.host = config.get_string('udp.host')
71
+ conf.udp.port = config.get_int('udp.port')
72
+
73
+ conf.akka.host = config.get_string('akka.host')
74
+ conf.akka.port = config.get_int('akka.port')
75
+
76
+ conf.admin.user = config.get_string('admin.user')
77
+ conf.admin.pass = config.get_string('admin.pass')
78
+ conf
79
+ end
80
+ end
81
+ end
@@ -18,7 +18,17 @@ module GameMachine
18
18
  include_package 'com.dyuproject.protostuff'
19
19
  end
20
20
 
21
+ module TutorialLib
22
+ include_package 'com.game_machine.examples'
23
+ end
24
+
25
+ module ModelLib
26
+ include_package 'com.game_machine.orm.models'
27
+ end
28
+
21
29
  module JavaLib
30
+ java_import 'com.typesafe.config.Config'
31
+ java_import 'com.typesafe.config.ConfigFactory'
22
32
  java_import 'akka.cluster.ClusterEvent'
23
33
  java_import 'akka.contrib.pattern.ClusterSingletonManager'
24
34
  java_import 'akka.contrib.pattern.ClusterSingletonProxy'
@@ -38,6 +48,9 @@ module GameMachine
38
48
  include_package 'akka.camel'
39
49
  java_import 'com.game_machine.core.Grid'
40
50
  include_package 'com.game_machine.core'
51
+ include_package 'com.game_machine.orm'
52
+ include_package 'com.game_machine.authentication'
53
+ include_package 'com.game_machine.ui'
41
54
  include_package 'java.net'
42
55
  include_package 'java.util.concurrent.atomic'
43
56
  include_package 'scala.concurrent.duration'
@@ -46,6 +59,6 @@ module GameMachine
46
59
  include_package 'java.util'
47
60
  include_package 'java.io'
48
61
  include_package 'com.couchbase.client'
49
- include_package 'io.netty.channel'
62
+ #include_package 'io.netty.channel'
50
63
  end
51
64
  end
@@ -1,39 +1,26 @@
1
- require 'rjack-logback'
2
1
 
3
2
  module GameMachine
4
- module Logger
5
-
6
- LOGGER = RJack::SLF4J[ 'game_machine' ]
7
-
8
- def stdout(message)
9
- unless ENV['GAME_ENV'] == 'test'
10
- print "#{message}\n"
3
+
4
+ class JavaLogger
5
+ [:info, :error, :warn, :fatal, :debug].each do |name|
6
+ define_method(name) do |msg|
7
+ JavaLib::GameMachineLoader.logger.send(name.to_sym,msg)
11
8
  end
12
9
  end
10
+ end
11
+
12
+ module Logger
13
+ LOGGER = JavaLogger.new
13
14
 
14
15
  def logfile
15
16
  File.join(ENV['APP_ROOT'], 'log',"#{ENV['GAME_ENV']}.log")
16
17
  end
17
18
 
18
- def configure_logging
19
- RJack::Logback.configure do
20
- console = RJack::Logback::ConsoleAppender.new do |a|
21
- end
22
-
23
- file = RJack::Logback::FileAppender.new(logfile) do |a|
24
- end
25
-
26
- RJack::Logback.root.add_appender( file )
27
- RJack::Logback.root.level = RJack::Logback::INFO
28
- end
29
- end
30
-
31
19
  def logger
32
20
  LOGGER
33
21
  end
34
-
22
+
35
23
  end
36
24
  end
37
25
 
38
26
  GameMachine.send(:extend, GameMachine::Logger)
39
- GameMachine.configure_logging
@@ -18,3 +18,4 @@ require_relative 'models/find_match'
18
18
  require_relative 'models/match'
19
19
  require_relative 'models/start_match'
20
20
  require_relative 'models/end_match'
21
+
@@ -11,7 +11,12 @@ module GameMachine
11
11
  # it will just get restarted
12
12
  Thread.new do
13
13
  loop do
14
- system("cd #{mono_path} && mono server.exe #{Application.config.mono_gateway_port}")
14
+ case RbConfig::CONFIG['host_os']
15
+ when /mswin|windows/i
16
+ system("cd #{mono_path} && server.exe")
17
+ else
18
+ system("cd #{mono_path} && mono server.exe")
19
+ end
15
20
  sleep 10
16
21
  end
17
22
  end
@@ -32,12 +32,13 @@ module GameMachine
32
32
  WriteBehindCache.find_distributed(entity.id).tell(entity)
33
33
  end
34
34
 
35
- def get_entity(entity_id)
35
+ def get_entity(entity_id,klass)
36
36
  entity = entities.fetch(entity_id,nil)
37
37
  if entity.nil?
38
- entity = store.get(entity_id)
38
+ entity = store.get(entity_id,klass)
39
+ else
40
+ entity.clone
39
41
  end
40
- entity
41
42
  end
42
43
 
43
44
  def on_receive(message)
@@ -45,7 +46,7 @@ module GameMachine
45
46
  procname = message.get_update_method.to_sym
46
47
  current_entity_id = message.get_current_entity_id
47
48
  update_entity = message.get_update_entity
48
- current_entity = get_entity(current_entity_id)
49
+ current_entity = get_entity(current_entity_id,'Entity')
49
50
  if self.class.dbprocs.has_key?(procname)
50
51
  dbproc = self.class.dbprocs[procname]
51
52
  returned_entity = dbproc.call(
@@ -59,11 +60,16 @@ module GameMachine
59
60
 
60
61
  elsif message.is_a?(MessageLib::ObjectdbPut)
61
62
  set_entity(message.get_entity)
62
- sender.tell(true)
63
+ get_sender.tell(true,nil)
63
64
  elsif message.is_a?(MessageLib::ObjectdbGet)
64
- sender.tell(get_entity(message.get_entity_id) || false)
65
+ if entity = get_entity(message.get_entity_id,message.get_klass)
66
+ get_sender.tell(entity,nil)
67
+ end
65
68
  elsif message.is_a?(MessageLib::ObjectdbDel)
66
69
  delete_entity(message.get_entity_id)
70
+ elsif message.respond_to?(:get_id)
71
+ set_entity(message)
72
+ get_sender.tell(true,nil)
67
73
  else
68
74
  unhandled(message)
69
75
  end
@@ -1,6 +1,6 @@
1
1
 
2
2
  if ['development','test'].include?(GameMachine.env)
3
- require_relative '../../java/local_lib/protostuff-compiler-1.0.7-jarjar.jar'
3
+ require_relative '../../java/project/local_lib/protostuff-compiler-1.0.8-jarjar.jar'
4
4
  require_relative 'protobuf/game_messages'
5
5
  require_relative 'protobuf/generate'
6
6
  end
@@ -8,12 +8,22 @@ module GameMachine
8
8
  @messages = IO.readlines(message_file)
9
9
  end
10
10
 
11
+ def persistent_messages
12
+ [].tap do |message_names|
13
+ messages.each do |line|
14
+ if line.match(/^\s*?(local_persistent|persistent)_message\s+?(\w+?)\s+?{/)
15
+ message_names << $2
16
+ end
17
+ end
18
+ end
19
+ end
20
+
11
21
  def create_entity_fields
12
22
  [].tap do |fields|
13
23
  messages.each do |line|
14
- if line.match(/^\s*?message\s+?(\w+?)\s+?{/)
15
- name = $1[0,1].downcase + $1[1..-1]
16
- fields << "optional #{$1} #{name} = #{starting_field_number};"
24
+ if line.match(/^\s*?(persistent)?_?message\s+?(\w+?)\s+?{/)
25
+ name = $2[0,1].downcase + $2[1..-1]
26
+ fields << "optional #{$2} #{name} = #{starting_field_number};"
17
27
  @starting_field_number += 1
18
28
  end
19
29
  end
@@ -2,6 +2,7 @@ require 'java'
2
2
  require 'pathname'
3
3
  require 'erb'
4
4
  require 'fileutils'
5
+ require 'active_support/inflector'
5
6
 
6
7
  java_import java.lang.System
7
8
  java_import com.dyuproject.protostuff.compiler.CachingProtoLoader
@@ -17,6 +18,10 @@ module GameMachine
17
18
  @app_root = app_root
18
19
  end
19
20
 
21
+ def java_root
22
+ ENV['JAVA_ROOT']
23
+ end
24
+
20
25
  def self.compile(path)
21
26
  loader = CachingProtoLoader.new
22
27
  file = java.io.File.new(path)
@@ -24,33 +29,124 @@ module GameMachine
24
29
  end
25
30
 
26
31
  def erb_template
27
- File.join(app_root,'java','component.erb')
32
+ File.join(java_root,'component.erb')
33
+ end
34
+
35
+ def model_template
36
+ File.join(java_root,'model.erb')
37
+ end
38
+
39
+ def model_src
40
+ File.join(java_root,'src','main','java','com', 'game_machine','orm','models')
28
41
  end
29
42
 
30
43
  def java_src
31
- File.join(app_root,'java','src','main','java','GameMachine', 'Messages')
44
+ File.join(java_root,'src','main','java','GameMachine', 'Messages')
32
45
  end
33
46
 
34
47
  def config_path
35
48
  File.join(app_root,'config')
36
49
  end
37
50
 
38
- def write_components(proto)
51
+ def write_components(proto,persistent_messages)
39
52
  messages = proto.getMessages.reject {|message| message.getName == 'Components'}
40
53
  FileUtils.mkdir_p(java_src)
54
+ FileUtils.mkdir_p(model_src)
55
+ message_names = proto.getMessages.map {|m| m.get_name}
56
+ messages_index = proto.getMessages.each_with_object({}) {|v,res| res[v.getName] = v}
57
+
41
58
  proto.getMessages.each do |message|
59
+ message_fields = []
60
+ message.get_fields.each do |field|
61
+ if message_names.include?(field.getJavaType.to_s) && !field.is_repeated
62
+ message_fields << field.get_java_type.to_s
63
+ end
64
+ end
65
+ unless message_fields.empty?
66
+ #puts "#{message.getName} #{message_fields.inspect}"
67
+ end
68
+
42
69
  klass = message.getName
70
+ persistent = persistent_messages.include?(klass)
43
71
  #puts "Message: #{message.getName}"
44
- out = ERB.new(File.read(erb_template),nil,'-').result(binding)
72
+ out = ERB.new(File.read(erb_template),0,'>').result(binding)
73
+ out = out.gsub(/^(\s*\r\n){2,}/,"\r\n")
45
74
  src_file = File.join(java_src,"#{message.getName}.java")
46
75
  File.open(src_file,'w') {|f| f.write out}
76
+
77
+ if persistent
78
+ out = ERB.new(File.read(model_template),0,'<>').result(binding)
79
+ out = out.gsub(/^(\s*\r\n){2,}/,"\r\n")
80
+ out = out.gsub(/^(\s*\n){2,}/,"\n")
81
+ src_file = File.join(model_src,"#{message.getName}.java")
82
+ File.open(src_file,'w') {|f| f.write out}
83
+ end
47
84
  #message.getFields.each do |field|
85
+ # puts field.default_value_set
48
86
  # puts field.getJavaType
49
87
  # puts field.toString
50
88
  #end
51
89
  end
52
90
  end
53
91
 
92
+ def sql_column_name(klass,field)
93
+ "#{klass.underscore}_#{field.name.underscore}"
94
+ end
95
+
96
+ def sql_field(klass,field,dbtype,force_null=false)
97
+ if dbtype == 'mysql'
98
+ txt = case field.getJavaType.to_s
99
+ when 'boolean'
100
+ "`#{sql_column_name(klass,field)}` tinyint(4)"
101
+ when 'double'
102
+ "`#{sql_column_name(klass,field)}` double"
103
+ when 'float'
104
+ "`#{sql_column_name(klass,field)}` float"
105
+ when 'long'
106
+ "`#{sql_column_name(klass,field)}` int(11)"
107
+ when 'int'
108
+ "`#{sql_column_name(klass,field)}` int(11)"
109
+ when 'String'
110
+ "`#{sql_column_name(klass,field)}` varchar(128)"
111
+ end
112
+ elsif dbtype == 'postgres'
113
+ txt = case field.getJavaType.to_s
114
+ when 'boolean'
115
+ "#{sql_column_name(klass,field)} integer"
116
+ when 'double'
117
+ "#{sql_column_name(klass,field)} double precision"
118
+ when 'float'
119
+ "#{sql_column_name(klass,field)} double precision"
120
+ when 'long'
121
+ "#{sql_column_name(klass,field)} integer"
122
+ when 'int'
123
+ "#{sql_column_name(klass,field)} integer"
124
+ when 'String'
125
+ "#{sql_column_name(klass,field)} character varying(128)"
126
+ end
127
+ end
128
+
129
+ return nil if txt.nil?
130
+
131
+ if force_null
132
+ return "#{txt} DEFAULT NULL,"
133
+ end
134
+
135
+ if field.is_required
136
+ txt = "#{txt} NOT NULL,"
137
+ else
138
+ txt = "#{txt} DEFAULT NULL,"
139
+ end
140
+ end
141
+
142
+ def simple_value?(field)
143
+ if ['boolean','double','float','long','int','String'].include?(field.getJavaType.to_s)
144
+ true
145
+ else
146
+ false
147
+ end
148
+ end
149
+
54
150
  def get_type(field)
55
151
  if field.getJavaType.to_s == 'int'
56
152
  return 'Integer'
@@ -70,17 +166,23 @@ module GameMachine
70
166
  end
71
167
 
72
168
  def generate
169
+ FileUtils.rm Dir.glob(File.join(java_src,'*.java'))
73
170
  game_protofile = File.join(config_path,'game_messages.proto')
74
171
  protofile = File.join(config_path,'messages.proto')
75
172
 
76
173
  if File.exists?(game_protofile)
77
174
  game_messages = File.read(game_protofile)
175
+ game_messages = game_messages.gsub('local_persistent_message','message')
176
+ game_messages = game_messages.gsub('local_message','message')
177
+ game_messages = game_messages.gsub('persistent_message','message')
78
178
  gm = Protobuf::GameMessages.new(game_protofile)
179
+ persistent_messages = gm.persistent_messages
79
180
  entity_fields = gm.create_entity_fields
80
181
  game_entity_fields = entity_fields.join("\n")
81
182
  else
82
183
  game_messages = ''
83
184
  game_entity_fields = ''
185
+ persistent_messages = []
84
186
  end
85
187
  messages = File.read(protofile)
86
188
 
@@ -102,7 +204,7 @@ module GameMachine
102
204
  # throw an exception
103
205
  proto = self.class.compile(combined_messages_protofile)
104
206
 
105
- write_components(proto)
207
+ write_components(proto,persistent_messages)
106
208
  #FileUtils.rm(combined_messages_protofile)
107
209
  combined_messages
108
210
  end