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
@@ -0,0 +1,51 @@
1
+ module GameMachine
2
+ class CloudUpdater < Actor::Base
3
+
4
+ attr_reader :node_status, :stats, :windows
5
+ def post_init(*args)
6
+
7
+ @stats = {}
8
+ @windows = Config::CONFIG['target_os'].match(/mswin/)
9
+
10
+ if ENV['CONTAINER_ID'] && ENV['CLUSTER_NAME']
11
+ @node_status = MessageLib::NodeStatus.new.
12
+ set_container_id(ENV['CONTAINER_ID'].to_i).
13
+ set_hostname(AppConfig.instance.config.http.host).
14
+ set_port(AppConfig.instance.config.http.port).
15
+ set_cluster_name(ENV['CLUSTER_NAME']).
16
+ set_client_count(ClientManager.local_players.size)
17
+
18
+ schedule_message('update',5,:seconds)
19
+ end
20
+
21
+ cluster = JavaLib::Cluster.get(getContext.system)
22
+ cluster.subscribe(getSelf, JavaLib::ClusterEvent::ClusterMetricsChanged.java_class)
23
+
24
+ end
25
+
26
+ def on_receive(message)
27
+ if message.is_a?(JavaLib::ClusterEvent::ClusterMetricsChanged)
28
+ message.get_node_metrics.each do |node_metric|
29
+ heap = JavaLib::StandardMetrics.extract_heap_memory(node_metric)
30
+ stats[:heap] = heap.used / 1024 / 1024
31
+ unless windows
32
+ cpu = JavaLib::StandardMetrics.extract_cpu(node_metric)
33
+ if cpu.respond_to?(:systemLoadAverage)
34
+ stats[:load_average] = cpu.systemLoadAverage.get
35
+ stats[:processor_count] = cpu.processors
36
+ end
37
+ end
38
+ end
39
+ end
40
+ if message.is_a?(String)
41
+ if message == 'update'
42
+ node_status.set_last_updated(Time.now.to_i)
43
+ node_status.set_client_count(ClientManager.local_players.size)
44
+ node_status.set_heap_used(stats[:heap])
45
+ node_status.set_load_average(stats[:load_average])
46
+ JavaLib::CloudClient.get_instance.update_node_status(node_status)
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -72,7 +72,7 @@ module GameMachine
72
72
 
73
73
  elsif message.is_a?(JavaLib::ClusterEvent::MemberRemoved)
74
74
  address = message.member.address.to_string
75
- Akka.instance.hashring.remove_bucket(address)
75
+ Akka.instance.hashring.remove_node(address)
76
76
  self.class.remove_cluster_member(address)
77
77
  self.class.remove_remote_member(address)
78
78
 
@@ -83,7 +83,7 @@ module GameMachine
83
83
  elsif message.is_a?(JavaLib::ClusterEvent::MemberUp)
84
84
  address = message.member.address.to_string
85
85
  self.class.add_cluster_member(address,message.member)
86
- Akka.instance.hashring.add_bucket(address)
86
+ Akka.instance.hashring.add_node(address)
87
87
 
88
88
  unless address == @cluster.self_address.to_string
89
89
  self.class.add_remote_member(address,message.member)
@@ -98,7 +98,7 @@ module GameMachine
98
98
  message.get_members.each do |member|
99
99
  address = member.address.to_string
100
100
  self.class.add_cluster_member(address,member)
101
- Akka.instance.hashring.add_bucket(address)
101
+ Akka.instance.hashring.add_node(address)
102
102
  unless address == @cluster.self_address.to_string
103
103
  self.class.add_remote_member(address,member)
104
104
  end
@@ -7,7 +7,7 @@ require_relative 'commands/misc_commands'
7
7
  require_relative 'commands/proxy'
8
8
  require_relative 'commands/base'
9
9
 
10
- if Config::CONFIG['target_os'] == 'linux'
10
+ if RbConfig::CONFIG['host_os'].match(/linux/i)
11
11
  require_relative 'commands/navigation_commands'
12
12
  end
13
13
 
@@ -2,18 +2,14 @@ module GameMachine
2
2
  module Commands
3
3
  class MiscCommands
4
4
 
5
- attr_reader :player_manager
5
+ attr_reader :player_manager, :mono_proxy
6
6
  def initialize
7
+ @mono_proxy = JavaLib::MonoProxy.getInstance
7
8
  @player_manager = Application.config.player_manager
8
9
  end
9
10
 
10
- def player_status_change(player_id,status)
11
- if player_manager
12
- update = Models::PlayerStatusUpdate.new(:player_id => player_id,:status => status)
13
- Actor::Base.find(player_manager).tell(update)
14
- else
15
- GameMachine.logger.info "player manager not defined."
16
- end
11
+ def call_mono(klass,message)
12
+ mono_proxy.call(klass,message)
17
13
  end
18
14
 
19
15
  def client_manager_register(name,events=[])
@@ -3,6 +3,14 @@ module GameMachine
3
3
  class PlayerCommands
4
4
  include MessageHelper
5
5
 
6
+ def send_game_message(game_message,player_id)
7
+ entity = MessageLib::Entity.new.set_id('0')
8
+ game_messages = MessageLib::GameMessages.new
9
+ game_messages.add_game_message(game_message)
10
+ entity.set_game_messages(game_messages)
11
+ send_message(entity,player_id)
12
+ end
13
+
6
14
  def send_message(message,player_id)
7
15
  if player_id.nil?
8
16
  raise "player id cannot be nil"
@@ -1,3 +1,4 @@
1
1
  require_relative 'console/install'
2
2
  require_relative 'console/build'
3
3
  require_relative 'console/server'
4
+ require_relative 'console/bundle'
@@ -1,11 +1,11 @@
1
1
  require 'fileutils'
2
- require_relative '../settings'
3
2
  module GameMachine
4
3
  module Console
5
4
  class Build
6
5
 
7
- attr_reader :command
8
- def initialize(argv)
6
+ attr_reader :command, :bundle
7
+ def initialize(argv,bundle=false)
8
+ @bundle = bundle
9
9
  @command = argv.shift || ''
10
10
  end
11
11
 
@@ -21,17 +21,21 @@ module GameMachine
21
21
  File.join(java_root,'gradlew')
22
22
  end
23
23
 
24
- def build_code
25
- system("cd #{java_root} && #{gradlew} build")
26
- end
27
-
28
24
  def generate_csharp_code
29
25
  protogen_path = File.join(ENV['APP_ROOT'],'mono','bin','csharp','protogen_csharp.exe')
30
26
  proto_file = File.join(ENV['APP_ROOT'],'config','combined_messages.proto')
27
+ proto_path = File.join(ENV['APP_ROOT'],'config')
31
28
  messages_out_file = File.join(ENV['APP_ROOT'],'messages.cs')
32
- cmd = "#{protogen_path} -i:#{proto_file} -o:#{messages_out_file}"
33
- puts "Running #{cmd}"
34
- system(cmd)
29
+
30
+ # Yet another .NET tool that assumes the whole world is windows. In this case it embeds a
31
+ # windows protoc.exe, so we have to compile differently on non windows platforms
32
+ if Config::CONFIG['target_os'].match(/mswin/)
33
+ cmd = "#{protogen_path} -i:#{proto_file} -o:#{messages_out_file}"
34
+ else
35
+ bin_out_file = File.join(ENV['APP_ROOT'],'messages.bin')
36
+ cmd = "protoc -I#{proto_path} #{proto_file} -o#{bin_out_file}; mono #{protogen_path} -i:#{bin_out_file} -o:#{messages_out_file};rm -f #{bin_out_file}"
37
+ end
38
+ return cmd
35
39
  end
36
40
 
37
41
  def generate_java_code
@@ -41,31 +45,60 @@ module GameMachine
41
45
 
42
46
  def generate_code
43
47
  generate_java_code
44
- if Config::CONFIG['target_os'].match(/mswin/)
45
- generate_csharp_code
46
- end
48
+ generate_csharp_code
47
49
  end
48
50
 
49
51
  def remove_libs
50
52
  FileUtils.rm Dir.glob(File.join(java_lib,'*.jar'))
51
53
  end
52
54
 
53
- def install_libs
54
- system("cd #{java_root} && #{gradlew} install_libs")
55
+ def build(clean=false)
56
+ if clean
57
+ cmd = "cd #{java_root} && #{gradlew} clean build install_libs"
58
+ else
59
+ cmd = "cd #{java_root} && #{gradlew} build install_libs"
60
+ end
61
+ end
62
+
63
+ def bundle_commands
64
+ gm_path = File.join(ENV['APP_ROOT'],'.game_machine')
65
+ FileUtils.mkdir_p(gm_path)
66
+ vendor_path = File.join(gm_path,'vendor','bundle')
67
+ cmd = "cd #{ENV['APP_ROOT']} && bundle install --path=#{vendor_path}"
68
+ end
69
+
70
+ def run_commands(commands)
71
+ commands.each do |command|
72
+ system(command)
73
+ end
55
74
  end
56
75
 
57
76
  def run!
58
- if command == 'code'
59
- build_code
77
+ commands = []
78
+
79
+ if bundle
80
+ commands << generate_code
60
81
  remove_libs
61
- install_libs
62
- elsif command == 'messages'
63
- generate_code
82
+ commands << build(true)
83
+ commands << bundle_commands
84
+ run_commands(commands)
85
+ bundler_path = File.join(ENV['APP_ROOT'],'.bundle')
86
+ FileUtils.rm_rf(bundler_path)
64
87
  else
65
- generate_code
66
- build_code
67
- remove_libs
68
- install_libs
88
+ if command == 'messages'
89
+ commands << generate_code
90
+ commands << build(false)
91
+ run_commands(commands)
92
+ elsif command == 'clean'
93
+ commands << generate_code
94
+ remove_libs
95
+ commands << build(true)
96
+ run_commands(commands)
97
+ else
98
+ commands << generate_code
99
+ commands << build(false)
100
+ run_commands(commands)
101
+ end
69
102
  end
70
103
  end
71
104
 
@@ -0,0 +1,95 @@
1
+
2
+ require 'digest'
3
+ require 'openssl'
4
+ require 'faraday'
5
+ require 'yaml'
6
+ require 'json'
7
+ require 'fileutils'
8
+ require_relative '../ruby_extensions/string'
9
+
10
+ module Kernel
11
+ def suppress_warnings
12
+ original_verbosity = $VERBOSE
13
+ $VERBOSE = nil
14
+ result = yield
15
+ $VERBOSE = original_verbosity
16
+ return result
17
+ end
18
+ end
19
+
20
+ suppress_warnings {OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE}
21
+
22
+ module GameMachine
23
+ module Console
24
+ class Bundle
25
+
26
+ attr_reader :command, :name, :bundle_dir, :bundle_file
27
+ def initialize(argv)
28
+ @command = argv.shift
29
+ @name = argv.shift
30
+ @bundle_dir = File.join(ENV['APP_ROOT'],'.game_machine')
31
+ @bundle_file = File.join(bundle_dir,'bundle.zip')
32
+ end
33
+
34
+
35
+ def upload_bundle(name)
36
+ username = AppConfig.instance.config.gamecloud.user
37
+ api_key = AppConfig.instance.config.gamecloud.api_key
38
+ host = AppConfig.instance.config.gamecloud.host
39
+
40
+ url = "http://#{host}/bundle/#{username}/upload"
41
+ token = Digest::SHA256.hexdigest("#{username}#{name}#{api_key}")
42
+ file = Faraday::UploadIO.new(bundle_file, 'application/octet-stream')
43
+ body = { :file => file, :name => name }
44
+
45
+
46
+ response = conn.post do |req|
47
+ req.options[:timeout] = 10
48
+ req.options[:open_timeout] = 2
49
+ req.url url
50
+ req.headers['X-Auth'] = token
51
+ req.body = body
52
+ end
53
+ end
54
+
55
+
56
+ def conn
57
+ Faraday.new do |f|
58
+ f.request :multipart
59
+ f.request :url_encoded
60
+ #f.response :logger
61
+ f.adapter Faraday.default_adapter
62
+ end
63
+ end
64
+
65
+ def create_bundle
66
+ FileUtils.mkdir_p(bundle_dir)
67
+ FileUtils.rm_f(bundle_file)
68
+ system("cd #{ENV['APP_ROOT']} && bundle install --path=.game_machine/vendor/bundle >> /dev/null && rm -rf #{ENV['APP_ROOT']}/.bundle")
69
+ system("cd #{ENV['APP_ROOT']} && zip -r .game_machine/bundle.zip games config db lib java bin script web .game_machine/vendor mono >> /dev/null")
70
+ end
71
+
72
+ def run!
73
+ if name.nil? || name.blank?
74
+ puts "Must specify bundle name"
75
+ puts "Usage: game_machine service push [bundle name]"
76
+ exit
77
+ end
78
+
79
+ puts "Creating bundle"
80
+ create_bundle
81
+
82
+ puts "Uploading bundle to server"
83
+ response = upload_bundle(name)
84
+
85
+ if response.status == 204
86
+ puts "Push Successful"
87
+ else
88
+ puts response.body
89
+ puts "Push failed, server returned #{response.status}"
90
+ end
91
+ end
92
+
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,30 @@
1
+ module GameMachine
2
+ module Console
3
+ class Deploy
4
+
5
+ attr_reader :options, :service
6
+ def initialize(service,argv)
7
+ @options = parse_arguments(argv)
8
+ @service = service
9
+ end
10
+
11
+ def parse_arguments(arguments)
12
+ options = {}
13
+
14
+ OptionParser.new do |opt|
15
+ opt.banner = "Usage: game_machine deploy [options]"
16
+ opt.on('-n', '--name=name', String, 'Give a name to the bundle') { |v| options[:server] = v.strip }
17
+
18
+ opt.parse!(arguments)
19
+ end
20
+
21
+ unless options.has_key?(:name)
22
+ options[:name] = 'default'
23
+ end
24
+
25
+ options
26
+ end
27
+
28
+ end
29
+ end
30
+ end
@@ -2,13 +2,12 @@ module GameMachine
2
2
  module Console
3
3
  class Install
4
4
 
5
- attr_reader :install_path, :help, :install_source_path
6
- def initialize(argv,install_source_path)
7
- @install_source_path = install_source_path
5
+ attr_reader :install_path, :help, :install_source_path, :command
6
+ def initialize(command,argv,install_source_path)
7
+ @command = command
8
8
  @install_path = argv.shift
9
- if argv.find {|v| /--help/ =~ v}
10
- @help = true
11
- end
9
+ @install_source_path = install_source_path
10
+
12
11
  puts "Installing from #{install_source_path}"
13
12
  end
14
13
 
@@ -16,39 +15,24 @@ module GameMachine
16
15
  puts "Invalid install path #{install_path} (#{reason})"
17
16
  end
18
17
 
19
- def valid_input?
20
- end
21
-
22
18
  def run!
23
- if help
24
- show_help
25
- return
26
- end
27
-
28
19
  if install_path.nil? || install_path.empty?
29
20
  error("Invalid input")
30
21
  return
31
22
  end
32
23
 
33
- if File.exists?(install_path)
24
+ if command == 'install' && File.exists?(install_path)
34
25
  error("Directory exists")
35
26
  return
36
27
  end
37
28
 
38
- @install_path = File.expand_path(install_path)
39
- install
40
- end
41
-
42
- def show_help
43
- puts "new [install directory]"
44
- end
45
-
46
- def valid_install_path?
47
- if File.exists?(install_path)
48
- false
49
- else
50
- true
29
+ if command == 'upgrade' && !File.exists?(install_path)
30
+ error("Installation not found")
31
+ return
51
32
  end
33
+
34
+ @install_path = File.expand_path(install_path)
35
+ send(command.to_sym)
52
36
  end
53
37
 
54
38
  def install
@@ -58,21 +42,67 @@ module GameMachine
58
42
  FileUtils.cp_r(config_source,path)
59
43
  FileUtils.cp_r(games_source,path)
60
44
  FileUtils.cp_r(java_source,path)
61
- FileUtils.cp_r(script_source,path)
62
45
  FileUtils.cp_r(mono_source,path)
63
- FileUtils.cp_r(db_source,path)
46
+
47
+ FileUtils.cp_r(web_source,path)
48
+ FileUtils.cp_r(lib_source,path)
49
+ FileUtils.cp_r(bin_source,path)
50
+
51
+ FileUtils.cp(gemfile_source,path)
52
+ FileUtils.cp(gemlockfile_source,path)
53
+ end
54
+
55
+ def upgrade
56
+ puts "Upgrading installation at #{install_path}"
57
+ path = File.expand_path(install_path)
58
+
59
+ puts "Upgrading mono"
60
+ FileUtils.rm_rf(File.join(path,'mono'))
61
+ FileUtils.cp_r(mono_source,path)
62
+
63
+ puts 'Upgrading java'
64
+ FileUtils.rm_rf(File.join(path,'java','project'))
65
+ FileUtils.cp_r(java_project_source, File.join(path,'java','project'))
66
+
67
+ puts 'Upgrading Gemfile'
68
+ FileUtils.rm_rf(File.join(path,'Gemfile'))
69
+ FileUtils.cp(gemfile_source,path)
70
+
71
+ FileUtils.rm_rf(File.join(path,'Gemfile.lock'))
72
+ FileUtils.cp(gemlockfile_source,path)
73
+
74
+ puts 'Upgrading lib'
75
+ FileUtils.rm_rf(File.join(path,'lib'))
76
+ FileUtils.cp_r(lib_source,path)
77
+
78
+ puts 'Upgrading bin'
79
+ FileUtils.rm_rf(File.join(path,'bin'))
80
+ FileUtils.cp_r(bin_source,path)
81
+
64
82
  end
65
83
 
66
- def db_source
67
- File.join(install_source_path,'db')
84
+ def gemfile_source
85
+ File.join(install_source_path,'Gemfile')
68
86
  end
69
87
 
70
- def mono_source
71
- File.join(install_source_path,'mono')
88
+ def gemlockfile_source
89
+ File.join(install_source_path,'Gemfile.lock')
72
90
  end
73
91
 
74
- def script_source
75
- File.join(install_source_path,'script')
92
+ def web_source
93
+ File.join(install_source_path,'web')
94
+ end
95
+
96
+ def lib_source
97
+ File.join(install_source_path,'lib')
98
+ end
99
+
100
+ def bin_source
101
+ File.join(install_source_path,'bin')
102
+ end
103
+
104
+ def mono_source
105
+ File.join(install_source_path,'mono')
76
106
  end
77
107
 
78
108
  def config_source
@@ -83,6 +113,10 @@ module GameMachine
83
113
  File.join(install_source_path,'games')
84
114
  end
85
115
 
116
+ def java_project_source
117
+ File.join(install_source_path,'java','project')
118
+ end
119
+
86
120
  def java_source
87
121
  File.join(install_source_path,'java')
88
122
  end