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,117 @@
1
+
2
+ #include "pathfinder.h"
3
+
4
+ using namespace std;
5
+
6
+ static map<int, Crowd*> crowds;
7
+ static map<int, Navmesh*> navmeshes;
8
+ static map<int, Astar*> pathfinders;
9
+
10
+ // Navmesh externs
11
+ extern "C" EXPORT_API void addNavmesh(int id, const char *file) {
12
+ if (navmeshes[id] == 0) {
13
+ Navmesh* navmesh = new Navmesh(id,file);
14
+ navmeshes[id] = navmesh;
15
+ }
16
+ }
17
+
18
+ extern "C" EXPORT_API int findPath(int navmeshId, float startx, float starty,
19
+ float startz, float endx, float endy, float endz, int find_straight_path,
20
+ float* resultPath)
21
+ {
22
+ Navmesh* navmesh = navmeshes[navmeshId];
23
+ return navmesh->findPath(startx, starty, startz, endx, endy, endz, find_straight_path, resultPath);
24
+ }
25
+
26
+ extern "C" EXPORT_API void gmapSetPassable(int navmeshId, int a, int b, int radius)
27
+ {
28
+ Navmesh* navmesh = navmeshes[navmeshId];
29
+ navmesh->gmapSetPassable(a, b, radius);
30
+ }
31
+ extern "C" EXPORT_API void gmapSetBlocked(int navmeshId, int a, int b, int radius)
32
+ {
33
+ Navmesh* navmesh = navmeshes[navmeshId];
34
+ navmesh->gmapSetBlocked(a, b, radius);
35
+ }
36
+
37
+ // Crowd externs
38
+
39
+ // Add crowd using existing navmesh
40
+ extern "C" EXPORT_API void addCrowd(int id, int navmeshid) {
41
+ if (crowds[id] == 0 && navmeshes[navmeshid] != 0)
42
+ {
43
+ Navmesh* navmesh = navmeshes[navmeshid];
44
+ Crowd* crowd = new Crowd(navmesh);
45
+ crowds[id] = crowd;
46
+ }
47
+ }
48
+
49
+ extern "C" EXPORT_API int addAgent(int crowdId, const float* p, float accel,
50
+ float speed, float radius, float height, int optflag, float sepWeight)
51
+ {
52
+ Crowd* crowd = crowds[crowdId];
53
+ return crowd->addAgent(p, accel, speed, radius, height, optflag, sepWeight);
54
+ }
55
+
56
+ extern "C" EXPORT_API void removeAgent(int crowdId, const int idx)
57
+ {
58
+ Crowd* crowd = crowds[crowdId];
59
+ crowd->removeAgent(idx);
60
+ }
61
+ extern "C" EXPORT_API void setMoveTarget(int crowdId, const float* p, bool adjust, int agentIdx)
62
+ {
63
+ Crowd* crowd = crowds[crowdId];
64
+ crowd->setMoveTarget(p, adjust, agentIdx);
65
+ }
66
+
67
+ extern "C" EXPORT_API void getAgentPosition(int crowdId, int idx, float* resultPath)
68
+ {
69
+ Crowd* crowd = crowds[crowdId];
70
+ const dtCrowdAgent* ag = crowd->getCrowd()->getAgent(idx);
71
+ if (!ag->active)
72
+ return;
73
+ memcpy(resultPath, ag->npos, 3*sizeof(float));
74
+ }
75
+
76
+ extern "C" EXPORT_API void updateTick(int crowdId, const float dt)
77
+ {
78
+ Crowd* crowd = crowds[crowdId];
79
+ crowd->updateTick(dt);
80
+ }
81
+
82
+
83
+ // Astar 2d grid pathfinding externs
84
+
85
+ extern "C" EXPORT_API void addPathfinder(int i, int width, int height) {
86
+ Astar* pathfinder = new Astar(width,height);
87
+ pathfinders[i] = pathfinder;
88
+ }
89
+
90
+ extern "C" EXPORT_API void setBlocked(int pathfinder, int x, int y) {
91
+ Astar *astar = pathfinders[pathfinder];
92
+ astar->setBlocked(x,y);
93
+ }
94
+
95
+ extern "C" EXPORT_API void setPassable(int pathfinder, int x, int y) {
96
+ Astar *astar = pathfinders[pathfinder];
97
+ astar->setPassable(x,y);
98
+ }
99
+
100
+ extern "C" EXPORT_API int getXAt(int pathfinder, int index) {
101
+ Astar *astar = pathfinders[pathfinder];
102
+ return astar->getXAt(index);
103
+ }
104
+
105
+ extern "C" EXPORT_API int getYAt(int pathfinder, int index) {
106
+ Astar *astar = pathfinders[pathfinder];
107
+ return astar->getYAt(index);
108
+ }
109
+
110
+ extern "C" EXPORT_API int findpath2d(int pathfinder, int startx, int starty, int endx, int endy)
111
+ {
112
+ Astar *astar = pathfinders[pathfinder];
113
+ astar->ClearPath();
114
+ int res = astar->findPath(startx,starty,endx,endy);
115
+ astar->Print();
116
+ return res;
117
+ }
File without changes
@@ -47,11 +47,14 @@ solution "pathfinding"
47
47
  language "C++"
48
48
  kind "StaticLib"
49
49
  includedirs {
50
- "recastnavigation/Detour/Include"
50
+ "recastnavigation/Detour/Include",
51
+ "recastnavigation/DetourCrowd/Include"
51
52
  }
52
53
  files {
53
54
  "recastnavigation/Detour/Include/*.h",
54
- "recastnavigation/Detour/Source/*.cpp"
55
+ "recastnavigation/Detour/Source/*.cpp",
56
+ "recastnavigation/DetourCrowd/Include/*.h",
57
+ "recastnavigation/DetourCrowd/Source/*.cpp"
55
58
  }
56
59
  targetdir (todir .. "/lib")
57
60
  configuration "not windows"
@@ -63,6 +66,7 @@ project "detour_path"
63
66
  includedirs {
64
67
  "recastnavigation/Detour/Include",
65
68
  "recastnavigation/Recast/Include",
69
+ "recastnavigation/DetourCrowd/Include",
66
70
  "include"
67
71
  }
68
72
 
@@ -71,6 +75,8 @@ project "detour_path"
71
75
  "recastnavigation/Detour/Include/*.h",
72
76
  "recastnavigation/Recast/Include/Recast.h",
73
77
  "recastnavigation/Detour/Source/*.cpp",
78
+ "recastnavigation/DetourCrowd/Include/*.h",
79
+ "recastnavigation/DetourCrowd/Source/*.cpp",
74
80
  "include/*.h",
75
81
  "*.cpp"
76
82
  }
@@ -88,7 +94,8 @@ project "pathfind_test"
88
94
  kind "ConsoleApp"
89
95
  includedirs {
90
96
  "recastnavigation/Detour/Include",
91
- "recastnavigation/Recast/Include",
97
+ "recastnavigation/Recast/Include",
98
+ "recastnavigation/DetourCrowd/Include",
92
99
  "include"
93
100
  }
94
101
  libdirs {todir .. "lib" }
@@ -96,6 +103,8 @@ project "pathfind_test"
96
103
  "recastnavigation/Detour/Include/*.h",
97
104
  "recastnavigation/Recast/Include/Recast.h",
98
105
  "recastnavigation/Detour/Source/*.cpp",
106
+ "recastnavigation/DetourCrowd/Include/*.h",
107
+ "recastnavigation/DetourCrowd/Source/*.cpp",
99
108
  "include/*.h",
100
109
  "*.cpp"
101
110
  }
@@ -60,13 +60,6 @@ module GameMachine
60
60
  end
61
61
  end
62
62
 
63
- describe "#add_hashring" do
64
- it "adds the hashring and returns it" do
65
- expect(Actor::Base.add_hashring('test','ring')).to eq(Actor::Base.hashring('test'))
66
- expect(Actor::Base.hashring('test')).to eq('ring')
67
- end
68
- end
69
-
70
63
  end
71
64
  end
72
65
  end
@@ -80,7 +80,7 @@ module GameMachine
80
80
  describe "#on_receive" do
81
81
 
82
82
  it "should not process client even if message is from self" do
83
- client_connected_event.client_event.set_sender_id("default|me")
83
+ client_connected_event.client_event.set_sender_id("#{Akka.instance.address}|me")
84
84
  expect(subject).to_not receive(:process_client_event)
85
85
  subject.on_receive(client_connected_event)
86
86
  end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+ require 'benchmark'
3
+ module GameMachine
4
+
5
+ describe "couchproxy integration test" do
6
+
7
+ subject {JavaLib::Couchclient.get_instance}
8
+
9
+ before(:each) do
10
+ JavaLib::Couchclient.get_instance.set_credentials(
11
+ Application.config.gamecloud.host,
12
+ Application.config.gamecloud.user,
13
+ Application.config.gamecloud.api_key
14
+ )
15
+ end
16
+
17
+ it "should handle string values" do
18
+ subject.put_string("key1","value")
19
+ expect(subject.get_string("key1")).to eql 'value'
20
+ end
21
+
22
+ it "should handle keys that require uri escaping" do
23
+ key = 'first|two|=()*? $%#{@!~}"last'
24
+ value = "testing"
25
+ subject.put_string(key,value)
26
+ expect(subject.get_string(key)).to eql value
27
+ end
28
+
29
+ it "should handle protobuf binary messages" do
30
+ key = "one"
31
+ entity = MessageLib::Entity.new.set_id("testing")
32
+ subject.put_bytes(key,entity.to_byte_array)
33
+ bytes = subject.get_bytes(key)
34
+ entity = MessageLib::Entity.parse_from(bytes)
35
+ expect(entity.id).to eql "testing"
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,129 @@
1
+ require 'spec_helper'
2
+ module GameMachine
3
+
4
+ describe "entity persistence" do
5
+
6
+ let(:player_id) {'player'}
7
+ let(:id) {'one'}
8
+
9
+ let(:test_object) do
10
+ message = MessageLib::TestObject.new
11
+ message.set_id(id)
12
+ message.set_required_string('testing')
13
+ message.set_fvalue(1.9)
14
+ message.set_bvalue(true)
15
+ message.set_dvalue(3.4)
16
+ message.set_numbers64(555)
17
+ end
18
+
19
+ let(:entity) {MessageLib::Entity.new.set_id(id)}
20
+
21
+ subject do
22
+ MessageLib::TestObject
23
+ end
24
+
25
+ describe "objectdb persistence" do
26
+
27
+ describe "#query" do
28
+ it "performs a query on the gamecloud" do
29
+ GameMachine::DataStore.instance.delete_matching("players",'')
30
+ player = MessageLib::Player.new.set_id('player2').set_password_hash('blah')
31
+ GameMachine::DataStore.instance.set("players##player2",player)
32
+ messages = GameMachine::DataStore.instance.query("players",'',200,'Player')
33
+ expect(messages.size).to eq(1)
34
+ expect(messages.first.id).to eq('player2')
35
+ end
36
+
37
+ it "should return players with matching ids" do
38
+ 100.times do |i|
39
+ player = MessageLib::Player.new.set_id("player#{i}").set_password_hash('blah')
40
+ GameMachine::DataStore.instance.set("players##player#{i}",player)
41
+ end
42
+ messages = GameMachine::DataStore.instance.query("players",'',200,'Player')
43
+ expect(messages.size).to eq(100)
44
+
45
+ messages2 = GameMachine::DataStore.instance.query("players",'player95',200,'Player')
46
+ expect(messages2.size).to eq(1)
47
+ end
48
+ end
49
+
50
+ describe "#dbDelete" do
51
+ it "sends delete request to object store" do
52
+ MessageLib::Entity.store_delete(player_id,id)
53
+ end
54
+ end
55
+
56
+ describe "#dbPut" do
57
+ it "sends save request to object store" do
58
+ entity.store_set(player_id)
59
+ end
60
+ end
61
+
62
+ describe "#dbGet" do
63
+ it "retrieves entity from the object store" do
64
+ entity.store_set(player_id)
65
+ sleep 1
66
+ entity = MessageLib::Entity.store_get(player_id,id,6000)
67
+ expect(entity.id).to eql id
68
+ end
69
+ end
70
+
71
+ describe "store any message that has id" do
72
+ it "stores and retrieves message having correct id" do
73
+ player = MessageLib::Player.new.set_id('player2').set_password_hash('blah')
74
+ player.store_set(player_id)
75
+ sleep 1
76
+ player = MessageLib::Player.store_get(player_id,'player2',2000)
77
+ expect(player.id).to eql('player2')
78
+ end
79
+ end
80
+ end
81
+
82
+ describe "Orm persistence", :if => GameMachine::Application.config.orm do
83
+ before(:each) do
84
+ GameMachine::Application.orm_connect
85
+ ModelLib::TestObject.open
86
+ ModelLib::TestObject.delete_all
87
+ ModelLib::TestObject.close
88
+ end
89
+
90
+ describe "#ormSave" do
91
+ it "should return true" do
92
+ expect(test_object.db_save(player_id)).to be_truthy
93
+ end
94
+ end
95
+
96
+ describe "#ormFind" do
97
+ it "should return test object with correct values" do
98
+ test_object.db_save(player_id)
99
+ obj = subject.db_find(id,player_id)
100
+ expect(obj.required_string).to eql(test_object.required_string)
101
+ expect(obj.fvalue).to eql(test_object.fvalue)
102
+ expect(obj.bvalue).to eql(test_object.bvalue)
103
+ expect(obj.dvalue).to eql(test_object.dvalue)
104
+ expect(obj.numbers64).to eql(test_object.numbers64)
105
+ end
106
+ end
107
+
108
+ describe "#ormWhere" do
109
+ it "should return list with one test object" do
110
+ test_object.db_save(player_id)
111
+ list = subject.db_where('test_object_dvalue = ?',3.4)
112
+ expect(list.to_a.size).to eql(1)
113
+ end
114
+ end
115
+
116
+ describe "#ormDelete" do
117
+ it "should return false if no record" do
118
+ expect(test_object.db_delete(player_id)).to be_falsy
119
+ end
120
+
121
+ it "should return true" do
122
+ test_object.db_save(player_id)
123
+ expect(test_object.db_delete(player_id)).to be_truthy
124
+ end
125
+ end
126
+ end
127
+
128
+ end
129
+ end
@@ -16,11 +16,11 @@ module GameMachine
16
16
  let(:invite_id) {'invite'}
17
17
 
18
18
  let(:team) do
19
- Team.new(:owner => player_id, :name => team_name, :access => 'public', :members => team_members)
19
+ Team.new(:id => team_name, :owner => player_id, :name => team_name, :access => 'public', :members => team_members)
20
20
  end
21
21
 
22
22
  let(:team_two_members) do
23
- Team.new(:owner => player_id, :name => team_name2, :access => 'public', :members => [player_id,player2])
23
+ Team.new(:id => team_name2, :owner => player_id, :name => team_name2, :access => 'public', :members => [player_id,player2])
24
24
  end
25
25
 
26
26
  let(:team_invite) do
@@ -1,59 +1,37 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module GameMachine
4
- describe Hashring do
4
+ describe 'JavaLib::Hashring' do
5
5
 
6
- let(:buckets) {['server1','server2']}
7
- let(:bucket_name) {'test_bucket'}
6
+ let(:nodes) {['server1','server2']}
7
+ let(:node_name) {'test_node'}
8
8
 
9
9
  subject do
10
- Hashring.new(buckets)
10
+ JavaLib::Hashring.new('test',nodes,3)
11
11
  end
12
12
 
13
- describe "#nodes" do
14
- it "nodes should equal buckets" do
15
- expect(subject.nodes.sort).to eq(buckets.sort)
13
+ describe "#node_for" do
14
+ it "returns node for value" do
15
+ expect(nodes.to_a.include?(subject.node_for('test'))).to be_truthy
16
16
  end
17
17
  end
18
18
 
19
- describe "#points" do
20
- it "should be number of points equal to REPLICAS * buckets.size " do
21
- expect(subject.points.size).to eq(subject.buckets.size * Hashring::REPLICAS)
22
- end
23
- end
24
-
25
- describe "#bucket_for" do
26
- it "returns bucket for value" do
27
- expect(buckets.include?(subject.bucket_for('test'))).to be_truthy
28
- end
29
- end
30
-
31
- describe "#remove_bucket" do
32
- it "removes the bucket from buckets array" do
33
- subject.remove_bucket('server1')
34
- expect(subject.buckets.size).to eq(1)
35
- expect(subject.buckets.first).to eq('server2')
36
- end
37
-
19
+ describe "#remove_node" do
20
+
38
21
  it "removes node from ring" do
39
- subject.remove_bucket('server1')
40
- expect(subject.nodes.size).to eq(1)
41
- expect(subject.buckets.first).to eq('server2')
22
+ subject.remove_node('server1')
23
+ expect(subject.nodes.to_a.size).to eq(1)
24
+ expect(subject.nodes.to_a.first).to eq('server2')
42
25
  end
43
26
  end
44
27
 
45
- describe "#add_bucket" do
46
- it "adds new bucket to buckets array" do
47
- subject.add_bucket('blah')
48
- expect(subject.buckets.size).to eq(3)
49
- expect(subject.buckets.sort.first).to eq('blah')
28
+ describe "#add_node" do
29
+ it "adds new node to nodes array" do
30
+ subject.add_node('blah')
31
+ expect(subject.nodes.to_a.size).to eq(3)
32
+ expect(subject.nodes.to_a.sort.first).to eq('blah')
50
33
  end
51
34
 
52
- it "adds node to ring" do
53
- subject.add_bucket('blah')
54
- expect(subject.nodes.size).to eq(3)
55
- expect(subject.nodes.sort.first).to eq('blah')
56
- end
57
35
  end
58
36
  end
59
37
  end