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
@@ -6,25 +6,21 @@ module GameMachine
6
6
 
7
7
  attr_reader :hashring, :address, :app_config
8
8
 
9
- def self.address_for(server)
10
- host = AppConfig.instance.server_config(server).akka_host
11
- port = AppConfig.instance.server_config(server).akka_port
9
+ def self.address
10
+ host = AppConfig.instance.config.akka.host
11
+ port = AppConfig.instance.config.akka.port
12
12
  "akka.tcp://#{Akka.instance.config_name}@#{host}:#{port}"
13
13
  end
14
14
 
15
15
  def initialize!
16
16
  @app_config = AppConfig.instance
17
- @address = self.class.address_for(app_config.config.name)
18
- @hashring = Hashring.new([@address])
17
+ @address = self.class.address
18
+ @hashring = JavaLib::Hashring.new('servers',[address],3)
19
19
  end
20
20
 
21
21
  def init_cluster!(address)
22
22
  @address = address
23
- @hashring = Hashring.new([address])
24
- end
25
-
26
- def cluster?
27
- app_config.config.cluster ? true : false
23
+ @hashring = JavaLib::Hashring.new('servers',[address],3)
28
24
  end
29
25
 
30
26
  def actor_system
@@ -32,54 +28,52 @@ module GameMachine
32
28
  end
33
29
 
34
30
  def config_name
35
- cluster? ? 'cluster' : 'standalone'
31
+ 'cluster'
36
32
  end
37
33
 
38
34
  def akka_config
39
- cluster? ? akka_cluster_config : akka_server_config
35
+ config = load_akka_config(config_name)
36
+ config = set_address(config)
37
+ config = set_seeds(config)
40
38
  end
41
39
 
42
40
  def start
43
41
  @actor_system = Actor::System.new(config_name,akka_config)
44
42
  @actor_system.create!
45
- JavaLib::GameMachineLoader.new.run(actor_system,Application.config.game_handler)
46
- #start_camel_extension
43
+ JavaLib::GameMachineLoader.new.run(actor_system)
44
+ if Application.config.seeds.size >= 1
45
+ Application.config.seeds.each do |seed|
46
+ host,port = seed.split(':')
47
+ GameMachine.logger.info "JOINING REMOTE #{host} #{port}"
48
+ JavaLib::ActorUtil.joinCluster("akka.tcp", config_name, host, port.to_i)
49
+ end
50
+ else
51
+ GameMachine.logger.info "JOINING SELF"
52
+ JavaLib::ActorUtil.joinCluster("akka.tcp", config_name, app_config.config.akka.host, app_config.config.akka.port)
53
+ end
47
54
  end
48
55
 
49
56
  def stop
50
57
  @actor_system.shutdown!
51
- Actor::Base.reset_hashrings
52
58
  end
53
59
 
54
60
  private
55
61
 
56
62
  def set_address(config)
57
- config.sub!('HOST',app_config.config.akka_host)
58
- config.sub!('PORT',app_config.config.akka_port.to_s)
63
+ config.sub!('HOST',app_config.config.akka.host)
64
+ config.sub!('PORT',app_config.config.akka.port.to_s)
59
65
  config
60
66
  end
61
67
 
62
68
  def set_seeds(config)
63
- seeds = Application.config.seeds.map do |seed|
64
- seed_host = app_config.server_config(seed).akka_host
65
- seed_port = app_config.server_config(seed).akka_port
66
- "\"akka.tcp://cluster@#{seed_host}:#{seed_port}\""
69
+ seeds = Application.config.seeds.map do |seed|
70
+ host,port = seed.split(':')
71
+ "\"akka.tcp://cluster@#{host}:#{port}\""
67
72
  end
68
73
  config.sub!('SEEDS',seeds.join(','))
69
74
  config
70
75
  end
71
76
 
72
- def akka_cluster_config
73
- config = load_akka_config('cluster')
74
- config = set_address(config)
75
- config = set_seeds(config)
76
- end
77
-
78
- def akka_server_config
79
- config = load_akka_config('standalone')
80
- config = set_address(config)
81
- end
82
-
83
77
  def load_akka_config(name)
84
78
  File.read(File.expand_path(File.join(
85
79
  GameMachine.app_root,"config/#{name}.conf")
@@ -1,49 +1,62 @@
1
1
  require 'singleton'
2
- require_relative 'settings'
2
+ require_relative 'hocon_config'
3
3
  module GameMachine
4
4
  class AppConfig
5
5
  include Singleton
6
6
 
7
- attr_reader :config
7
+ attr_reader :config, :loaded
8
8
 
9
9
  def initialize
10
+ @loaded = false
10
11
  @config = OpenStruct.new
11
12
  end
12
13
 
13
- def reload
14
- @config = OpenStruct.new
15
- load_config
14
+ def load_config
15
+ @config = HoconConfig.config
16
+ if ENV['NODE_HOST']
17
+ set_config_from_env
18
+ end
19
+ @loaded = true
16
20
  end
17
21
 
18
- def server_config(server)
19
- Settings.servers.send(server)
20
- end
22
+ def set_config_from_env
23
+ GameMachine.logger.info "Setting config from ENV"
24
+ config.http.host = ENV['NODE_HOST']
25
+ config.http.port = ENV['WWW_PORT'].to_i
26
+
27
+ config.tcp.host = ENV['NODE_HOST']
28
+ config.tcp.port = ENV['TCP_PORT'].to_i
29
+
30
+ config.udp.host = ENV['NODE_HOST']
31
+ config.udp.port = ENV['UDP_PORT'].to_i
32
+
33
+ config.akka.host = ENV['NODE_HOST']
34
+ config.akka.port = ENV['AKKA_PORT'].to_i
21
35
 
22
- def set_defaults
23
- unless config.request_handler_routers
24
- config.request_handler_routers = 10
36
+ if ENV['CLOUD_HOST'] && ENV['CLOUD_USER'] && ENV['API_KEY']
37
+ GameMachine.logger.info "Found gamecloud config in ENV"
38
+ config.gamecloud.host = ENV['CLOUD_HOST']
39
+ config.gamecloud.user = ENV['CLOUD_USER']
40
+ config.gamecloud.api_key = ENV['API_KEY']
25
41
  end
26
- unless config.game_handler_routers
27
- config.game_handler_routers = 10
42
+
43
+ if ENV['DB_HOST'] && ENV['DB_PORT'] && ENV['DB_NAME'] && ENV['DB_USER'] && ENV['DB_PASS']
44
+ GameMachine.logger.info "Found database config in ENV"
45
+ config.jdbc.hostname = ENV['DB_HOST']
46
+ config.jdbc.port = ENV['DB_PORT']
47
+ config.jdbc.database = ENV['DB_NAME']
48
+ config.jdbc.username = ENV['DB_USER']
49
+ config.jdbc.password = ENV['DB_PASS']
28
50
  end
29
- unless config.udp_routers
30
- config.udp_routers = 10
51
+
52
+ if ENV['AKKA_SEED_HOST'] && ENV['AKKA_SEED_PORT']
53
+ GameMachine.logger.info "Found Seed in ENV"
54
+ Application.config.seeds << "#{ENV['AKKA_SEED_HOST']}:#{ENV['AKKA_SEED_PORT']}"
31
55
  end
32
- end
33
56
 
34
- def load_config(name)
35
- config.name = name
36
- set_defaults
37
- load_settings(name)
38
57
  end
39
58
 
40
59
  private
41
60
 
42
- def load_settings(name)
43
- Settings.servers.send(name).each do |key,value|
44
- config.send("#{key}=",value)
45
- end
46
- end
47
-
48
61
  end
49
62
  end
@@ -3,16 +3,11 @@ module GameMachine
3
3
 
4
4
  class << self
5
5
 
6
- def initialize!(name='default', cluster=false)
7
- AppConfig.instance.load_config(name)
8
- config.cluster = cluster
6
+ def initialize!
7
+ AppConfig.instance.load_config
9
8
  akka.initialize!
10
9
  end
11
10
 
12
- def auth_handler
13
- AuthHandlers::Base.instance
14
- end
15
-
16
11
  def data_store
17
12
  DataStore.instance
18
13
  end
@@ -22,7 +17,7 @@ module GameMachine
22
17
  end
23
18
 
24
19
  def config
25
- @config ||= AppConfig.instance.config
20
+ AppConfig.instance.config
26
21
  end
27
22
 
28
23
  def registered
@@ -51,12 +46,12 @@ module GameMachine
51
46
  create_grids
52
47
 
53
48
  unless GameMachine.env == 'test'
54
- game_preload
55
49
  GameMachine::Actor::Reloadable.update_paths(true)
56
50
  end
57
51
 
58
52
  start_actor_system
59
53
  data_store
54
+ orm_connect
60
55
  start_endpoints
61
56
  start_core_systems
62
57
  start_handlers
@@ -66,19 +61,34 @@ module GameMachine
66
61
  end
67
62
 
68
63
  start_game_systems
69
-
70
- unless GameMachine.env == 'test'
71
- GameLoader.new.load_all
72
- end
73
-
74
- auth_handler
64
+ load_games
75
65
  start_mono
76
66
 
77
- GameMachine.stdout("Game Machine start successful")
78
-
67
+ GameMachine.logger.info("Game Machine start successful")
68
+
79
69
  # This call blocks, make it the last thing we do
80
- if config.http_enabled
81
- start_http
70
+ if config.http.enabled
71
+ Thread.new do
72
+ start_http
73
+ end
74
+ end
75
+ end
76
+
77
+ def orm_connect
78
+ if config.orm
79
+ pool = GameMachine::JavaLib::DbConnectionPool.getInstance
80
+ unless pool.connect(
81
+ 'game_machine_orm',
82
+ config.jdbc.hostname,
83
+ config.jdbc.port,
84
+ config.jdbc.database,
85
+ config.jdbc.ds,
86
+ config.jdbc.username,
87
+ config.jdbc.password || ''
88
+ )
89
+ GameMachine.logger.error "Unable to establish database connection, exiting"
90
+ System.exit 1
91
+ end
82
92
  end
83
93
  end
84
94
 
@@ -86,12 +96,9 @@ module GameMachine
86
96
  Grid.load_from_config
87
97
  end
88
98
 
89
- def game_preload
90
- begin
91
- require_relative '../../games/preload.rb'
92
- rescue LoadError => e
93
- GameMachine.logger.info "preload.rb not found"
94
- end
99
+ def load_games
100
+ require_relative '../../games/routes.rb'
101
+ require_relative '../../games/boot.rb'
95
102
  end
96
103
 
97
104
  def start_http
@@ -106,40 +113,26 @@ module GameMachine
106
113
  end
107
114
 
108
115
  def start_endpoints
109
- if config.mono_enabled
110
- Actor::Builder.new(Endpoints::MonoGateway).start
111
- GameMachine.stdout(
112
- "MonoGateway starting on #{config.mono_gateway_host}:#{config.mono_gateway_port}"
113
- )
114
- end
115
- if config.tcp_enabled
116
- Actor::Builder.new(Endpoints::Tcp).start
117
- GameMachine.stdout(
118
- "Tcp starting on #{config.tcp_host}:#{config.tcp_port}"
116
+ if config.tcp.enabled
117
+ JavaLib::TcpServer.start(config.tcp.host, config.tcp.port);
118
+ GameMachine.logger.info(
119
+ "Tcp starting on #{config.tcp.host}:#{config.tcp.port}"
119
120
  )
120
121
  end
121
122
 
122
- if config.udp_enabled
123
- JavaLib::UdpServer.start(config.udp_host,config.udp_port)
123
+ if config.udp.enabled
124
+ JavaLib::UdpServer.start(config.udp.host,config.udp.port)
124
125
  Actor::Builder.new(Endpoints::UdpIncoming).with_router(
125
- JavaLib::RoundRobinRouter,10).start
126
-
127
- # Built in Akka udp. Performed badly we have more control by working
128
- # directly with Netty
129
- #Actor::Builder.new(Endpoints::Udp).start
130
- #GameMachine.stdout(
131
- # "UDP starting on #{config.udp_host}:#{config.udp_port}"
132
- #)
126
+ JavaLib::RoundRobinRouter,config.routers.udp).start
133
127
  end
134
-
135
128
  end
136
129
 
137
130
  def start_handlers
138
131
  Actor::Builder.new(Handlers::Request).with_router(
139
- JavaLib::RoundRobinRouter,config.request_handler_routers
132
+ JavaLib::RoundRobinRouter,config.routers.request_handler
140
133
  ).start
141
134
  Actor::Builder.new(Handlers::Game).with_router(
142
- JavaLib::RoundRobinRouter,config.game_handler_routers
135
+ JavaLib::RoundRobinRouter,config.routers.game_handler
143
136
  ).start
144
137
  end
145
138
 
@@ -148,24 +141,26 @@ module GameMachine
148
141
 
149
142
  # TODO configurize router sizes
150
143
  def start_core_systems
144
+ JavaLib::GameMachineLoader.StartMessageGateway
145
+ Actor::Builder.new(CloudUpdater).start
151
146
  Actor::Builder.new(ClusterMonitor).start
152
- Actor::Builder.new(ObjectDb).distributed(2).start
147
+ Actor::Builder.new(ObjectDb).distributed(config.routers.objectdb).start
153
148
  Actor::Builder.new(MessageQueue).start
154
149
  Actor::Builder.new(SystemMonitor).start
155
150
  Actor::Builder.new(ReloadableMonitor).start
156
151
  Actor::Builder.new(Scheduler).start
157
- Actor::Builder.new(WriteBehindCache).distributed(2).start
158
- Actor::Builder.new(GridReplicator).start
152
+ Actor::Builder.new(WriteBehindCache).distributed(config.routers.objectdb).start
159
153
  Actor::Builder.new(ClientManager).start
160
- Actor::Builder.new(GameSystems::EntityLoader).start
161
154
  Actor::Builder.new(SystemStats).start
155
+ Actor::Builder.new(GameSystems::RemoteEcho).with_router(JavaLib::RoundRobinRouter,config.routers.game_handler).start
162
156
 
163
- # Our cluster singleton for managing regions
164
- Actor::Builder.new(GameSystems::RegionManager).singleton
165
-
166
- # Hands out current region info to clients/other actors
167
- Actor::Builder.new(GameSystems::RegionService).start
157
+ if config.use_regions
158
+ # Our cluster singleton for managing regions
159
+ Actor::Builder.new(GameSystems::RegionManager).singleton
168
160
 
161
+ # Hands out current region info to clients/other actors
162
+ Actor::Builder.new(GameSystems::RegionService).start
163
+ end
169
164
 
170
165
  if ENV.has_key?('RESTARTABLE')
171
166
  GameMachine.logger.info "restartable=true. Will respond to tmp/gm_restart.txt"
@@ -175,12 +170,11 @@ module GameMachine
175
170
 
176
171
  def start_game_systems
177
172
  Actor::Builder.new(GameSystems::Devnull).start#.with_router(JavaLib::RoundRobinRouter,4).start
178
- Actor::Builder.new(GameSystems::ObjectDbProxy).with_router(JavaLib::RoundRobinRouter,4).start
179
- Actor::Builder.new(GameSystems::EntityTracking).with_router(JavaLib::RoundRobinRouter,10).start
180
- Actor::Builder.new(GameSystems::LocalEcho).with_router(JavaLib::RoundRobinRouter,2).start
173
+ Actor::Builder.new(GameSystems::ObjectDbProxy).with_router(JavaLib::RoundRobinRouter,2).start
174
+ JavaLib::GameMachineLoader.StartEntityTracking
175
+ Actor::Builder.new(GameSystems::LocalEcho).with_router(JavaLib::RoundRobinRouter,1).start
181
176
  Actor::Builder.new(GameSystems::LocalEcho).with_name('DistributedLocalEcho').distributed(2).start
182
- Actor::Builder.new(GameSystems::RemoteEcho).with_router(JavaLib::RoundRobinRouter,10).start
183
- Actor::Builder.new(GameSystems::StressTest).with_router(JavaLib::RoundRobinRouter,10).start
177
+ Actor::Builder.new(GameSystems::StressTest).with_router(JavaLib::RoundRobinRouter,1).start
184
178
  Actor::Builder.new(GameSystems::ChatManager).start
185
179
  Actor::Builder.new(GameSystems::TeamManager).start
186
180
  Actor::Builder.new(GameSystems::JsonModelPersistence).start
@@ -32,7 +32,7 @@ module GameMachine
32
32
  end
33
33
 
34
34
  def post_init(*args)
35
- @server = Application.config.name
35
+ @server = Akka.instance.address
36
36
  @channel = 'client_events'
37
37
  @local_actors = {}
38
38
  @remote_clients = {}
@@ -40,7 +40,7 @@ module GameMachine
40
40
  @players = {}
41
41
  @client_to_player = {}
42
42
  subscribe(channel)
43
- ClusterMonitor.find.tell('notify_on_up')
43
+ ClusterMonitor.find.tell('notify_on_up',get_self)
44
44
  @cluster = JavaLib::Cluster.get(getContext.system)
45
45
  end
46
46
 
@@ -50,7 +50,11 @@ module GameMachine
50
50
 
51
51
  # Outgoing message to player
52
52
  if message.send_to_player
53
- send_to_remote_player(message)
53
+ if self.class.local_players.has_key?(message.player.id)
54
+ Actor::Base.find(message.player.id).tell(message)
55
+ else
56
+ send_to_remote_player(message)
57
+ end
54
58
 
55
59
  # client events come from other client managers
56
60
  elsif message.has_client_event
@@ -107,13 +111,13 @@ module GameMachine
107
111
  remote_clients.delete(client_event.client_id)
108
112
  client_to_player.delete(client_event.client_id)
109
113
  players.delete(client_event.player_id)
110
- GameMachine.logger.info("#{self.class.name} client #{client_event.client_id} disconnected")
114
+ GameMachine.logger.debug("#{self.class.name} client #{client_event.client_id} disconnected")
111
115
  elsif client_event.event == 'connected'
112
116
  remote_ref = sender_id_to_actor_ref(client_event.sender_id)
113
117
  remote_clients[client_event.client_id] = remote_ref
114
118
  players[client_event.player_id] = client_event.client_id
115
119
  client_to_player[client_event.client_id] = client_event.player_id
116
- GameMachine.logger.info("#{self.class.name} #{Application.config.name} client #{client_event.client_id} connected")
120
+ GameMachine.logger.debug("#{self.class.name} #{Application.config.name} client #{client_event.client_id} connected")
117
121
  end
118
122
  end
119
123
 
@@ -143,7 +147,7 @@ module GameMachine
143
147
  local_clients.delete(name)
144
148
  players.delete(message.player.id)
145
149
  self.class.local_players.delete(message.player.id)
146
- GameMachine.logger.info("#{self.class.name} client #{name} unregistered")
150
+ GameMachine.logger.debug("#{self.class.name} client #{name} unregistered")
147
151
  end
148
152
  end
149
153
 
@@ -162,9 +166,10 @@ module GameMachine
162
166
  players[message.player.id] = name
163
167
  self.class.local_players[message.player.id] = message.client_connection.type
164
168
  get_sender.tell(message,get_self)
165
- GameMachine.logger.info("#{self.class.name} client #{name} registered")
169
+ GameMachine.logger.debug("#{self.class.name} client #{name} registered")
166
170
  # Actor register
167
171
  elsif register_type == 'actor'
172
+ GameMachine.logger.debug "#{self.class.name} Actor #{name} registered"
168
173
  local_actors[name] = events
169
174
  end
170
175
  end
@@ -174,6 +179,7 @@ module GameMachine
174
179
  local_actors.each do |name,events|
175
180
  client_manager_event = create_client_manager_event(client_id,player_id,event)
176
181
  Actor::Base.find(name).tell(client_manager_event)
182
+ GameMachine.logger.info "#{self.class.name} Send #{event} to #{name}"
177
183
  end
178
184
  end
179
185
 
@@ -185,7 +191,7 @@ module GameMachine
185
191
  def create_client_event(client_id,player_id,event)
186
192
  client_event = MessageLib::ClientEvent.new.set_client_id(client_id).
187
193
  set_event(event).set_player_id(player_id)
188
- client_event.set_sender_id(Application.config.name + '|' + self.class.name)
194
+ client_event.set_sender_id(Akka.instance.address + '|' + self.class.name)
189
195
  end
190
196
 
191
197
  def send_client_event(client_id,player_id,event)