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
@@ -1,51 +0,0 @@
1
- module GameMachine
2
- module Endpoints
3
- class Tcp < Actor::Base
4
-
5
- def post_init(*args)
6
- @clients = {}
7
- @mgr = nil
8
- end
9
-
10
- def preStart
11
- @mgr = JavaLib::Tcp.get(getContext.system).getManager
12
- inet = JavaLib::InetSocketAddress.new(
13
- Application.config.tcp_host,
14
- Application.config.tcp_port
15
- )
16
- @mgr.tell( JavaLib::TcpMessage.bind(getSelf,inet,100), getSelf)
17
- end
18
-
19
- def sanitize_address(name)
20
- name.gsub!('/','')
21
- name.gsub!('.','')
22
- name.gsub!(':','_')
23
- name
24
- end
25
-
26
- def on_receive(message)
27
- if message.is_a?(MessageLib::ClientMessage)
28
- if handler_ref = @clients.fetch(message.client_connection.id,nil)
29
- handler_ref.tell(message)
30
- else
31
- GameMachine.logger.warn("No handler found for #{message.client_connection}")
32
- end
33
- elsif message.kind_of?(JavaLib::Tcp::Bound)
34
- @mgr.tell(message,get_self)
35
- elsif message.kind_of?(JavaLib::Tcp::CommandFailed)
36
- getContext.stop(get_self)
37
- elsif message.kind_of?(JavaLib::Tcp::Connected)
38
- @mgr.tell(message,get_self)
39
- handler_name = sanitize_address(message.remote_address.to_s)
40
- handler_ref = Actor::Builder.new(TcpHandler,handler_name).with_name(handler_name).start
41
- @clients[message.remote_address.to_s] = handler_ref
42
- handler_ref.tell(message,get_sender)
43
- get_sender.tell(JavaLib::TcpMessage.register(handler_ref), get_self)
44
- else
45
- unhandled(message)
46
- end
47
- end
48
-
49
- end
50
- end
51
- end
@@ -1,75 +0,0 @@
1
- module GameMachine
2
- module Endpoints
3
- class TcpHandler < Actor::Base
4
-
5
- attr_reader :game_handler
6
- def post_init(*args)
7
- @game_handler = Application.config.game_handler
8
- @name = args.first
9
- @con_ref = nil
10
- @client_id = nil
11
- @message_buffer = MessageBuffer.new
12
- end
13
-
14
- def on_receive(message)
15
- if message.kind_of?(JavaLib::Tcp::ConnectionClosed)
16
- client_message = client_disconnect_message(@client_id)
17
- Actor::Base.find(game_handler).tell(client_message,get_self)
18
- get_context.stop(get_self)
19
- elsif message.kind_of?(JavaLib::Tcp::Received)
20
- handle_incoming(message)
21
- elsif message.is_a?(MessageLib::ClientMessage)
22
- handle_outgoing(message)
23
- elsif message.kind_of?(JavaLib::Tcp::Connected)
24
- @con_ref = get_sender
25
- @client_id = message.remote_address.to_s
26
- else
27
- unhandled(message)
28
- end
29
- end
30
-
31
- private
32
-
33
- def client_connection(client_id)
34
- MessageLib::ClientConnection.new.set_id(client_id).
35
- set_gateway(@name).set_server(Application.config.name)
36
- end
37
-
38
- def client_disconnect_message(client_id)
39
- MessageLib::ClientMessage.new.set_client_disconnect(
40
- MessageLib::ClientDisconnect.new.set_client_connection(
41
- MessageLib::ClientConnection.new.set_id(client_id).set_gateway(@name)
42
- )
43
- )
44
- end
45
-
46
- def handle_outgoing(message)
47
- byte_string = JavaLib::ByteString.from_array(message.to_byte_array)
48
- tcp_message = JavaLib::TcpMessage.write(byte_string)
49
- @con_ref.tell(tcp_message, get_self)
50
- rescue Exception => e
51
- GameMachine.logger.error "#{self.class.name} #{e.to_s}"
52
- end
53
-
54
- def handle_incoming(message)
55
- @message_buffer.add_bytes(message.data.to_array)
56
- @message_buffer.messages.each do |message_bytes|
57
- client_message = create_client_message(
58
- message_bytes,@client_id
59
- )
60
- Actor::Base.find(game_handler).tell(client_message,get_self)
61
- end
62
- rescue Exception => e
63
- GameMachine.logger.error "TcpHandler.handle_incoming: #{@name} #{e.to_s}"
64
- end
65
-
66
- def create_client_message(data,client_id)
67
- MessageLib::ClientMessage.parse_from(data).set_client_connection(
68
- MessageLib::ClientConnection.new.set_id(client_id).set_gateway(@name).
69
- set_server(Application.config.name)
70
- )
71
- end
72
-
73
- end
74
- end
75
- end
@@ -1,88 +0,0 @@
1
- module GameMachine
2
- module Endpoints
3
- class Udp < Actor::Base
4
-
5
- # TODO lookup inactive clients, and send a client_disconnected
6
- # message to the request handler. Currently clients that do not
7
- # send a logout get left in the world
8
- attr_reader :game_handler
9
- def post_init(*args)
10
- @game_handler = Application.config.game_handler
11
- @clients = {}
12
- @socket = nil
13
- end
14
-
15
- def preStart
16
- mgr = JavaLib::Udp.get(getContext.system).getManager
17
- inet = JavaLib::InetSocketAddress.new(
18
- Application.config.udp_host,
19
- Application.config.udp_port
20
- )
21
- mgr.tell( JavaLib::UdpMessage.bind(getSelf,inet), getSelf)
22
- end
23
-
24
- def on_receive(message)
25
- if message.kind_of?(JavaLib::Udp::Bound)
26
- @socket = getSender
27
- elsif message.is_a?(MessageLib::ClientMessage)
28
- handle_outgoing(message)
29
- elsif message.kind_of?(JavaLib::Udp::Received)
30
- echo(message)
31
- return
32
- handle_incoming(message)
33
- elsif message == JavaLib::UdpMessage::unbind
34
- @socket.tell(message, get_self)
35
- elsif message.kind_of?(JavaLib::Udp::Unbound)
36
- get_context.stop(get_self)
37
- else
38
- unhandled(message)
39
- end
40
- end
41
-
42
- private
43
-
44
- def handle_outgoing(message)
45
- sender = @clients.fetch(message.client_connection.id)
46
- byte_string = JavaLib::ByteString.from_array(message.to_byte_array)
47
- udp_message = JavaLib::UdpMessage.send(byte_string, sender)
48
- @socket.tell(udp_message, get_self)
49
- rescue Exception => e
50
- GameMachine.logger.error "#{self.class.name} #{e.to_s}"
51
- end
52
-
53
- def handle_incoming(message)
54
- client_id = message.sender.to_s
55
- unless @clients.has_key?(client_id)
56
- @clients[client_id] = message.sender
57
- end
58
-
59
- client_message = create_client_message(
60
- message.data.to_array,client_id
61
- )
62
- Actor::Base.find(game_handler).send_message(
63
- client_message, :sender => get_self
64
- )
65
- rescue Exception => e
66
- GameMachine.logger.error "#{self.class.name} #{e.to_s}"
67
- end
68
-
69
- def client_connection(client_id)
70
- MessageLib::ClientConnection.new.set_id(client_id).
71
- set_gateway(self.class.name).set_server(Application.config.name)
72
- end
73
-
74
- def create_client_message(data,client_id)
75
- MessageLib::ClientMessage.parse_from(data).set_client_connection(
76
- client_connection(client_id)
77
- )
78
- end
79
-
80
- def echo(message)
81
- byte_string = JavaLib::ByteString.from_array(message.data.to_array)
82
- udp_message = JavaLib::UdpMessage.send(byte_string, message.sender)
83
- @socket.tell(udp_message,get_self)
84
- end
85
-
86
- end
87
- end
88
- end
@@ -1,46 +0,0 @@
1
- require 'pathname'
2
- module GameMachine
3
- class GameLoader
4
-
5
- class << self
6
-
7
- def games_root
8
- File.join(GameMachine.app_root,'/games')
9
- end
10
- end
11
-
12
-
13
- def game_dirs
14
- Pathname.glob("#{self.class.games_root}/*/")
15
- end
16
-
17
- def load_from_dir(dir)
18
- bootfile = File.join(dir,'boot.rb')
19
- if File.exists?(bootfile)
20
- load_game(bootfile)
21
- GameMachine.logger.info "#{bootfile} loaded"
22
- GameMachine.stdout "#{bootfile} loaded"
23
- else
24
- GameMachine.logger.info "#{bootfile} not found"
25
- GameMachine.stdout "#{bootfile} not found"
26
- end
27
- end
28
-
29
- def load_all
30
- return if GameMachine.env == 'test'
31
- game_dirs.each do |game_dir|
32
- load_from_dir(game_dir)
33
- end
34
- end
35
-
36
- def start_player_manager
37
- if klass = Application.config.player_manager
38
- Actor::Builder.new(klass.constantize).start
39
- end
40
- end
41
-
42
- def load_game(bootfile)
43
- require bootfile
44
- end
45
- end
46
- end
@@ -1,13 +0,0 @@
1
- require 'settingslogic'
2
-
3
- module GameMachine
4
- module GameSystems
5
- class RegionSettings < Settingslogic
6
- source File.expand_path(
7
- ENV['CONFIG_FILE'] || File.join(ENV['APP_ROOT'], "config/regions.yml")
8
- )
9
- namespace ENV['GAME_ENV']
10
-
11
- end
12
- end
13
- end
@@ -1,48 +0,0 @@
1
- require 'consistent_hashing'
2
-
3
- module GameMachine
4
- class Hashring
5
-
6
- RING_SIZE = 24
7
- REPLICAS = 3
8
-
9
- attr_reader :buckets
10
-
11
- def self.create_actor_ring(name,ring_size=RING_SIZE)
12
- buckets = (0..ring_size).map {|r| "#{name}#{r}"}
13
- new(buckets)
14
- end
15
-
16
- def initialize(buckets)
17
- @buckets = buckets
18
- @ring = ConsistentHashing::Ring.new(@buckets,REPLICAS)
19
- end
20
-
21
- def points
22
- @ring.points
23
- end
24
-
25
- def nodes
26
- @ring.nodes
27
- end
28
-
29
- def remove_bucket(bucket)
30
- if @buckets.include?(bucket)
31
- @buckets.delete_if {|b| b == bucket}
32
- @ring.delete(bucket)
33
- end
34
- end
35
-
36
- def add_bucket(bucket)
37
- unless @buckets.include?(bucket)
38
- @ring << bucket
39
- @buckets << bucket
40
- end
41
- end
42
-
43
- def bucket_for(value)
44
- @ring.node_for(value)
45
- end
46
-
47
- end
48
- end
@@ -1,11 +0,0 @@
1
- require 'settingslogic'
2
-
3
- module GameMachine
4
- class Settings < Settingslogic
5
- source File.expand_path(
6
- ENV['CONFIG_FILE'] || File.join(ENV['APP_ROOT'], "config/config.yml")
7
- )
8
- namespace ENV['GAME_ENV']
9
-
10
- end
11
- end
@@ -1,37 +0,0 @@
1
- using System.Net;
2
- using System.Net.Sockets;
3
- using System;
4
- using ProtoBuf;
5
- using System.Text;
6
- using System.Collections.Generic;
7
- using System.IO;
8
- using System.Threading;
9
- using Entity = GameMachine.Messages.Entity;
10
- using GameMachine;
11
- using System.Collections.Concurrent;
12
-
13
- namespace GameMachine
14
- {
15
- public abstract class Actor : IActor
16
- {
17
- private ProxyClient proxyClient;
18
-
19
- public Actor()
20
- {
21
- }
22
-
23
- public void PostInit(ProxyClient pc)
24
- {
25
- proxyClient = pc;
26
- }
27
-
28
- public abstract void OnReceive(object message);
29
-
30
- public void Tell(string destination, Entity entity)
31
- {
32
- entity.destination = destination;
33
- byte[] bytes = MessageUtil.EntityToByteArray(entity);
34
- proxyClient.Send(bytes);
35
- }
36
- }
37
- }
@@ -1,11 +0,0 @@
1
- using GameMachine;
2
- using Entity = GameMachine.Messages.Entity;
3
- namespace GameMachine
4
- {
5
- public interface IActor
6
- {
7
- void OnReceive(object message);
8
- void PostInit(ProxyClient proxyClient);
9
- void Tell(string destination, Entity entity);
10
- }
11
- }
@@ -1,29 +0,0 @@
1
- using System;
2
- using System.Text;
3
- using System.IO;
4
- using ProtoBuf;
5
- using Entity = GameMachine.Messages.Entity;
6
-
7
- namespace GameMachine
8
- {
9
- public class MessageUtil
10
- {
11
- public static Entity ByteArrayToEntity(byte[] bytes)
12
- {
13
- Entity entity;
14
- MemoryStream stream = new MemoryStream(bytes);
15
- entity = Serializer.Deserialize<Entity>(stream);
16
- return entity;
17
- }
18
-
19
- public static byte[] EntityToByteArray(Entity entity)
20
- {
21
- byte[] data;
22
- MemoryStream stream = new MemoryStream();
23
- Serializer.Serialize(stream, entity);
24
- data = stream.ToArray();
25
- return data;
26
- }
27
-
28
- }
29
- }
@@ -1,73 +0,0 @@
1
- using System;
2
- using System.Diagnostics;
3
- using System.Net;
4
- using System.Net.Sockets;
5
- using System.Text;
6
- using System.Threading;
7
- using System.Threading.Tasks;
8
- using System.IO;
9
- using ProtoBuf;
10
- using GameMachine;
11
- using Entity = GameMachine.Messages.Entity;
12
-
13
- namespace GameMachine
14
- {
15
- public class ProxyClient
16
- {
17
- private IPEndPoint udp_ep;
18
- private UdpClient udpClient;
19
- private int port = 8800;
20
- private string host = "127.0.0.1";
21
-
22
- public ProxyClient(int _port)
23
- {
24
- port = _port;
25
- }
26
-
27
- public void Start()
28
- {
29
- udp_ep = new IPEndPoint(IPAddress.Any, 11000);
30
- udpClient = new UdpClient(udp_ep);
31
- receiveData();
32
-
33
- Task.Factory.StartNew(() => {
34
- Ping(); });
35
- }
36
-
37
- private void Ping()
38
- {
39
- Entity entity = new Entity();
40
- entity.id = "ping";
41
- byte[] bytes = MessageUtil.EntityToByteArray(entity);
42
- while (true)
43
- {
44
- Thread.Sleep(1000);
45
- Send(bytes);
46
- }
47
- }
48
-
49
- private void SendCallback(IAsyncResult ar)
50
- {
51
- UdpClient u = (UdpClient)ar.AsyncState;
52
- u.EndSend(ar);
53
- }
54
-
55
- public void Send(byte[] bytes)
56
- {
57
- udpClient.BeginSend(bytes, bytes.Length, host, port, new AsyncCallback(SendCallback), udpClient);
58
- }
59
-
60
- private void dataReady(IAsyncResult ar)
61
- {
62
- byte[] bytes = udpClient.EndReceive(ar, ref udp_ep);
63
- receiveData();
64
- MessageRouter.Route(bytes, this);
65
- }
66
-
67
- private void receiveData()
68
- {
69
- udpClient.BeginReceive(new AsyncCallback(dataReady), udp_ep);
70
- }
71
-
72
- }
73
- }