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,26 @@
1
+ package com.game_machine.tutorial;
2
+
3
+ import GameMachine.Messages.GameMessage;
4
+ import akka.event.Logging;
5
+ import akka.event.LoggingAdapter;
6
+
7
+ import com.game_machine.core.Commands;
8
+ import com.game_machine.core.GameMessageActor;
9
+
10
+ public class LootGenerator extends GameMessageActor {
11
+ public static String name = "tutorial_loot_generator";
12
+ LoggingAdapter log = Logging.getLogger(getContext().system(), this);
13
+
14
+ public void awake() {
15
+ Commands.clientManagerRegister(name);
16
+ }
17
+
18
+ public void onGameMessage(GameMessage gameMessage) {
19
+
20
+ }
21
+
22
+ private void onPlayerDisconnect(String playerId) {
23
+
24
+ }
25
+
26
+ }
@@ -117,6 +117,7 @@ import java.util.Map;
117
117
  import com.game_machine.entity_system.Entity;
118
118
  import com.game_machine.entity_system.Entities;
119
119
  import com.game_machine.entity_system.Component;
120
+ import com.game_machine.core.LocalLinkedBuffer;
120
121
 
121
122
  <if(options.generate_pipe_schema)>
122
123
  import com.dyuproject.protostuff.Pipe;
@@ -698,7 +699,7 @@ public byte[] toJson() {
698
699
  }
699
700
 
700
701
  public byte[] toProtobuf() {
701
- LinkedBuffer buffer = LinkedBuffer.allocate(1024);
702
+ LinkedBuffer buffer = LocalLinkedBuffer.get;
702
703
  byte[] bytes = null;
703
704
 
704
705
  try {
@@ -708,6 +709,7 @@ public byte[] toProtobuf() {
708
709
  e.printStackTrace();
709
710
  throw new RuntimeException("Protobuf encoding failed");
710
711
  }
712
+ buffer.clear();
711
713
  return bytes;
712
714
  }
713
715
 
@@ -0,0 +1,13 @@
1
+ # Loggly input key, set this to enable logging to loggly via syslog
2
+ #logback.loggly.inputKey = myinputkey
3
+
4
+ # Syslog logging
5
+ #logback.syslog.host = localhost
6
+ #logback.syslog.port = 5514
7
+ #logback.syslog.facility = LOCAL5
8
+
9
+ # Log level
10
+ logback.level = info
11
+
12
+ # Logfile path is relative to app root
13
+ logback.logfile = log/development.log
@@ -0,0 +1,76 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <configuration scan="true" scanPeriod="120 seconds" debug="true">
3
+
4
+ <property file="java/project/src/main/resources/logback.properties" />
5
+
6
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
7
+ <encoder>
8
+ <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
9
+ </pattern>
10
+ </encoder>
11
+ </appender>
12
+
13
+ <if condition='isDefined("logback.logfile")'>
14
+ <then>
15
+ <appender name="FILE" class="ch.qos.logback.core.FileAppender">
16
+ <file>${logback.logfile}</file>
17
+ <encoder>
18
+ <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
19
+ </pattern>
20
+ </encoder>
21
+ </appender>
22
+ </then>
23
+ </if>
24
+
25
+ <if condition='isDefined("logback.syslog.host")'>
26
+ <then>
27
+ <appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender">
28
+ <syslogHost>${logback.syslog.host}</syslogHost>
29
+ <port>${logback.syslog.port}</port>
30
+ <facility>${logback.syslog.facility}</facility>
31
+ <suffixPattern>game_machine: [%thread] %logger %msg
32
+ </suffixPattern>
33
+ <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
34
+ <level>INFO</level>
35
+ </filter>
36
+ </appender>
37
+ </then>
38
+ </if>
39
+
40
+
41
+ <if condition='isDefined("logback.loggly.inputKey")'>
42
+ <then>
43
+ <appender name="SYSLOG_LOGGLY" class="ch.qos.logback.classic.net.SyslogAppender">
44
+ <syslogHost>logs-01.loggly.com</syslogHost>
45
+ <facility>LOCAL5</facility>
46
+ <suffixPattern>game_machine - - [${logback.loggly.inputKey}@41058]: [%thread] %logger %msg
47
+ </suffixPattern>
48
+ <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
49
+ <level>INFO</level>
50
+ </filter>
51
+ </appender>
52
+
53
+ </then>
54
+ </if>
55
+
56
+ <root level="${logback.level}">
57
+ <if condition='isDefined("logback.loggly.inputKey")'>
58
+ <then>
59
+ <appender-ref ref="SYSLOG_LOGGLY" />
60
+ </then>
61
+ </if>
62
+ <if condition='isDefined("logback.syslog.host")'>
63
+ <then>
64
+ <appender-ref ref="SYSLOG" />
65
+ </then>
66
+ </if>
67
+ <if condition='isDefined("logback.logfile")'>
68
+ <then>
69
+ <appender-ref ref="FILE" />
70
+ </then>
71
+ </if>
72
+
73
+ <appender-ref ref="STDOUT" />
74
+ </root>
75
+
76
+ </configuration>
@@ -0,0 +1,26 @@
1
+ package game;
2
+
3
+ import GameMachine.Messages.GameMessage;
4
+ import akka.event.Logging;
5
+ import akka.event.LoggingAdapter;
6
+
7
+ import com.game_machine.core.Commands;
8
+ import com.game_machine.core.GameMessageActor;
9
+
10
+ public class MyGameActor extends GameMessageActor {
11
+ public static String name = "my_game_actor";
12
+ LoggingAdapter log = Logging.getLogger(getContext().system(), this);
13
+
14
+ public void awake() {
15
+ Commands.clientManagerRegister(name);
16
+ }
17
+
18
+ public void onGameMessage(GameMessage gameMessage) {
19
+
20
+ }
21
+
22
+ private void onPlayerDisconnect(String playerId) {
23
+
24
+ }
25
+
26
+ }
@@ -1,4 +1,3 @@
1
-
2
1
  require 'rbconfig'
3
2
 
4
3
  require_relative 'game_machine/ruby_extensions/nilclass'
@@ -18,23 +17,24 @@ module GameMachine
18
17
  ENV.fetch('JAVA_ROOT')
19
18
  end
20
19
  end
20
+
21
21
  require 'java'
22
22
 
23
- jars = Dir[File.join(GameMachine.app_root, 'java/lib', '*.jar')]
24
- jars.each {|jar| require jar}
23
+ jars = Dir[File.join(GameMachine.java_root, 'lib', '*.jar')]
24
+ jars.each do |jar|
25
+ require jar
26
+ end
25
27
 
26
- #java_import 'com.game_machine.core.net.client.UdtClient'
27
- #java_import 'com.game_machine.core.net.client.UdtClientHandler'
28
28
 
29
29
  require_relative 'game_machine/java_lib'
30
30
 
31
31
  require_relative 'game_machine/protobuf'
32
32
  require_relative 'game_machine/version'
33
33
  require_relative 'game_machine/grid'
34
- require_relative 'game_machine/game_loader'
35
34
  require_relative 'game_machine/message_buffer'
36
35
  require_relative 'game_machine/vector'
37
36
  require_relative 'game_machine/logger'
37
+ require_relative 'game_machine/hocon_config'
38
38
  require_relative 'game_machine/app_config'
39
39
  require_relative 'game_machine/helpers/state_machine'
40
40
  require_relative 'game_machine/actor'
@@ -42,18 +42,16 @@ require_relative 'game_machine/commands'
42
42
  require_relative 'game_machine/model'
43
43
  require_relative 'game_machine/models'
44
44
  require_relative 'game_machine/handlers/authentication'
45
- require_relative 'game_machine/hashring'
46
45
  require_relative 'game_machine/application'
47
46
  require_relative 'game_machine/game_systems'
48
47
  require_relative 'game_machine/handlers/request'
49
48
  require_relative 'game_machine/handlers/game'
49
+ require_relative 'game_machine/handlers/player_authentication'
50
50
  require_relative 'game_machine/actor/builder'
51
51
  require_relative 'game_machine/message_queue'
52
52
  require_relative 'game_machine/object_db'
53
53
  require_relative 'game_machine/write_behind_cache'
54
54
  require_relative 'game_machine/data_store'
55
- require_relative 'game_machine/auth_handlers/base'
56
- require_relative 'game_machine/auth_handlers/public'
57
55
  require_relative 'game_machine/system_monitor'
58
56
  require_relative 'game_machine/cluster_monitor'
59
57
  require_relative 'game_machine/system_stats'
@@ -63,23 +61,26 @@ require_relative 'game_machine/scheduler'
63
61
  require_relative 'game_machine/endpoints'
64
62
  require_relative 'game_machine/protobuf_extensions/entity_helper'
65
63
  require_relative 'game_machine/helpers/game_message'
66
- require_relative 'game_machine/grid_replicator'
67
64
  require_relative 'game_machine/akka'
68
65
  require_relative 'game_machine/clients'
69
66
  require_relative 'game_machine/mono_server'
70
67
  require_relative 'game_machine/restart_watcher'
71
68
  require_relative 'game_machine/uniqueid'
69
+ require_relative 'game_machine/wavefront_ext'
70
+ require_relative 'game_machine/routes'
71
+ require_relative 'game_machine/default_handlers'
72
+ require_relative 'game_machine/cloud_updater'
72
73
 
73
- if Config::CONFIG['target_os'] == 'linux'
74
- require_relative 'game_machine/navigation'
74
+ if RbConfig::CONFIG['host_os'].match(/linux/i)
75
+ #require_relative 'game_machine/navigation'
75
76
  else
76
77
  GameMachine.logger.info "Pathfinding disabled (windows support not yet available)"
77
78
  end
78
79
 
79
-
80
80
  java.util.concurrent.TimeUnit::MILLISECONDS
81
81
  java.util.concurrent.TimeUnit::SECONDS
82
82
 
83
-
84
-
85
-
83
+ Signal.trap("TERM") {
84
+ puts "Caught SIGTERM, exiting"
85
+ System.exit(0)
86
+ }
@@ -3,5 +3,5 @@ require_relative 'actor/system'
3
3
  require_relative 'actor/base'
4
4
  require_relative 'actor/factory'
5
5
  require_relative 'actor/ref'
6
- require_relative 'actor/mono_actor'
7
6
  require_relative 'actor/development'
7
+ require_relative 'actor/game_actor'
@@ -5,7 +5,7 @@ module GameMachine
5
5
  class MissingHashringError < StandardError;end
6
6
 
7
7
  # @abstract All game actors inherit fromm this class
8
- class Base < JavaLib::UntypedActor
8
+ class Base < JavaLib::GameActor
9
9
 
10
10
  ON_RECEIVE_HOOKS = {}
11
11
 
@@ -49,23 +49,8 @@ module GameMachine
49
49
  end
50
50
  end
51
51
 
52
- def reset_hashrings
53
- @@hashrings = nil
54
- end
55
-
56
- def hashrings
57
- @@hashrings ||= java.util.concurrent.ConcurrentHashMap.new
58
- end
59
-
60
52
  def hashring(name)
61
- hashrings.fetch(name,nil)
62
- end
63
-
64
- def add_hashring(name,hashring)
65
- if hashring(name)
66
- raise DuplicateHashringError, "name=#{name}"
67
- end
68
- hashrings[name] = hashring
53
+ JavaLib::Hashring.get_hashring(name)
69
54
  end
70
55
 
71
56
  # Find a local actor by name
@@ -90,7 +75,6 @@ module GameMachine
90
75
  # on a consistent hashing of the id.
91
76
  # @return [Actor::Ref]
92
77
  def find_distributed_local(id,name=self.name)
93
- ensure_hashring(name)
94
78
  Actor::Ref.new(local_distributed_path(id, name),name)
95
79
  end
96
80
 
@@ -99,7 +83,6 @@ module GameMachine
99
83
  # any server in the cluster
100
84
  # @return [Actor::Ref]
101
85
  def find_distributed(id,name=self.name)
102
- ensure_hashring(name)
103
86
  Actor::Ref.new(distributed_path(id, name),name)
104
87
  end
105
88
 
@@ -125,25 +108,19 @@ module GameMachine
125
108
 
126
109
  private
127
110
 
128
- def ensure_hashring(name)
129
- unless hashring(name)
130
- raise MissingHashringError
131
- end
132
- end
133
-
134
111
  def remote_path(server,name)
135
- "#{Akka.address_for(server)}/user/#{name}"
112
+ "#{server}/user/#{name}"
136
113
  end
137
114
 
138
115
  def local_distributed_path(id,name)
139
- bucket = hashring(name).bucket_for(id)
140
- "/user/#{bucket}"
116
+ node = hashring(name).node_for(id)
117
+ "/user/#{node}"
141
118
  end
142
119
 
143
120
  def distributed_path(id,name)
144
- server = Akka.instance.hashring.bucket_for(id)
145
- bucket = hashring(name).bucket_for(id)
146
- "#{server}/user/#{bucket}"
121
+ server = Akka.instance.hashring.node_for(id)
122
+ node = hashring(name).node_for(id)
123
+ "#{server}/user/#{node}"
147
124
  end
148
125
 
149
126
  end
@@ -86,8 +86,8 @@ module GameMachine
86
86
  GameMachine.logger.debug "Game actor #{@name} starting"
87
87
  if @create_hashring
88
88
  hashring = create_hashring(@hashring_size)
89
- hashring.buckets.map do |bucket_name|
90
- @actor_system.actor_of(@props, bucket_name)
89
+ hashring.nodes.to_a.each do |node_name|
90
+ @actor_system.actor_of(@props, node_name)
91
91
  end
92
92
  else
93
93
  @actor_system.actor_of(@props, @name)
@@ -97,10 +97,9 @@ module GameMachine
97
97
 
98
98
  private
99
99
 
100
- def create_hashring(bucket_count)
101
- hashring = Hashring.create_actor_ring(@name,bucket_count)
102
- @klass.add_hashring(@name,hashring)
103
- hashring
100
+ def create_hashring(node_count)
101
+ node_names = (0..node_count).map {|r| "#{@name}#{r}"}
102
+ JavaLib::Hashring.new(@name,node_names,3)
104
103
  end
105
104
 
106
105
  end
@@ -0,0 +1,55 @@
1
+ require_relative '../commands'
2
+ require_relative '../model'
3
+ require_relative '../models'
4
+ module GameMachine
5
+ module Actor
6
+ class GameActor < Base
7
+ include GameMachine::Commands
8
+ include GameMachine::Models
9
+ attr_reader :player_id
10
+
11
+ def awake(args)
12
+ end
13
+
14
+ def on_player_disconnect(player_id)
15
+ end
16
+
17
+ def new_game_message
18
+ MessageLib::GameMessage.new
19
+ end
20
+
21
+ def post_init(*args)
22
+ awake(args)
23
+ commands.misc.client_manager_register(self.class.name)
24
+ end
25
+
26
+ def call_mono(klass,message)
27
+ commands.misc.call_mono(klass,message)
28
+ end
29
+
30
+ def tell_player(game_message,target=player_id)
31
+ commands.player.send_game_message(game_message,target)
32
+ end
33
+
34
+ def tell_game_actor(game_message,target)
35
+ game_message.player_id = player_id
36
+ Actor::Base.find(target.name).tell(game_message)
37
+ end
38
+
39
+ def on_receive(message)
40
+ @player_id = nil
41
+
42
+ if message.is_a?(MessageLib::GameMessage)
43
+ @player_id = message.player_id
44
+ set_player_id(message.player_id)
45
+ on_game_message(message)
46
+ elsif message.is_a?(MessageLib::ClientManagerEvent)
47
+ if message.event == 'disconnected'
48
+ on_player_disconnect(message.player_id)
49
+ end
50
+ end
51
+ end
52
+
53
+ end
54
+ end
55
+ end
@@ -21,6 +21,11 @@ module GameMachine
21
21
  end
22
22
  end
23
23
 
24
+ def games_root
25
+ File.join(GameMachine.app_root,'/games')
26
+ end
27
+
28
+
24
29
  def register(name)
25
30
  registered_actors[File.basename(name.underscore)] = name
26
31
  end
@@ -32,7 +37,7 @@ module GameMachine
32
37
  end
33
38
 
34
39
  def update_paths(first_run=false)
35
- Dir.glob(File.join(GameLoader.games_root,'**','*.rb')).each do |file|
40
+ Dir.glob(File.join(games_root,'**','*.rb')).each do |file|
36
41
  mtime = File.mtime(file)
37
42
  basename = File.basename(file,'.rb')
38
43