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.
- checksums.yaml +4 -4
- data/Gemfile +12 -1
- data/Gemfile.lock +32 -47
- data/Rakefile +0 -27
- data/bin/bundle_run.sh +1 -0
- data/bin/game_machine +29 -27
- data/config/cluster.conf +6 -5
- data/config/default.conf +164 -0
- data/config/game_machine.sql +33 -0
- data/config/game_messages.proto +87 -25
- data/config/gamecloud.conf +140 -0
- data/config/messages.proto +46 -53
- data/config/test.conf +149 -0
- data/game_machine.gemspec +10 -5
- data/games/boot.rb +3 -0
- data/games/example/data/game_data.yml +4 -4
- data/games/example/lib/aggressive_npc.rb +1 -1
- data/games/example/lib/game.rb +1 -2
- data/games/example/lib/player_register.rb +1 -1
- data/games/routes.rb +9 -0
- data/games/tutorial/boot.rb +12 -0
- data/games/tutorial/item_manager.rb +256 -0
- data/games/tutorial/object_store.rb +55 -0
- data/games/tutorial/seed.rb +52 -0
- data/games/tutorial/sql_store.rb +30 -0
- data/java/project/build.gradle +134 -0
- data/java/project/component.erb +719 -0
- data/java/{gradle.properties → project/gradle.properties} +1 -1
- data/java/project/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/java/{gradle → project/gradle}/wrapper/gradle-wrapper.properties +2 -2
- data/java/{gradlew → project/gradlew} +0 -0
- data/java/{gradlew.bat → project/gradlew.bat} +0 -0
- data/java/project/local_lib/AdminUi.jar +0 -0
- data/java/{local_lib/protostuff-compiler-1.0.7-jarjar.jar → project/local_lib/protostuff-compiler-1.0.8-jarjar.jar} +0 -0
- data/java/project/local_lib/sigar/libsigar-amd64-freebsd-6.so +0 -0
- data/java/project/local_lib/sigar/libsigar-amd64-linux.so +0 -0
- data/java/project/local_lib/sigar/libsigar-amd64-solaris.so +0 -0
- data/java/project/local_lib/sigar/libsigar-ia64-hpux-11.sl +0 -0
- data/java/project/local_lib/sigar/libsigar-ia64-linux.so +0 -0
- data/java/project/local_lib/sigar/libsigar-pa-hpux-11.sl +0 -0
- data/java/project/local_lib/sigar/libsigar-ppc-aix-5.so +0 -0
- data/java/project/local_lib/sigar/libsigar-ppc-linux.so +0 -0
- data/java/project/local_lib/sigar/libsigar-ppc64-aix-5.so +0 -0
- data/java/project/local_lib/sigar/libsigar-ppc64-linux.so +0 -0
- data/java/project/local_lib/sigar/libsigar-s390x-linux.so +0 -0
- data/java/project/local_lib/sigar/libsigar-sparc-solaris.so +0 -0
- data/java/project/local_lib/sigar/libsigar-sparc64-solaris.so +0 -0
- data/java/project/local_lib/sigar/libsigar-universal-macosx.dylib +0 -0
- data/java/project/local_lib/sigar/libsigar-universal64-macosx.dylib +0 -0
- data/java/project/local_lib/sigar/libsigar-x86-freebsd-5.so +0 -0
- data/java/project/local_lib/sigar/libsigar-x86-freebsd-6.so +0 -0
- data/java/project/local_lib/sigar/libsigar-x86-linux.so +0 -0
- data/java/project/local_lib/sigar/libsigar-x86-solaris.so +0 -0
- data/java/project/local_lib/sigar/sigar-amd64-winnt.dll +0 -0
- data/java/project/local_lib/sigar/sigar-x86-winnt.dll +0 -0
- data/java/project/local_lib/sigar/sigar-x86-winnt.lib +0 -0
- data/java/project/model.erb +99 -0
- data/java/{settings.gradle → project/settings.gradle} +0 -0
- data/java/project/src/main/java/com/game_machine/authentication/DefaultAuthenticator.java +28 -0
- data/java/project/src/main/java/com/game_machine/authentication/PlayerAuthenticator.java +6 -0
- data/java/project/src/main/java/com/game_machine/authentication/PublicAuthenticator.java +20 -0
- data/java/{src → project/src}/main/java/com/game_machine/core/ActorFactory.java +0 -0
- data/java/{src → project/src}/main/java/com/game_machine/core/ActorUtil.java +13 -0
- data/java/project/src/main/java/com/game_machine/core/AuthorizedPlayers.java +23 -0
- data/java/project/src/main/java/com/game_machine/core/ClientMessageDecoder.java +36 -0
- data/java/project/src/main/java/com/game_machine/core/ClientMessageEncoder.java +19 -0
- data/java/project/src/main/java/com/game_machine/core/CloudClient.java +298 -0
- data/java/{src → project/src}/main/java/com/game_machine/core/CommandProxy.java +0 -0
- data/java/project/src/main/java/com/game_machine/core/Commands.java +20 -0
- data/java/project/src/main/java/com/game_machine/core/DatastoreCommands.java +43 -0
- data/java/project/src/main/java/com/game_machine/core/DbConnectionPool.java +72 -0
- data/java/project/src/main/java/com/game_machine/core/DefaultMovementVerifier.java +56 -0
- data/java/{src → project/src}/main/java/com/game_machine/core/EntitySerializer.java +0 -0
- data/java/project/src/main/java/com/game_machine/core/EntityTracking.java +119 -0
- data/java/{src → project/src}/main/java/com/game_machine/core/EventStreamHandler.java +1 -1
- data/java/project/src/main/java/com/game_machine/core/GameActor.java +73 -0
- data/java/project/src/main/java/com/game_machine/core/GameMachineLoader.java +43 -0
- data/java/project/src/main/java/com/game_machine/core/GameMessageActor.java +44 -0
- data/java/project/src/main/java/com/game_machine/core/Grid.java +255 -0
- data/java/{src → project/src}/main/java/com/game_machine/core/GridValue.java +0 -0
- data/java/project/src/main/java/com/game_machine/core/Hashring.java +66 -0
- data/java/{src → project/src}/main/java/com/game_machine/core/IActorFactory.java +0 -0
- data/java/project/src/main/java/com/game_machine/core/LocalLinkedBuffer.java +20 -0
- data/java/project/src/main/java/com/game_machine/core/MessageGateway.java +120 -0
- data/java/project/src/main/java/com/game_machine/core/MessagePersister.java +26 -0
- data/java/project/src/main/java/com/game_machine/core/MonoProxy.java +39 -0
- data/java/project/src/main/java/com/game_machine/core/MovementVerifier.java +7 -0
- data/java/{src → project/src}/main/java/com/game_machine/core/NetMessage.java +10 -6
- data/java/project/src/main/java/com/game_machine/core/PersistentMessage.java +9 -0
- data/java/project/src/main/java/com/game_machine/core/PlayerCommands.java +31 -0
- data/java/project/src/main/java/com/game_machine/core/TcpServer.java +100 -0
- data/java/project/src/main/java/com/game_machine/core/TcpServerHandler.java +54 -0
- data/java/project/src/main/java/com/game_machine/core/TcpServerInitializer.java +32 -0
- data/java/project/src/main/java/com/game_machine/core/UdpClient.java +86 -0
- data/java/{src → project/src}/main/java/com/game_machine/core/UdpServer.java +18 -27
- data/java/{src → project/src}/main/java/com/game_machine/core/UdpServerHandler.java +23 -26
- data/java/project/src/main/java/com/game_machine/core/Vector3.java +159 -0
- data/java/project/src/main/java/com/game_machine/orm/models/PlayerItem.java +118 -0
- data/java/project/src/main/java/com/game_machine/orm/models/TestObject.java +110 -0
- data/java/project/src/main/java/com/game_machine/tutorial/LootGenerator.java +26 -0
- data/java/{src → project/src}/main/resources/game_machine.java.stg +3 -1
- data/java/project/src/main/resources/logback.properties +13 -0
- data/java/project/src/main/resources/logback.xml +76 -0
- data/java/{src → project/src}/main/resources/protostuff.properties +0 -0
- data/java/src/main/java/game/MyGameActor.java +26 -0
- data/lib/game_machine.rb +17 -16
- data/lib/game_machine/actor.rb +1 -1
- data/lib/game_machine/actor/base.rb +8 -31
- data/lib/game_machine/actor/builder.rb +5 -6
- data/lib/game_machine/actor/game_actor.rb +55 -0
- data/lib/game_machine/actor/reloadable.rb +6 -1
- data/lib/game_machine/akka.rb +26 -32
- data/lib/game_machine/app_config.rb +39 -26
- data/lib/game_machine/application.rb +56 -62
- data/lib/game_machine/client_manager.rb +14 -8
- data/lib/game_machine/cloud_updater.rb +51 -0
- data/lib/game_machine/cluster_monitor.rb +3 -3
- data/lib/game_machine/commands.rb +1 -1
- data/lib/game_machine/commands/misc_commands.rb +4 -8
- data/lib/game_machine/commands/player_commands.rb +8 -0
- data/lib/game_machine/console.rb +1 -0
- data/lib/game_machine/console/build.rb +57 -24
- data/lib/game_machine/console/bundle.rb +95 -0
- data/lib/game_machine/console/deploy.rb +30 -0
- data/lib/game_machine/console/install.rb +70 -36
- data/lib/game_machine/console/server.rb +2 -69
- data/lib/game_machine/data_store.rb +111 -15
- data/lib/game_machine/data_stores/couchbase.rb +8 -3
- data/lib/game_machine/data_stores/gamecloud.rb +93 -0
- data/lib/game_machine/data_stores/jdbc.rb +98 -0
- data/lib/game_machine/default_handlers.rb +2 -0
- data/lib/game_machine/default_handlers/team_handler.rb +51 -0
- data/lib/game_machine/default_handlers/zone_manager.rb +30 -0
- data/lib/game_machine/endpoints.rb +0 -4
- data/lib/game_machine/endpoints/udp_incoming.rb +13 -5
- data/lib/game_machine/endpoints/udp_outgoing.rb +15 -9
- data/lib/game_machine/game_systems.rb +0 -2
- data/lib/game_machine/game_systems/agents/controller.rb +2 -2
- data/lib/game_machine/game_systems/entity_tracking.rb +0 -3
- data/lib/game_machine/game_systems/region_manager.rb +3 -2
- data/lib/game_machine/game_systems/region_service.rb +2 -2
- data/lib/game_machine/game_systems/remote_echo.rb +10 -0
- data/lib/game_machine/game_systems/team_manager.rb +2 -11
- data/lib/game_machine/grid.rb +5 -18
- data/lib/game_machine/handlers/authentication.rb +1 -9
- data/lib/game_machine/handlers/game.rb +27 -2
- data/lib/game_machine/handlers/player_authentication.rb +87 -0
- data/lib/game_machine/handlers/request.rb +9 -11
- data/lib/game_machine/hocon_config.rb +81 -0
- data/lib/game_machine/java_lib.rb +14 -1
- data/lib/game_machine/logger.rb +10 -23
- data/lib/game_machine/models.rb +1 -0
- data/lib/game_machine/mono_server.rb +6 -1
- data/lib/game_machine/object_db.rb +12 -6
- data/lib/game_machine/protobuf.rb +1 -1
- data/lib/game_machine/protobuf/game_messages.rb +13 -3
- data/lib/game_machine/protobuf/generate.rb +107 -5
- data/lib/game_machine/restart_watcher.rb +1 -1
- data/lib/game_machine/routes.rb +23 -0
- data/lib/game_machine/scheduler.rb +1 -1
- data/lib/game_machine/securerandom.rb +2 -0
- data/lib/game_machine/system_stats.rb +28 -7
- data/lib/game_machine/version.rb +1 -1
- data/lib/game_machine/wavefront_ext.rb +47 -0
- data/lib/game_machine/write_behind_cache.rb +24 -9
- data/mono/server/Makefile +1 -1
- data/mono/server/Newtonsoft.Json.dll +0 -0
- data/mono/server/build.bat +1 -1
- data/mono/server/callable.cs +9 -0
- data/mono/server/echo.cs +17 -0
- data/mono/server/message_router.cs +16 -23
- data/mono/server/messages.cs +1792 -417
- data/mono/server/protobuf-net.dll +0 -0
- data/mono/server/server.cs +120 -0
- data/mono/server/server.exe +0 -0
- data/pathfinding/astar.cpp +149 -0
- data/pathfinding/build.sh +6 -0
- data/pathfinding/build.txt +16 -0
- data/pathfinding/crowd.cpp +194 -0
- data/pathfinding/include/astar.h +49 -0
- data/pathfinding/include/common.h +5 -0
- data/pathfinding/include/crowd.h +43 -0
- data/pathfinding/include/micropather.h +511 -0
- data/pathfinding/include/navmesh.h +114 -0
- data/pathfinding/include/pathfinder.h +24 -0
- data/pathfinding/main.cpp +108 -17
- data/pathfinding/micropather.cpp +1062 -0
- data/pathfinding/navmesh.cpp +408 -0
- data/pathfinding/overrides/DetourCrowd.cpp +1446 -0
- data/pathfinding/overrides/DetourNavMeshQuery.cpp +3551 -0
- data/pathfinding/overrides/DetourNavMeshQuery.h +538 -0
- data/pathfinding/pathfinder.cpp +117 -0
- data/pathfinding/{bin → premake}/premake4 +0 -0
- data/pathfinding/premake/premake4.exe +0 -0
- data/pathfinding/premake4.lua +12 -3
- data/spec/actor/actor_spec.rb +0 -7
- data/spec/client_manager_spec.rb +1 -1
- data/spec/couchproxy_spec.rb +38 -0
- data/spec/entity_persistence_spec.rb +129 -0
- data/spec/game_systems/team_manager_spec.rb +2 -2
- data/spec/hashring_spec.rb +17 -39
- data/spec/java_grid_spec.rb +0 -2
- data/spec/misc_spec.rb +111 -0
- data/spec/mono_spec.rb +50 -3
- data/spec/reliable_message_spec.rb +38 -0
- data/spec/spec_helper.rb +4 -4
- data/spec/spec_helper_minimal.rb +10 -0
- data/web/app.rb +108 -86
- data/web/config/trinidad.yml +1 -0
- data/web/views/add_player.erb +25 -0
- data/web/views/index.erb +0 -0
- data/web/views/layout.erb +48 -0
- data/web/views/login.erb +25 -0
- data/web/views/players.erb +24 -0
- metadata +209 -94
- data/config/config.example.yml +0 -100
- data/config/regions.example.yml +0 -9
- data/games/example/lib/authentication_handler.rb +0 -69
- data/games/models.rb +0 -3
- data/games/models/clan_member.rb +0 -8
- data/games/models/clan_profile.rb +0 -9
- data/games/models/player.rb +0 -7
- data/games/plugins.rb +0 -1
- data/games/plugins/team_handler.rb +0 -49
- data/games/preload.rb +0 -13
- data/java/.gitignore +0 -1
- data/java/build.gradle +0 -95
- data/java/component.erb +0 -396
- data/java/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/java/src/main/java/com/game_machine/core/GameMachineLoader.java +0 -25
- data/java/src/main/java/com/game_machine/core/Grid.java +0 -195
- data/java/src/main/resources/logback.xml +0 -14
- data/java/src/main/resources/logging.properties +0 -3
- data/lib/game_machine/actor/mono_actor.rb +0 -89
- data/lib/game_machine/auth_handlers/base.rb +0 -21
- data/lib/game_machine/auth_handlers/public.rb +0 -34
- data/lib/game_machine/endpoints/mono_gateway.rb +0 -87
- data/lib/game_machine/endpoints/tcp.rb +0 -51
- data/lib/game_machine/endpoints/tcp_handler.rb +0 -75
- data/lib/game_machine/endpoints/udp.rb +0 -88
- data/lib/game_machine/game_loader.rb +0 -46
- data/lib/game_machine/game_systems/region_settings.rb +0 -13
- data/lib/game_machine/hashring.rb +0 -48
- data/lib/game_machine/settings.rb +0 -11
- data/mono/server/actor.cs +0 -37
- data/mono/server/iactor.cs +0 -11
- data/mono/server/message_util.cs +0 -29
- data/mono/server/proxy_client.cs +0 -73
- data/mono/server/proxy_server.cs +0 -30
- data/mono/server/test_actor.cs +0 -33
- data/pathfinding/include/pathfind.h +0 -167
- data/pathfinding/pathfind.cpp +0 -174
- data/pathfinding/pathfinder.cs +0 -66
- data/script/server.sh +0 -109
- data/script/watch.sh +0 -11
- data/spec/commands/navigation_commands_spec.rb +0 -51
- data/spec/game_systems/entity_tracking_spec.rb +0 -64
- data/spec/navigation/detour_navmesh_spec.rb +0 -34
- data/spec/navigation/detour_path_spec.rb +0 -25
- data/spec/udp_server_spec.rb +0 -10
- data/web/controllers/auth_controller.rb +0 -19
- data/web/controllers/base_controller.rb +0 -16
- data/web/controllers/index_controller.rb +0 -7
- data/web/controllers/log_controller.rb +0 -47
- data/web/controllers/messages_controller.rb +0 -59
- data/web/controllers/player_register_controller.rb +0 -15
- data/web/views/game_messages.haml +0 -45
- data/web/views/index.haml +0 -6
- data/web/views/layout.haml +0 -41
- data/web/views/logs.haml +0 -32
- data/web/views/player_register.haml +0 -22
- data/web/views/player_registered.haml +0 -2
- data/web/views/register_layout.haml +0 -22
- data/web/views/restart.haml +0 -35
@@ -12,16 +12,14 @@ module GameMachine
|
|
12
12
|
if message.has_player_logout
|
13
13
|
if Authentication.authenticated?(message.player)
|
14
14
|
unregister_client(message)
|
15
|
-
commands.misc.player_status_change(message.player.id,:unregistered)
|
16
15
|
end
|
17
16
|
elsif message.has_player
|
18
|
-
|
17
|
+
update_entities(message)
|
19
18
|
if Authentication.authenticated?(message.player)
|
20
19
|
game_handler.tell(message)
|
21
20
|
else
|
22
21
|
if @auth_handler.authenticate!(message.player)
|
23
22
|
register_client(message)
|
24
|
-
commands.misc.player_status_change(message.player.id,:registered)
|
25
23
|
game_handler.tell(message)
|
26
24
|
end
|
27
25
|
end
|
@@ -35,6 +33,14 @@ module GameMachine
|
|
35
33
|
|
36
34
|
private
|
37
35
|
|
36
|
+
def update_entities(message)
|
37
|
+
if message.get_entity_list
|
38
|
+
message.get_entity_list.each do |entity|
|
39
|
+
entity.set_player(message.player)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
38
44
|
def register_client(message)
|
39
45
|
GameMachine.logger.info "Register #{message.player.id}"
|
40
46
|
player_id = message.player.id
|
@@ -71,14 +77,6 @@ module GameMachine
|
|
71
77
|
@game_handler ||= Handlers::Game.find
|
72
78
|
end
|
73
79
|
|
74
|
-
def update_entities(message)
|
75
|
-
if message.get_entity_list
|
76
|
-
message.get_entity_list.each do |entity|
|
77
|
-
entity.set_player(message.player)
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
80
|
end
|
83
81
|
end
|
84
82
|
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'java'
|
2
|
+
require File.join(ENV['JAVA_ROOT'], 'lib', 'config-1.2.1.jar')
|
3
|
+
|
4
|
+
module GameMachine
|
5
|
+
class HoconConfig
|
6
|
+
|
7
|
+
def self.config
|
8
|
+
java_import 'com.typesafe.config.Config'
|
9
|
+
java_import 'com.typesafe.config.ConfigFactory'
|
10
|
+
file = File.join(ENV['APP_ROOT'],'config',"#{ENV['GAME_ENV']}.conf")
|
11
|
+
data = File.read(file)
|
12
|
+
config = ConfigFactory.parseString(data).getConfig('gamemachine')
|
13
|
+
top = [:handlers, :routers, :jdbc, :datastore, :gamecloud, :grids, :couchbase, :http, :udp, :tcp, :akka, :admin, :regions, :client]
|
14
|
+
conf = OpenStruct.new
|
15
|
+
top.each {|t| conf.send("#{t}=",OpenStruct.new)}
|
16
|
+
|
17
|
+
conf.environment = config.get_string('environment')
|
18
|
+
conf.use_regions = config.get_boolean('use_regions')
|
19
|
+
conf.orm = config.get_boolean('orm')
|
20
|
+
conf.mono_enabled = config.get_boolean('mono_enabled')
|
21
|
+
conf.seeds = config.get_string_list('seeds')
|
22
|
+
|
23
|
+
conf.regions = config.get_list('regions').map {|i| i.map(&:unwrapped)}
|
24
|
+
|
25
|
+
conf.client.protocol = config.get_string('client.protocol')
|
26
|
+
|
27
|
+
conf.handlers.team = config.get_string('handlers.team')
|
28
|
+
conf.handlers.auth = config.get_string('handlers.auth')
|
29
|
+
|
30
|
+
conf.routers.game_handler = config.get_int('routers.game_handler')
|
31
|
+
conf.routers.request_handler = config.get_int('routers.request_handler')
|
32
|
+
conf.routers.udp = config.get_int('routers.udp')
|
33
|
+
conf.routers.objectdb = config.get_int('routers.objectdb')
|
34
|
+
|
35
|
+
conf.datastore.store = config.get_string('datastore.store')
|
36
|
+
conf.datastore.serialization = config.get_string('datastore.serialization')
|
37
|
+
conf.datastore.cache_write_interval = config.get_int('datastore.cache_write_interval')
|
38
|
+
conf.datastore.cache_writes_per_second = config.get_int('datastore.cache_writes_per_second')
|
39
|
+
|
40
|
+
conf.gamecloud.host = config.get_string('gamecloud.host')
|
41
|
+
conf.gamecloud.user = config.get_string('gamecloud.user')
|
42
|
+
conf.gamecloud.api_key = config.get_string('gamecloud.api_key')
|
43
|
+
|
44
|
+
conf.grids.default = config.get_string('grids.default')
|
45
|
+
conf.grids.aoe = config.get_string('grids.aoe')
|
46
|
+
conf.grids.local_chat = config.get_string('grids.local_chat')
|
47
|
+
|
48
|
+
conf.couchbase.bucket = config.get_string('couchbase.bucket')
|
49
|
+
conf.couchbase.password = config.get_string('couchbase.password')
|
50
|
+
conf.couchbase.servers = config.get_string_list('couchbase.servers').to_a
|
51
|
+
|
52
|
+
conf.jdbc.hostname = config.get_string('jdbc.hostname')
|
53
|
+
conf.jdbc.port = config.get_int('jdbc.port')
|
54
|
+
conf.jdbc.database = config.get_string('jdbc.database')
|
55
|
+
conf.jdbc.url = config.get_string('jdbc.url')
|
56
|
+
conf.jdbc.ds = config.get_string('jdbc.ds')
|
57
|
+
conf.jdbc.driver = config.get_string('jdbc.driver')
|
58
|
+
conf.jdbc.username = config.get_string('jdbc.username')
|
59
|
+
conf.jdbc.password = config.get_string('jdbc.password')
|
60
|
+
|
61
|
+
conf.http.enabled = config.get_boolean('http.enabled')
|
62
|
+
conf.http.host = config.get_string('http.host')
|
63
|
+
conf.http.port = config.get_int('http.port')
|
64
|
+
|
65
|
+
conf.tcp.enabled = config.get_boolean('tcp.enabled')
|
66
|
+
conf.tcp.host = config.get_string('tcp.host')
|
67
|
+
conf.tcp.port = config.get_int('tcp.port')
|
68
|
+
|
69
|
+
conf.udp.enabled = config.get_boolean('udp.enabled')
|
70
|
+
conf.udp.host = config.get_string('udp.host')
|
71
|
+
conf.udp.port = config.get_int('udp.port')
|
72
|
+
|
73
|
+
conf.akka.host = config.get_string('akka.host')
|
74
|
+
conf.akka.port = config.get_int('akka.port')
|
75
|
+
|
76
|
+
conf.admin.user = config.get_string('admin.user')
|
77
|
+
conf.admin.pass = config.get_string('admin.pass')
|
78
|
+
conf
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -18,7 +18,17 @@ module GameMachine
|
|
18
18
|
include_package 'com.dyuproject.protostuff'
|
19
19
|
end
|
20
20
|
|
21
|
+
module TutorialLib
|
22
|
+
include_package 'com.game_machine.examples'
|
23
|
+
end
|
24
|
+
|
25
|
+
module ModelLib
|
26
|
+
include_package 'com.game_machine.orm.models'
|
27
|
+
end
|
28
|
+
|
21
29
|
module JavaLib
|
30
|
+
java_import 'com.typesafe.config.Config'
|
31
|
+
java_import 'com.typesafe.config.ConfigFactory'
|
22
32
|
java_import 'akka.cluster.ClusterEvent'
|
23
33
|
java_import 'akka.contrib.pattern.ClusterSingletonManager'
|
24
34
|
java_import 'akka.contrib.pattern.ClusterSingletonProxy'
|
@@ -38,6 +48,9 @@ module GameMachine
|
|
38
48
|
include_package 'akka.camel'
|
39
49
|
java_import 'com.game_machine.core.Grid'
|
40
50
|
include_package 'com.game_machine.core'
|
51
|
+
include_package 'com.game_machine.orm'
|
52
|
+
include_package 'com.game_machine.authentication'
|
53
|
+
include_package 'com.game_machine.ui'
|
41
54
|
include_package 'java.net'
|
42
55
|
include_package 'java.util.concurrent.atomic'
|
43
56
|
include_package 'scala.concurrent.duration'
|
@@ -46,6 +59,6 @@ module GameMachine
|
|
46
59
|
include_package 'java.util'
|
47
60
|
include_package 'java.io'
|
48
61
|
include_package 'com.couchbase.client'
|
49
|
-
include_package 'io.netty.channel'
|
62
|
+
#include_package 'io.netty.channel'
|
50
63
|
end
|
51
64
|
end
|
data/lib/game_machine/logger.rb
CHANGED
@@ -1,39 +1,26 @@
|
|
1
|
-
require 'rjack-logback'
|
2
1
|
|
3
2
|
module GameMachine
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
unless ENV['GAME_ENV'] == 'test'
|
10
|
-
print "#{message}\n"
|
3
|
+
|
4
|
+
class JavaLogger
|
5
|
+
[:info, :error, :warn, :fatal, :debug].each do |name|
|
6
|
+
define_method(name) do |msg|
|
7
|
+
JavaLib::GameMachineLoader.logger.send(name.to_sym,msg)
|
11
8
|
end
|
12
9
|
end
|
10
|
+
end
|
11
|
+
|
12
|
+
module Logger
|
13
|
+
LOGGER = JavaLogger.new
|
13
14
|
|
14
15
|
def logfile
|
15
16
|
File.join(ENV['APP_ROOT'], 'log',"#{ENV['GAME_ENV']}.log")
|
16
17
|
end
|
17
18
|
|
18
|
-
def configure_logging
|
19
|
-
RJack::Logback.configure do
|
20
|
-
console = RJack::Logback::ConsoleAppender.new do |a|
|
21
|
-
end
|
22
|
-
|
23
|
-
file = RJack::Logback::FileAppender.new(logfile) do |a|
|
24
|
-
end
|
25
|
-
|
26
|
-
RJack::Logback.root.add_appender( file )
|
27
|
-
RJack::Logback.root.level = RJack::Logback::INFO
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
19
|
def logger
|
32
20
|
LOGGER
|
33
21
|
end
|
34
|
-
|
22
|
+
|
35
23
|
end
|
36
24
|
end
|
37
25
|
|
38
26
|
GameMachine.send(:extend, GameMachine::Logger)
|
39
|
-
GameMachine.configure_logging
|
data/lib/game_machine/models.rb
CHANGED
@@ -11,7 +11,12 @@ module GameMachine
|
|
11
11
|
# it will just get restarted
|
12
12
|
Thread.new do
|
13
13
|
loop do
|
14
|
-
|
14
|
+
case RbConfig::CONFIG['host_os']
|
15
|
+
when /mswin|windows/i
|
16
|
+
system("cd #{mono_path} && server.exe")
|
17
|
+
else
|
18
|
+
system("cd #{mono_path} && mono server.exe")
|
19
|
+
end
|
15
20
|
sleep 10
|
16
21
|
end
|
17
22
|
end
|
@@ -32,12 +32,13 @@ module GameMachine
|
|
32
32
|
WriteBehindCache.find_distributed(entity.id).tell(entity)
|
33
33
|
end
|
34
34
|
|
35
|
-
def get_entity(entity_id)
|
35
|
+
def get_entity(entity_id,klass)
|
36
36
|
entity = entities.fetch(entity_id,nil)
|
37
37
|
if entity.nil?
|
38
|
-
entity = store.get(entity_id)
|
38
|
+
entity = store.get(entity_id,klass)
|
39
|
+
else
|
40
|
+
entity.clone
|
39
41
|
end
|
40
|
-
entity
|
41
42
|
end
|
42
43
|
|
43
44
|
def on_receive(message)
|
@@ -45,7 +46,7 @@ module GameMachine
|
|
45
46
|
procname = message.get_update_method.to_sym
|
46
47
|
current_entity_id = message.get_current_entity_id
|
47
48
|
update_entity = message.get_update_entity
|
48
|
-
current_entity = get_entity(current_entity_id)
|
49
|
+
current_entity = get_entity(current_entity_id,'Entity')
|
49
50
|
if self.class.dbprocs.has_key?(procname)
|
50
51
|
dbproc = self.class.dbprocs[procname]
|
51
52
|
returned_entity = dbproc.call(
|
@@ -59,11 +60,16 @@ module GameMachine
|
|
59
60
|
|
60
61
|
elsif message.is_a?(MessageLib::ObjectdbPut)
|
61
62
|
set_entity(message.get_entity)
|
62
|
-
|
63
|
+
get_sender.tell(true,nil)
|
63
64
|
elsif message.is_a?(MessageLib::ObjectdbGet)
|
64
|
-
|
65
|
+
if entity = get_entity(message.get_entity_id,message.get_klass)
|
66
|
+
get_sender.tell(entity,nil)
|
67
|
+
end
|
65
68
|
elsif message.is_a?(MessageLib::ObjectdbDel)
|
66
69
|
delete_entity(message.get_entity_id)
|
70
|
+
elsif message.respond_to?(:get_id)
|
71
|
+
set_entity(message)
|
72
|
+
get_sender.tell(true,nil)
|
67
73
|
else
|
68
74
|
unhandled(message)
|
69
75
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
|
2
2
|
if ['development','test'].include?(GameMachine.env)
|
3
|
-
require_relative '../../java/local_lib/protostuff-compiler-1.0.
|
3
|
+
require_relative '../../java/project/local_lib/protostuff-compiler-1.0.8-jarjar.jar'
|
4
4
|
require_relative 'protobuf/game_messages'
|
5
5
|
require_relative 'protobuf/generate'
|
6
6
|
end
|
@@ -8,12 +8,22 @@ module GameMachine
|
|
8
8
|
@messages = IO.readlines(message_file)
|
9
9
|
end
|
10
10
|
|
11
|
+
def persistent_messages
|
12
|
+
[].tap do |message_names|
|
13
|
+
messages.each do |line|
|
14
|
+
if line.match(/^\s*?(local_persistent|persistent)_message\s+?(\w+?)\s+?{/)
|
15
|
+
message_names << $2
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
11
21
|
def create_entity_fields
|
12
22
|
[].tap do |fields|
|
13
23
|
messages.each do |line|
|
14
|
-
if line.match(/^\s*?message\s+?(\w+?)\s+?{/)
|
15
|
-
name = $
|
16
|
-
fields << "optional #{$
|
24
|
+
if line.match(/^\s*?(persistent)?_?message\s+?(\w+?)\s+?{/)
|
25
|
+
name = $2[0,1].downcase + $2[1..-1]
|
26
|
+
fields << "optional #{$2} #{name} = #{starting_field_number};"
|
17
27
|
@starting_field_number += 1
|
18
28
|
end
|
19
29
|
end
|
@@ -2,6 +2,7 @@ require 'java'
|
|
2
2
|
require 'pathname'
|
3
3
|
require 'erb'
|
4
4
|
require 'fileutils'
|
5
|
+
require 'active_support/inflector'
|
5
6
|
|
6
7
|
java_import java.lang.System
|
7
8
|
java_import com.dyuproject.protostuff.compiler.CachingProtoLoader
|
@@ -17,6 +18,10 @@ module GameMachine
|
|
17
18
|
@app_root = app_root
|
18
19
|
end
|
19
20
|
|
21
|
+
def java_root
|
22
|
+
ENV['JAVA_ROOT']
|
23
|
+
end
|
24
|
+
|
20
25
|
def self.compile(path)
|
21
26
|
loader = CachingProtoLoader.new
|
22
27
|
file = java.io.File.new(path)
|
@@ -24,33 +29,124 @@ module GameMachine
|
|
24
29
|
end
|
25
30
|
|
26
31
|
def erb_template
|
27
|
-
File.join(
|
32
|
+
File.join(java_root,'component.erb')
|
33
|
+
end
|
34
|
+
|
35
|
+
def model_template
|
36
|
+
File.join(java_root,'model.erb')
|
37
|
+
end
|
38
|
+
|
39
|
+
def model_src
|
40
|
+
File.join(java_root,'src','main','java','com', 'game_machine','orm','models')
|
28
41
|
end
|
29
42
|
|
30
43
|
def java_src
|
31
|
-
File.join(
|
44
|
+
File.join(java_root,'src','main','java','GameMachine', 'Messages')
|
32
45
|
end
|
33
46
|
|
34
47
|
def config_path
|
35
48
|
File.join(app_root,'config')
|
36
49
|
end
|
37
50
|
|
38
|
-
def write_components(proto)
|
51
|
+
def write_components(proto,persistent_messages)
|
39
52
|
messages = proto.getMessages.reject {|message| message.getName == 'Components'}
|
40
53
|
FileUtils.mkdir_p(java_src)
|
54
|
+
FileUtils.mkdir_p(model_src)
|
55
|
+
message_names = proto.getMessages.map {|m| m.get_name}
|
56
|
+
messages_index = proto.getMessages.each_with_object({}) {|v,res| res[v.getName] = v}
|
57
|
+
|
41
58
|
proto.getMessages.each do |message|
|
59
|
+
message_fields = []
|
60
|
+
message.get_fields.each do |field|
|
61
|
+
if message_names.include?(field.getJavaType.to_s) && !field.is_repeated
|
62
|
+
message_fields << field.get_java_type.to_s
|
63
|
+
end
|
64
|
+
end
|
65
|
+
unless message_fields.empty?
|
66
|
+
#puts "#{message.getName} #{message_fields.inspect}"
|
67
|
+
end
|
68
|
+
|
42
69
|
klass = message.getName
|
70
|
+
persistent = persistent_messages.include?(klass)
|
43
71
|
#puts "Message: #{message.getName}"
|
44
|
-
out = ERB.new(File.read(erb_template),
|
72
|
+
out = ERB.new(File.read(erb_template),0,'>').result(binding)
|
73
|
+
out = out.gsub(/^(\s*\r\n){2,}/,"\r\n")
|
45
74
|
src_file = File.join(java_src,"#{message.getName}.java")
|
46
75
|
File.open(src_file,'w') {|f| f.write out}
|
76
|
+
|
77
|
+
if persistent
|
78
|
+
out = ERB.new(File.read(model_template),0,'<>').result(binding)
|
79
|
+
out = out.gsub(/^(\s*\r\n){2,}/,"\r\n")
|
80
|
+
out = out.gsub(/^(\s*\n){2,}/,"\n")
|
81
|
+
src_file = File.join(model_src,"#{message.getName}.java")
|
82
|
+
File.open(src_file,'w') {|f| f.write out}
|
83
|
+
end
|
47
84
|
#message.getFields.each do |field|
|
85
|
+
# puts field.default_value_set
|
48
86
|
# puts field.getJavaType
|
49
87
|
# puts field.toString
|
50
88
|
#end
|
51
89
|
end
|
52
90
|
end
|
53
91
|
|
92
|
+
def sql_column_name(klass,field)
|
93
|
+
"#{klass.underscore}_#{field.name.underscore}"
|
94
|
+
end
|
95
|
+
|
96
|
+
def sql_field(klass,field,dbtype,force_null=false)
|
97
|
+
if dbtype == 'mysql'
|
98
|
+
txt = case field.getJavaType.to_s
|
99
|
+
when 'boolean'
|
100
|
+
"`#{sql_column_name(klass,field)}` tinyint(4)"
|
101
|
+
when 'double'
|
102
|
+
"`#{sql_column_name(klass,field)}` double"
|
103
|
+
when 'float'
|
104
|
+
"`#{sql_column_name(klass,field)}` float"
|
105
|
+
when 'long'
|
106
|
+
"`#{sql_column_name(klass,field)}` int(11)"
|
107
|
+
when 'int'
|
108
|
+
"`#{sql_column_name(klass,field)}` int(11)"
|
109
|
+
when 'String'
|
110
|
+
"`#{sql_column_name(klass,field)}` varchar(128)"
|
111
|
+
end
|
112
|
+
elsif dbtype == 'postgres'
|
113
|
+
txt = case field.getJavaType.to_s
|
114
|
+
when 'boolean'
|
115
|
+
"#{sql_column_name(klass,field)} integer"
|
116
|
+
when 'double'
|
117
|
+
"#{sql_column_name(klass,field)} double precision"
|
118
|
+
when 'float'
|
119
|
+
"#{sql_column_name(klass,field)} double precision"
|
120
|
+
when 'long'
|
121
|
+
"#{sql_column_name(klass,field)} integer"
|
122
|
+
when 'int'
|
123
|
+
"#{sql_column_name(klass,field)} integer"
|
124
|
+
when 'String'
|
125
|
+
"#{sql_column_name(klass,field)} character varying(128)"
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
return nil if txt.nil?
|
130
|
+
|
131
|
+
if force_null
|
132
|
+
return "#{txt} DEFAULT NULL,"
|
133
|
+
end
|
134
|
+
|
135
|
+
if field.is_required
|
136
|
+
txt = "#{txt} NOT NULL,"
|
137
|
+
else
|
138
|
+
txt = "#{txt} DEFAULT NULL,"
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
def simple_value?(field)
|
143
|
+
if ['boolean','double','float','long','int','String'].include?(field.getJavaType.to_s)
|
144
|
+
true
|
145
|
+
else
|
146
|
+
false
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
54
150
|
def get_type(field)
|
55
151
|
if field.getJavaType.to_s == 'int'
|
56
152
|
return 'Integer'
|
@@ -70,17 +166,23 @@ module GameMachine
|
|
70
166
|
end
|
71
167
|
|
72
168
|
def generate
|
169
|
+
FileUtils.rm Dir.glob(File.join(java_src,'*.java'))
|
73
170
|
game_protofile = File.join(config_path,'game_messages.proto')
|
74
171
|
protofile = File.join(config_path,'messages.proto')
|
75
172
|
|
76
173
|
if File.exists?(game_protofile)
|
77
174
|
game_messages = File.read(game_protofile)
|
175
|
+
game_messages = game_messages.gsub('local_persistent_message','message')
|
176
|
+
game_messages = game_messages.gsub('local_message','message')
|
177
|
+
game_messages = game_messages.gsub('persistent_message','message')
|
78
178
|
gm = Protobuf::GameMessages.new(game_protofile)
|
179
|
+
persistent_messages = gm.persistent_messages
|
79
180
|
entity_fields = gm.create_entity_fields
|
80
181
|
game_entity_fields = entity_fields.join("\n")
|
81
182
|
else
|
82
183
|
game_messages = ''
|
83
184
|
game_entity_fields = ''
|
185
|
+
persistent_messages = []
|
84
186
|
end
|
85
187
|
messages = File.read(protofile)
|
86
188
|
|
@@ -102,7 +204,7 @@ module GameMachine
|
|
102
204
|
# throw an exception
|
103
205
|
proto = self.class.compile(combined_messages_protofile)
|
104
206
|
|
105
|
-
write_components(proto)
|
207
|
+
write_components(proto,persistent_messages)
|
106
208
|
#FileUtils.rm(combined_messages_protofile)
|
107
209
|
combined_messages
|
108
210
|
end
|