game_machine 0.0.11 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
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