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
@@ -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)