game_machine 0.0.11 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (274) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +12 -1
  3. data/Gemfile.lock +32 -47
  4. data/Rakefile +0 -27
  5. data/bin/bundle_run.sh +1 -0
  6. data/bin/game_machine +29 -27
  7. data/config/cluster.conf +6 -5
  8. data/config/default.conf +164 -0
  9. data/config/game_machine.sql +33 -0
  10. data/config/game_messages.proto +87 -25
  11. data/config/gamecloud.conf +140 -0
  12. data/config/messages.proto +46 -53
  13. data/config/test.conf +149 -0
  14. data/game_machine.gemspec +10 -5
  15. data/games/boot.rb +3 -0
  16. data/games/example/data/game_data.yml +4 -4
  17. data/games/example/lib/aggressive_npc.rb +1 -1
  18. data/games/example/lib/game.rb +1 -2
  19. data/games/example/lib/player_register.rb +1 -1
  20. data/games/routes.rb +9 -0
  21. data/games/tutorial/boot.rb +12 -0
  22. data/games/tutorial/item_manager.rb +256 -0
  23. data/games/tutorial/object_store.rb +55 -0
  24. data/games/tutorial/seed.rb +52 -0
  25. data/games/tutorial/sql_store.rb +30 -0
  26. data/java/project/build.gradle +134 -0
  27. data/java/project/component.erb +719 -0
  28. data/java/{gradle.properties → project/gradle.properties} +1 -1
  29. data/java/project/gradle/wrapper/gradle-wrapper.jar +0 -0
  30. data/java/{gradle → project/gradle}/wrapper/gradle-wrapper.properties +2 -2
  31. data/java/{gradlew → project/gradlew} +0 -0
  32. data/java/{gradlew.bat → project/gradlew.bat} +0 -0
  33. data/java/project/local_lib/AdminUi.jar +0 -0
  34. data/java/{local_lib/protostuff-compiler-1.0.7-jarjar.jar → project/local_lib/protostuff-compiler-1.0.8-jarjar.jar} +0 -0
  35. data/java/project/local_lib/sigar/libsigar-amd64-freebsd-6.so +0 -0
  36. data/java/project/local_lib/sigar/libsigar-amd64-linux.so +0 -0
  37. data/java/project/local_lib/sigar/libsigar-amd64-solaris.so +0 -0
  38. data/java/project/local_lib/sigar/libsigar-ia64-hpux-11.sl +0 -0
  39. data/java/project/local_lib/sigar/libsigar-ia64-linux.so +0 -0
  40. data/java/project/local_lib/sigar/libsigar-pa-hpux-11.sl +0 -0
  41. data/java/project/local_lib/sigar/libsigar-ppc-aix-5.so +0 -0
  42. data/java/project/local_lib/sigar/libsigar-ppc-linux.so +0 -0
  43. data/java/project/local_lib/sigar/libsigar-ppc64-aix-5.so +0 -0
  44. data/java/project/local_lib/sigar/libsigar-ppc64-linux.so +0 -0
  45. data/java/project/local_lib/sigar/libsigar-s390x-linux.so +0 -0
  46. data/java/project/local_lib/sigar/libsigar-sparc-solaris.so +0 -0
  47. data/java/project/local_lib/sigar/libsigar-sparc64-solaris.so +0 -0
  48. data/java/project/local_lib/sigar/libsigar-universal-macosx.dylib +0 -0
  49. data/java/project/local_lib/sigar/libsigar-universal64-macosx.dylib +0 -0
  50. data/java/project/local_lib/sigar/libsigar-x86-freebsd-5.so +0 -0
  51. data/java/project/local_lib/sigar/libsigar-x86-freebsd-6.so +0 -0
  52. data/java/project/local_lib/sigar/libsigar-x86-linux.so +0 -0
  53. data/java/project/local_lib/sigar/libsigar-x86-solaris.so +0 -0
  54. data/java/project/local_lib/sigar/sigar-amd64-winnt.dll +0 -0
  55. data/java/project/local_lib/sigar/sigar-x86-winnt.dll +0 -0
  56. data/java/project/local_lib/sigar/sigar-x86-winnt.lib +0 -0
  57. data/java/project/model.erb +99 -0
  58. data/java/{settings.gradle → project/settings.gradle} +0 -0
  59. data/java/project/src/main/java/com/game_machine/authentication/DefaultAuthenticator.java +28 -0
  60. data/java/project/src/main/java/com/game_machine/authentication/PlayerAuthenticator.java +6 -0
  61. data/java/project/src/main/java/com/game_machine/authentication/PublicAuthenticator.java +20 -0
  62. data/java/{src → project/src}/main/java/com/game_machine/core/ActorFactory.java +0 -0
  63. data/java/{src → project/src}/main/java/com/game_machine/core/ActorUtil.java +13 -0
  64. data/java/project/src/main/java/com/game_machine/core/AuthorizedPlayers.java +23 -0
  65. data/java/project/src/main/java/com/game_machine/core/ClientMessageDecoder.java +36 -0
  66. data/java/project/src/main/java/com/game_machine/core/ClientMessageEncoder.java +19 -0
  67. data/java/project/src/main/java/com/game_machine/core/CloudClient.java +298 -0
  68. data/java/{src → project/src}/main/java/com/game_machine/core/CommandProxy.java +0 -0
  69. data/java/project/src/main/java/com/game_machine/core/Commands.java +20 -0
  70. data/java/project/src/main/java/com/game_machine/core/DatastoreCommands.java +43 -0
  71. data/java/project/src/main/java/com/game_machine/core/DbConnectionPool.java +72 -0
  72. data/java/project/src/main/java/com/game_machine/core/DefaultMovementVerifier.java +56 -0
  73. data/java/{src → project/src}/main/java/com/game_machine/core/EntitySerializer.java +0 -0
  74. data/java/project/src/main/java/com/game_machine/core/EntityTracking.java +119 -0
  75. data/java/{src → project/src}/main/java/com/game_machine/core/EventStreamHandler.java +1 -1
  76. data/java/project/src/main/java/com/game_machine/core/GameActor.java +73 -0
  77. data/java/project/src/main/java/com/game_machine/core/GameMachineLoader.java +43 -0
  78. data/java/project/src/main/java/com/game_machine/core/GameMessageActor.java +44 -0
  79. data/java/project/src/main/java/com/game_machine/core/Grid.java +255 -0
  80. data/java/{src → project/src}/main/java/com/game_machine/core/GridValue.java +0 -0
  81. data/java/project/src/main/java/com/game_machine/core/Hashring.java +66 -0
  82. data/java/{src → project/src}/main/java/com/game_machine/core/IActorFactory.java +0 -0
  83. data/java/project/src/main/java/com/game_machine/core/LocalLinkedBuffer.java +20 -0
  84. data/java/project/src/main/java/com/game_machine/core/MessageGateway.java +120 -0
  85. data/java/project/src/main/java/com/game_machine/core/MessagePersister.java +26 -0
  86. data/java/project/src/main/java/com/game_machine/core/MonoProxy.java +39 -0
  87. data/java/project/src/main/java/com/game_machine/core/MovementVerifier.java +7 -0
  88. data/java/{src → project/src}/main/java/com/game_machine/core/NetMessage.java +10 -6
  89. data/java/project/src/main/java/com/game_machine/core/PersistentMessage.java +9 -0
  90. data/java/project/src/main/java/com/game_machine/core/PlayerCommands.java +31 -0
  91. data/java/project/src/main/java/com/game_machine/core/TcpServer.java +100 -0
  92. data/java/project/src/main/java/com/game_machine/core/TcpServerHandler.java +54 -0
  93. data/java/project/src/main/java/com/game_machine/core/TcpServerInitializer.java +32 -0
  94. data/java/project/src/main/java/com/game_machine/core/UdpClient.java +86 -0
  95. data/java/{src → project/src}/main/java/com/game_machine/core/UdpServer.java +18 -27
  96. data/java/{src → project/src}/main/java/com/game_machine/core/UdpServerHandler.java +23 -26
  97. data/java/project/src/main/java/com/game_machine/core/Vector3.java +159 -0
  98. data/java/project/src/main/java/com/game_machine/orm/models/PlayerItem.java +118 -0
  99. data/java/project/src/main/java/com/game_machine/orm/models/TestObject.java +110 -0
  100. data/java/project/src/main/java/com/game_machine/tutorial/LootGenerator.java +26 -0
  101. data/java/{src → project/src}/main/resources/game_machine.java.stg +3 -1
  102. data/java/project/src/main/resources/logback.properties +13 -0
  103. data/java/project/src/main/resources/logback.xml +76 -0
  104. data/java/{src → project/src}/main/resources/protostuff.properties +0 -0
  105. data/java/src/main/java/game/MyGameActor.java +26 -0
  106. data/lib/game_machine.rb +17 -16
  107. data/lib/game_machine/actor.rb +1 -1
  108. data/lib/game_machine/actor/base.rb +8 -31
  109. data/lib/game_machine/actor/builder.rb +5 -6
  110. data/lib/game_machine/actor/game_actor.rb +55 -0
  111. data/lib/game_machine/actor/reloadable.rb +6 -1
  112. data/lib/game_machine/akka.rb +26 -32
  113. data/lib/game_machine/app_config.rb +39 -26
  114. data/lib/game_machine/application.rb +56 -62
  115. data/lib/game_machine/client_manager.rb +14 -8
  116. data/lib/game_machine/cloud_updater.rb +51 -0
  117. data/lib/game_machine/cluster_monitor.rb +3 -3
  118. data/lib/game_machine/commands.rb +1 -1
  119. data/lib/game_machine/commands/misc_commands.rb +4 -8
  120. data/lib/game_machine/commands/player_commands.rb +8 -0
  121. data/lib/game_machine/console.rb +1 -0
  122. data/lib/game_machine/console/build.rb +57 -24
  123. data/lib/game_machine/console/bundle.rb +95 -0
  124. data/lib/game_machine/console/deploy.rb +30 -0
  125. data/lib/game_machine/console/install.rb +70 -36
  126. data/lib/game_machine/console/server.rb +2 -69
  127. data/lib/game_machine/data_store.rb +111 -15
  128. data/lib/game_machine/data_stores/couchbase.rb +8 -3
  129. data/lib/game_machine/data_stores/gamecloud.rb +93 -0
  130. data/lib/game_machine/data_stores/jdbc.rb +98 -0
  131. data/lib/game_machine/default_handlers.rb +2 -0
  132. data/lib/game_machine/default_handlers/team_handler.rb +51 -0
  133. data/lib/game_machine/default_handlers/zone_manager.rb +30 -0
  134. data/lib/game_machine/endpoints.rb +0 -4
  135. data/lib/game_machine/endpoints/udp_incoming.rb +13 -5
  136. data/lib/game_machine/endpoints/udp_outgoing.rb +15 -9
  137. data/lib/game_machine/game_systems.rb +0 -2
  138. data/lib/game_machine/game_systems/agents/controller.rb +2 -2
  139. data/lib/game_machine/game_systems/entity_tracking.rb +0 -3
  140. data/lib/game_machine/game_systems/region_manager.rb +3 -2
  141. data/lib/game_machine/game_systems/region_service.rb +2 -2
  142. data/lib/game_machine/game_systems/remote_echo.rb +10 -0
  143. data/lib/game_machine/game_systems/team_manager.rb +2 -11
  144. data/lib/game_machine/grid.rb +5 -18
  145. data/lib/game_machine/handlers/authentication.rb +1 -9
  146. data/lib/game_machine/handlers/game.rb +27 -2
  147. data/lib/game_machine/handlers/player_authentication.rb +87 -0
  148. data/lib/game_machine/handlers/request.rb +9 -11
  149. data/lib/game_machine/hocon_config.rb +81 -0
  150. data/lib/game_machine/java_lib.rb +14 -1
  151. data/lib/game_machine/logger.rb +10 -23
  152. data/lib/game_machine/models.rb +1 -0
  153. data/lib/game_machine/mono_server.rb +6 -1
  154. data/lib/game_machine/object_db.rb +12 -6
  155. data/lib/game_machine/protobuf.rb +1 -1
  156. data/lib/game_machine/protobuf/game_messages.rb +13 -3
  157. data/lib/game_machine/protobuf/generate.rb +107 -5
  158. data/lib/game_machine/restart_watcher.rb +1 -1
  159. data/lib/game_machine/routes.rb +23 -0
  160. data/lib/game_machine/scheduler.rb +1 -1
  161. data/lib/game_machine/securerandom.rb +2 -0
  162. data/lib/game_machine/system_stats.rb +28 -7
  163. data/lib/game_machine/version.rb +1 -1
  164. data/lib/game_machine/wavefront_ext.rb +47 -0
  165. data/lib/game_machine/write_behind_cache.rb +24 -9
  166. data/mono/server/Makefile +1 -1
  167. data/mono/server/Newtonsoft.Json.dll +0 -0
  168. data/mono/server/build.bat +1 -1
  169. data/mono/server/callable.cs +9 -0
  170. data/mono/server/echo.cs +17 -0
  171. data/mono/server/message_router.cs +16 -23
  172. data/mono/server/messages.cs +1792 -417
  173. data/mono/server/protobuf-net.dll +0 -0
  174. data/mono/server/server.cs +120 -0
  175. data/mono/server/server.exe +0 -0
  176. data/pathfinding/astar.cpp +149 -0
  177. data/pathfinding/build.sh +6 -0
  178. data/pathfinding/build.txt +16 -0
  179. data/pathfinding/crowd.cpp +194 -0
  180. data/pathfinding/include/astar.h +49 -0
  181. data/pathfinding/include/common.h +5 -0
  182. data/pathfinding/include/crowd.h +43 -0
  183. data/pathfinding/include/micropather.h +511 -0
  184. data/pathfinding/include/navmesh.h +114 -0
  185. data/pathfinding/include/pathfinder.h +24 -0
  186. data/pathfinding/main.cpp +108 -17
  187. data/pathfinding/micropather.cpp +1062 -0
  188. data/pathfinding/navmesh.cpp +408 -0
  189. data/pathfinding/overrides/DetourCrowd.cpp +1446 -0
  190. data/pathfinding/overrides/DetourNavMeshQuery.cpp +3551 -0
  191. data/pathfinding/overrides/DetourNavMeshQuery.h +538 -0
  192. data/pathfinding/pathfinder.cpp +117 -0
  193. data/pathfinding/{bin → premake}/premake4 +0 -0
  194. data/pathfinding/premake/premake4.exe +0 -0
  195. data/pathfinding/premake4.lua +12 -3
  196. data/spec/actor/actor_spec.rb +0 -7
  197. data/spec/client_manager_spec.rb +1 -1
  198. data/spec/couchproxy_spec.rb +38 -0
  199. data/spec/entity_persistence_spec.rb +129 -0
  200. data/spec/game_systems/team_manager_spec.rb +2 -2
  201. data/spec/hashring_spec.rb +17 -39
  202. data/spec/java_grid_spec.rb +0 -2
  203. data/spec/misc_spec.rb +111 -0
  204. data/spec/mono_spec.rb +50 -3
  205. data/spec/reliable_message_spec.rb +38 -0
  206. data/spec/spec_helper.rb +4 -4
  207. data/spec/spec_helper_minimal.rb +10 -0
  208. data/web/app.rb +108 -86
  209. data/web/config/trinidad.yml +1 -0
  210. data/web/views/add_player.erb +25 -0
  211. data/web/views/index.erb +0 -0
  212. data/web/views/layout.erb +48 -0
  213. data/web/views/login.erb +25 -0
  214. data/web/views/players.erb +24 -0
  215. metadata +209 -94
  216. data/config/config.example.yml +0 -100
  217. data/config/regions.example.yml +0 -9
  218. data/games/example/lib/authentication_handler.rb +0 -69
  219. data/games/models.rb +0 -3
  220. data/games/models/clan_member.rb +0 -8
  221. data/games/models/clan_profile.rb +0 -9
  222. data/games/models/player.rb +0 -7
  223. data/games/plugins.rb +0 -1
  224. data/games/plugins/team_handler.rb +0 -49
  225. data/games/preload.rb +0 -13
  226. data/java/.gitignore +0 -1
  227. data/java/build.gradle +0 -95
  228. data/java/component.erb +0 -396
  229. data/java/gradle/wrapper/gradle-wrapper.jar +0 -0
  230. data/java/src/main/java/com/game_machine/core/GameMachineLoader.java +0 -25
  231. data/java/src/main/java/com/game_machine/core/Grid.java +0 -195
  232. data/java/src/main/resources/logback.xml +0 -14
  233. data/java/src/main/resources/logging.properties +0 -3
  234. data/lib/game_machine/actor/mono_actor.rb +0 -89
  235. data/lib/game_machine/auth_handlers/base.rb +0 -21
  236. data/lib/game_machine/auth_handlers/public.rb +0 -34
  237. data/lib/game_machine/endpoints/mono_gateway.rb +0 -87
  238. data/lib/game_machine/endpoints/tcp.rb +0 -51
  239. data/lib/game_machine/endpoints/tcp_handler.rb +0 -75
  240. data/lib/game_machine/endpoints/udp.rb +0 -88
  241. data/lib/game_machine/game_loader.rb +0 -46
  242. data/lib/game_machine/game_systems/region_settings.rb +0 -13
  243. data/lib/game_machine/hashring.rb +0 -48
  244. data/lib/game_machine/settings.rb +0 -11
  245. data/mono/server/actor.cs +0 -37
  246. data/mono/server/iactor.cs +0 -11
  247. data/mono/server/message_util.cs +0 -29
  248. data/mono/server/proxy_client.cs +0 -73
  249. data/mono/server/proxy_server.cs +0 -30
  250. data/mono/server/test_actor.cs +0 -33
  251. data/pathfinding/include/pathfind.h +0 -167
  252. data/pathfinding/pathfind.cpp +0 -174
  253. data/pathfinding/pathfinder.cs +0 -66
  254. data/script/server.sh +0 -109
  255. data/script/watch.sh +0 -11
  256. data/spec/commands/navigation_commands_spec.rb +0 -51
  257. data/spec/game_systems/entity_tracking_spec.rb +0 -64
  258. data/spec/navigation/detour_navmesh_spec.rb +0 -34
  259. data/spec/navigation/detour_path_spec.rb +0 -25
  260. data/spec/udp_server_spec.rb +0 -10
  261. data/web/controllers/auth_controller.rb +0 -19
  262. data/web/controllers/base_controller.rb +0 -16
  263. data/web/controllers/index_controller.rb +0 -7
  264. data/web/controllers/log_controller.rb +0 -47
  265. data/web/controllers/messages_controller.rb +0 -59
  266. data/web/controllers/player_register_controller.rb +0 -15
  267. data/web/views/game_messages.haml +0 -45
  268. data/web/views/index.haml +0 -6
  269. data/web/views/layout.haml +0 -41
  270. data/web/views/logs.haml +0 -32
  271. data/web/views/player_register.haml +0 -22
  272. data/web/views/player_registered.haml +0 -2
  273. data/web/views/register_layout.haml +0 -22
  274. data/web/views/restart.haml +0 -35
@@ -26,7 +26,6 @@ module GameMachine
26
26
  grid_value = subject.get('blah')
27
27
 
28
28
  expect(grid_value.id).to eq('blah')
29
- expect(grid_value.cell).to eq(0)
30
29
  expect(grid_value.x).to eq(0)
31
30
  expect(grid_value.y).to eq(0)
32
31
  expect(grid_value.z).to eq(3)
@@ -65,7 +64,6 @@ module GameMachine
65
64
  subject.set('blah',0,0,0,'player')
66
65
  points = subject.neighbors(0,0,25,'player')
67
66
  expect(points.first.cell).to eq(0)
68
-
69
67
  end
70
68
 
71
69
  it "does not return cells out of range" do
@@ -1,4 +1,7 @@
1
1
  require 'spec_helper'
2
+ require 'benchmark'
3
+ require "net/http"
4
+ require "uri"
2
5
  require 'jruby/core_ext'
3
6
  module GameMachine
4
7
 
@@ -13,6 +16,114 @@ module GameMachine
13
16
  entity
14
17
  end
15
18
 
19
+ it "ebean test" do
20
+ config = AppConfig.instance.config
21
+ pool = GameMachine::JavaLib::DbConnectionPool.getInstance
22
+ pool.connect(
23
+ 'test',
24
+ config.jdbc.hostname,
25
+ config.jdbc.port,
26
+ config.jdbc.database,
27
+ config.jdbc.ds,
28
+ config.jdbc.username,
29
+ config.jdbc.password || ''
30
+ )
31
+ BeanLib::TestModel.set_ds
32
+ BeanLib::TestModel.test
33
+ end
34
+
35
+ xit "authorizes with cloudclient" do
36
+ url = "http://localhost:9000/client/login/test"
37
+ uri = URI.parse(url)
38
+
39
+ response = Net::HTTP.post_form(uri, {'username' => 'chris', 'password' => 'pass'})
40
+ puts response.inspect
41
+ puts response.body
42
+
43
+ end
44
+
45
+ xit "serialized to json" do
46
+ entity = MessageLib::Entity.new.set_id('player')
47
+ puts entity.to_json
48
+ end
49
+
50
+ xit "couch http client" do
51
+ entity = MessageLib::Entity.new.set_id('3')
52
+ client = JavaLib::Couchclient.get_instance
53
+ 10.times do |i|
54
+ id = "TESTING#{i}"
55
+ response = client.put(id,entity.to_byte_array)
56
+ puts response.status
57
+ #puts response.body
58
+
59
+ response = client.get(id)
60
+ puts response.status
61
+ if response.status == 200
62
+ puts MessageLib::Entity.parse_from(response.body)
63
+ end
64
+
65
+
66
+ response = client.delete(id)
67
+ puts response.status
68
+ #puts response.body
69
+ end
70
+ end
71
+
72
+ xit "msyql ogbject store stress" do
73
+ GameMachine::Application.orm_connect
74
+ ds = Commands::DatastoreCommands.new
75
+ count = 0
76
+ puts Benchmark.realtime {
77
+ 10000.times do
78
+ entity.id = count.to_s
79
+ entity.db_put
80
+ count += 1
81
+ sleep 0.002
82
+ end
83
+ }
84
+ end
85
+
86
+ xit "finds model" do
87
+ GameMachine::Application.orm_connect
88
+ MessageLib::TestObject.delete_async('player1')
89
+ if message = MessageLib::TestObject.find_by_player_id("player1")
90
+ message.set_fvalue(1.9)
91
+ message.save_async('player1')
92
+ else
93
+ message = MessageLib::TestObject.new
94
+ message.set_required_string('testing')
95
+ message.set_fvalue(1.9)
96
+ message.set_bvalue(true)
97
+ message.set_dvalue(3.4)
98
+ message.set_numbers64(555)
99
+ message.save_async('player1')
100
+ end
101
+
102
+ sleep 2
103
+ end
104
+
105
+ xit "trackdata test" do
106
+ neighbors = MessageLib::Neighbors.new
107
+ trackdata = MessageLib::TrackData.new
108
+ trackdata.x = 100.0
109
+ trackdata.y = 100.0
110
+ trackdata.z = 100.0
111
+ 200.times do
112
+ neighbors.add_track_data(trackdata)
113
+ end
114
+
115
+ tracktest = MessageLib::TrackTest.new
116
+ 200.times do
117
+ tracktest.add_x(100.0)
118
+ tracktest.add_y(100.0)
119
+ tracktest.add_z(100.0)
120
+ end
121
+ 100000000.times do
122
+ tracktest.to_byte_array
123
+ #neighbors.to_byte_array
124
+ end
125
+ end
126
+
16
127
  xit "singleton manager" do
17
128
  ref = Akka.instance.actor_system.actor_selection('/user/region_manager_proxy')
18
129
  ref.tell('HELLO',nil)
@@ -4,6 +4,8 @@ require "base64"
4
4
  require 'socket'
5
5
  require "uri"
6
6
  require 'net/http'
7
+ require 'benchmark'
8
+ require 'descriptive_statistics'
7
9
  java_import 'java.util.concurrent.ThreadPoolExecutor'
8
10
  java_import 'java.util.concurrent.TimeUnit'
9
11
  java_import 'java.util.concurrent.LinkedBlockingQueue'
@@ -11,20 +13,65 @@ java_import 'java.util.concurrent.FutureTask'
11
13
  java_import 'java.util.concurrent.Callable'
12
14
 
13
15
  CHARS = [*('a'..'z'),*('0'..'9')].flatten
14
- STR = Array.new(100) {|i| CHARS.sample}.join
16
+ STR = Array.new(200) {|i| CHARS.sample}.join
15
17
  STR2 = Array.new(1000) {|i| CHARS.sample}.join
16
18
 
17
19
 
18
20
  module GameMachine
19
21
  describe 'mono' do
20
22
 
21
- it "mono gateway" do
23
+ xit "udp gateway" do
24
+ host = '127.0.0.1'
25
+ port = 4000
26
+ message = MessageLib::Entity.new.set_id(STR)
27
+
28
+ threads = []
29
+ proxy = JavaLib::MonoProxy.getInstance
30
+ 1.times do
31
+ threads << Thread.new do
32
+ results = []
33
+ errors = 0
34
+ 10000.times do
35
+ results << Benchmark.realtime {
36
+ response = proxy.call('MyGame.Echo',message)
37
+ if response.nil?
38
+ puts 'error'
39
+ errors += 1
40
+ end
41
+ }
42
+ end
43
+ puts "Number = #{results.number} Errors = #{errors} Average #{results.mean * 1000000} Standard deviation #{results.standard_deviation * 1000000}"
44
+ end
45
+ end
46
+ threads.map(&:join)
47
+ end
48
+
49
+ xit "calls mono method" do
50
+
51
+ Mono::Vm.instance.load
52
+
53
+ threads = []
54
+ 4.times do
55
+ threads << Thread.new do
56
+ str = Array.new(400) {|i| CHARS.sample}.join
57
+ message = MessageLib::Entity.new.set_id(str)
58
+ puts Benchmark.realtime {
59
+ 1000000.times do
60
+ Mono::Vm.instance.call_mono('GameMachine','TestActor',message)
61
+ end
62
+ }
63
+ end
64
+ end
65
+ threads.map(&:join)
66
+ end
67
+
68
+ xit "mono gateway" do
22
69
  Actor::Builder.new(Endpoints::MonoGateway).start
23
70
  sleep 1
24
71
  str = Array.new(1000) {|i| CHARS.sample}.join
25
72
  message = MessageLib::Entity.new.set_id(STR)
26
73
  message.set_destination('GameMachine.TestActor')
27
- puts timed = Benchmark.realtime {
74
+ puts Benchmark.realtime {
28
75
  10.times do
29
76
  Endpoints::MonoGateway.find.tell(message)
30
77
  end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+ module GameMachine
3
+
4
+ describe "Reliable Messages" do
5
+ let(:id) {'1'}
6
+ let(:game_message) do
7
+ MessageLib::GameMessage.new.set_message_id(id)
8
+ end
9
+
10
+ subject do
11
+ ref = Actor::Builder.new(GameSystems::Devnull).with_name('devnull').test_ref
12
+ ref.underlying_actor
13
+ end
14
+
15
+ before(:each) do
16
+ JavaLib::GameActor.remove_reliable_message(id)
17
+ subject.set_player_id('player')
18
+ end
19
+
20
+ describe "#exactly_once" do
21
+ it "should return true exactly once" do
22
+ expect(subject.exactly_once(game_message)).to be_truthy
23
+ expect(subject.exactly_once(game_message)).to be_falsy
24
+ end
25
+ end
26
+
27
+ describe "#set_reply" do
28
+ it "should return false if message not yet delivered" do
29
+ expect(subject.set_reply(game_message)).to be_falsy
30
+ end
31
+
32
+ it "should return true if message delivered" do
33
+ subject.exactly_once(game_message)
34
+ expect(subject.set_reply(game_message)).to be_truthy
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,6 +1,6 @@
1
1
 
2
2
  ENV['APP_ROOT'] ||= File.expand_path(Dir.pwd)
3
- ENV['JAVA_ROOT'] = File.join(ENV['APP_ROOT'],'java')
3
+ ENV['JAVA_ROOT'] = File.join(ENV['APP_ROOT'],'java','project')
4
4
  ENV['GAME_ENV'] = 'test'
5
5
  require 'rubygems'
6
6
 
@@ -12,17 +12,17 @@ end
12
12
 
13
13
  RSpec.configure do |config|
14
14
  config.before(:suite) do
15
- GameMachine::Application.initialize!('default',true)
15
+ GameMachine::Application.initialize!
16
16
  end
17
17
 
18
18
  config.before(:each) do
19
- GameMachine::AuthHandlers::Base.instance
19
+ GameMachine::AppConfig.instance.load_config
20
20
  GameMachine::Application.create_grids
21
21
  GameMachine::Application.start_actor_system
22
22
  GameMachine::Application.start_core_systems
23
23
  GameMachine::Application.start_handlers
24
24
  #GameMachine::Application.start_game_systems
25
- GameMachine::GameLoader.new.load_all
25
+
26
26
  end
27
27
 
28
28
  config.after(:each) do
@@ -0,0 +1,10 @@
1
+ ENV['APP_ROOT'] ||= File.expand_path(Dir.pwd)
2
+ ENV['JAVA_ROOT'] = File.join(ENV['APP_ROOT'],'java','project')
3
+ ENV['GAME_ENV'] = 'test'
4
+ require 'rubygems'
5
+
6
+ begin
7
+ require 'game_machine'
8
+ rescue LoadError
9
+ require_relative '../lib/game_machine'
10
+ end
data/web/app.rb CHANGED
@@ -1,131 +1,153 @@
1
1
  require 'json'
2
2
  require 'sinatra/base'
3
- require 'sinatra/multi_route'
4
-
5
- require_relative 'controllers/base_controller'
6
- require_relative 'controllers/index_controller'
7
- require_relative 'controllers/messages_controller'
8
- require_relative 'controllers/auth_controller'
9
- require_relative 'controllers/log_controller'
10
- require_relative 'controllers/player_register_controller'
3
+ require 'rack-flash'
11
4
 
12
5
 
13
6
  class WebApp < Sinatra::Base
14
- CONTROLLERS = {}
15
- set :bind, GameMachine::Application.config.http_host
16
- set :port, GameMachine::Application.config.http_port
7
+ set :bind, GameMachine::Application.config.http.host
8
+ set :port, GameMachine::Application.config.http.port
17
9
  set :root, File.expand_path(File.dirname(__FILE__))
18
10
  set :environment, :development
19
11
  mime_type :proto, 'application/octet-stream'
12
+ set :server, :puma
20
13
 
21
- register Sinatra::MultiRoute
14
+ enable :sessions
15
+ set :session_secret, 'dsf5785sadf86876asdf6'
16
+ use Rack::Flash
22
17
 
23
- def base_uri
24
- host = GameMachine::Application.config.http_host
25
- port = GameMachine::Application.config.http_port
26
- "http://#{host}:#{port}"
27
- end
18
+ helpers do
28
19
 
29
- def controller(name)
30
- case name
31
- when :index
32
- CONTROLLERS[name] ||= Web::Controllers::IndexController.new
33
- when :auth
34
- CONTROLLERS[name] ||= Web::Controllers::AuthController.new
35
- when :messages
36
- CONTROLLERS[name] ||= Web::Controllers::MessagesController.new
37
- when :log
38
- CONTROLLERS[name] ||= Web::Controllers::LogController.new
39
- when :player_register
40
- CONTROLLERS[name] ||= Web::Controllers::PlayerRegisterController.new
20
+ def config
21
+ GameMachine::Application.config
41
22
  end
42
- end
43
23
 
24
+ def logged_in?
25
+ session['user']
26
+ end
44
27
 
45
- get '/player_register' do
46
- @content = {}
47
- haml :player_register, :layout => :register_layout
48
- end
28
+ def admin_user
29
+ config.admin.user
30
+ end
49
31
 
50
- post '/player_register.html' do
51
- @content = controller(:player_register).set_request(request,params).create
52
- if @content['error']
53
- haml :player_register, :layout => :register_layout
54
- else
55
- haml :player_registered, :layout => :register_layout
32
+ def admin_pass
33
+ config.admin.pass
56
34
  end
35
+
36
+ def auth_response(token)
37
+ response = {
38
+ :authtoken => token,
39
+ :protocol => config.client.protocol
40
+ }
41
+
42
+ if config.client.protocol == 'TCP'
43
+ response['tcp_host'] = config.tcp.host
44
+ response['tcp_port'] = config.tcp.port
45
+ elsif config.client.protocol == 'UDP'
46
+ response['udp_host'] = config.udp.host
47
+ response['udp_port'] = config.udp.port
48
+ end
49
+ response
50
+ end
51
+
57
52
  end
58
53
 
59
- post '/player_register.json' do
60
- content = controller(:player_register).set_request(request,params).create
61
- JSON.generate(content)
54
+ before do
55
+ allow = false
56
+ public = ['/client','/login','/clusterinfo']
57
+ public.each do |path|
58
+ if request.path_info.match(path)
59
+ allow = true
60
+ end
61
+ end
62
+
63
+ if !allow && !logged_in?
64
+ redirect to('/login')
65
+ end
62
66
  end
63
67
 
64
68
  get '/' do
65
- if request.params['restarted']
66
- @restarted = true
69
+ erb :index
70
+ end
71
+
72
+ get '/login' do
73
+ erb :login
74
+ end
75
+
76
+ post '/login' do
77
+ if params['username'] == admin_user && params['password'] == admin_pass
78
+ flash[:notice] = "Logged in"
79
+ session['user'] = true
80
+ redirect to('/')
81
+ else
82
+ flash[:error] = "Invalid username or password"
83
+ redirect to("/login")
67
84
  end
68
- haml :index
69
85
  end
70
86
 
71
- get '/alive' do
72
- JSON.generate({})
87
+ get '/players/:id/delete' do
88
+ GameMachine::MessageLib::Player.store_delete('players',params['id'])
89
+ redirect to('/players')
73
90
  end
74
91
 
75
- get '/restart' do
76
- haml :restart
92
+ post '/players' do
93
+ scope,query_string = params['query_string'].split('##')
94
+ if query_string.nil?
95
+ query_string = ''
96
+ end
97
+ @players = GameMachine::DataStore.instance.query(scope,query_string,200,'Player')
98
+ @form_query = scope + '##' + query_string
99
+ erb :players
77
100
  end
78
101
 
79
- get '/logs' do
80
- @logtypes = {
81
- :app => 'Application',
82
- :stdout => 'Standard out',
83
- :stderr => 'Standard error'
84
- }
85
- @logtype = (params['logtype'] || 'app').to_sym
86
- @content = controller(:log).set_request(request,params).logs(@logtype)
87
- haml :logs
102
+ get '/players' do
103
+ @players = GameMachine::DataStore.instance.query("players",'',200,'Player')
104
+ erb :players
88
105
  end
89
106
 
90
- get '/messages/game' do
91
- @content = controller(:messages).set_request(request,params).game
92
- @messages = :game
93
- haml :game_messages
107
+ get '/add_player' do
108
+ erb :add_player
94
109
  end
95
110
 
96
- post '/messages/game' do
97
- @content = controller(:messages).set_request(request,params).update
98
- if @content == 'restart'
99
- haml :restart
111
+ post '/add_player' do
112
+ if player = GameMachine::MessageLib::Player.store_get('players',params['username'],500)
113
+ flash[:error] = "Error creating player (already exists?)"
100
114
  else
101
- @messages = :game
102
- haml :game_messages
115
+ player = GameMachine::MessageLib::Player.new.set_id(params['username'])
116
+ authenticator = GameMachine::JavaLib::DefaultAuthenticator.new(player)
117
+ authenticator.set_password(params['password'])
118
+ flash[:notice] = "Player created"
103
119
  end
120
+ redirect to('/')
104
121
  end
105
122
 
106
- get '/messages/all' do
107
- @content = controller(:messages).set_request(request,params).all
108
- @messages = :all
109
- @format = params['format']
110
- if @format == 'proto'
111
- content_type :proto
112
- attachment 'messages.proto'
113
- @content
114
- else
115
- haml :game_messages
123
+ get '/clusterinfo' do
124
+ info = {}
125
+ info[:members] = {}
126
+ GameMachine::ClusterMonitor.cluster_members.keys.each do |key|
127
+ member = GameMachine::ClusterMonitor.cluster_members[key]
128
+ info[:members][key] = {:address => member.address, :status => member.status}
116
129
  end
130
+ info[:self_address] = GameMachine::Akka.instance.address
131
+
132
+ JSON.generate(info)
117
133
  end
118
134
 
119
- route :get, :post, '/auth' do
120
- res = controller(:auth).set_request(request,params).get
121
- if res == 'error'
122
- status 403
123
- body res
135
+ post '/api/client/login/:game_id' do
136
+ if authtoken = GameMachine::Handlers::PlayerAuthentication.instance.authorize(params['username'],params['password'])
137
+ content_type 'text/plain'
138
+ JSON.generate(auth_response(authtoken))
124
139
  else
125
- res
140
+ status 403
141
+ 'error'
126
142
  end
127
143
  end
144
+
145
+ get '/stats' do
146
+ @stats = {}
147
+ @stats[:local_player_count] = GameMachine::ClientManager.local_players.size
148
+ @stats[:local_players] = GameMachine::ClientManager.local_players
149
+ end
150
+
128
151
  end
129
152
 
130
153
  WebApp.run!
131
-