gameoverseer 0.1.7 → 0.1.8
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.
- checksums.yaml +5 -5
- data/.gitignore +4 -4
- data/Gemfile +3 -3
- data/Gemfile.lock +30 -30
- data/README.md +53 -51
- data/Rakefile +2 -0
- data/gameoverseer.gemspec +22 -22
- data/lib/gameoverseer.rb +73 -73
- data/lib/gameoverseer/channels/channel_manager.rb +48 -48
- data/lib/gameoverseer/clients/client_manager.rb +68 -68
- data/lib/gameoverseer/console/console.rb +206 -206
- data/lib/gameoverseer/console/namespace_creator.rb +4 -4
- data/lib/gameoverseer/encryption_handler/encryption_handler.rb +40 -40
- data/lib/gameoverseer/input_handler/input_handler.rb +36 -36
- data/lib/gameoverseer/messages/message_manager.rb +40 -40
- data/lib/gameoverseer/packet_handler/json_packet_handler.rb +34 -31
- data/lib/gameoverseer/packet_handler/messagepack_packet_handler.rb +31 -31
- data/lib/gameoverseer/packet_handler/packet_handler.rb +29 -29
- data/lib/gameoverseer/server/renet_server.rb +126 -126
- data/lib/gameoverseer/services/service.rb +112 -111
- data/lib/gameoverseer/services/services.rb +38 -38
- data/lib/gameoverseer/version.rb +4 -4
- data/license.md +9 -9
- data/test-clients/test-client-gamma.rb +62 -62
- data/test/test_helper.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 3e94d93ad8f7415966ba80cb878b7f26ae0e11d89ce50d62869c1b9f6546e784
|
4
|
+
data.tar.gz: e269d8f3cfc4efbd3afb4ac875d7ebb4fceafb61147eee49effc93e757910bab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4223befcd3e0f716dfc4efeaacfe8a85b74328d07060dcdd906f3376596d9847f00003892585fc0222152633df3dee1896743a00838e5f822fd61b4687c4b1dd
|
7
|
+
data.tar.gz: 2fd5c5d5078c4f54181ae7aaca5997177b8b885c3e195898b7d165718186fe7ac6f751ed8388542b49c43594c146986b1726abb5cb3e120a94738e88bf69867d
|
data/.gitignore
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
log-*.txt
|
2
|
-
.yardoc/*
|
3
|
-
protocol.md
|
4
|
-
*.gem
|
1
|
+
log-*.txt
|
2
|
+
.yardoc/*
|
3
|
+
protocol.md
|
4
|
+
*.gem
|
data/Gemfile
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
source "https://rubygems.org"
|
2
|
-
|
3
|
-
gemspec
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
gemspec
|
data/Gemfile.lock
CHANGED
@@ -1,30 +1,30 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
gameoverseer (0.1.2)
|
5
|
-
concurrent-ruby
|
6
|
-
gosu (= 0.10.6)
|
7
|
-
multi_json
|
8
|
-
renet
|
9
|
-
|
10
|
-
GEM
|
11
|
-
remote: https://rubygems.org/
|
12
|
-
specs:
|
13
|
-
concurrent-ruby (1.0.1)
|
14
|
-
concurrent-ruby (1.0.1-java)
|
15
|
-
gosu (0.10.6)
|
16
|
-
gosu (0.10.6-x64-mingw32)
|
17
|
-
gosu (0.10.6-x86-mingw32)
|
18
|
-
multi_json (1.11.3)
|
19
|
-
renet (0.2.1)
|
20
|
-
|
21
|
-
PLATFORMS
|
22
|
-
java
|
23
|
-
x64-mingw32
|
24
|
-
x86-mingw32
|
25
|
-
|
26
|
-
DEPENDENCIES
|
27
|
-
gameoverseer!
|
28
|
-
|
29
|
-
BUNDLED WITH
|
30
|
-
1.11.2
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
gameoverseer (0.1.2)
|
5
|
+
concurrent-ruby
|
6
|
+
gosu (= 0.10.6)
|
7
|
+
multi_json
|
8
|
+
renet
|
9
|
+
|
10
|
+
GEM
|
11
|
+
remote: https://rubygems.org/
|
12
|
+
specs:
|
13
|
+
concurrent-ruby (1.0.1)
|
14
|
+
concurrent-ruby (1.0.1-java)
|
15
|
+
gosu (0.10.6)
|
16
|
+
gosu (0.10.6-x64-mingw32)
|
17
|
+
gosu (0.10.6-x86-mingw32)
|
18
|
+
multi_json (1.11.3)
|
19
|
+
renet (0.2.1)
|
20
|
+
|
21
|
+
PLATFORMS
|
22
|
+
java
|
23
|
+
x64-mingw32
|
24
|
+
x86-mingw32
|
25
|
+
|
26
|
+
DEPENDENCIES
|
27
|
+
gameoverseer!
|
28
|
+
|
29
|
+
BUNDLED WITH
|
30
|
+
1.11.2
|
data/README.md
CHANGED
@@ -1,51 +1,53 @@
|
|
1
|
-
[](https://codeclimate.com/github/cyberarm/rewrite-gameoverseer)
|
2
|
-
[](http://inch-ci.org/github/cyberarm/rewrite-gameoverseer)
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
```
|
19
|
-
|
20
|
-
```
|
21
|
-
|
22
|
-
```
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
```
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
1
|
+
[](https://codeclimate.com/github/cyberarm/rewrite-gameoverseer)
|
2
|
+
[](http://inch-ci.org/github/cyberarm/rewrite-gameoverseer)
|
3
|
+
[](https://gitter.im/gameoverseer/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
4
|
+
|
5
|
+
# GameOverseer
|
6
|
+
|
7
|
+
A game server, designed to be able to play host to up to 4 players in Planet Wars.
|
8
|
+
|
9
|
+
This repo is a complete rewrite of [GameOverseer](https://github.com/cyberarm/gameoverseer).
|
10
|
+
|
11
|
+
# Status
|
12
|
+
In development.
|
13
|
+
Any examples given are subject to be outdated at anytime.
|
14
|
+
|
15
|
+
# Install
|
16
|
+
### Using bundler
|
17
|
+
Add this to your Gemfile
|
18
|
+
``` ruby
|
19
|
+
gem "gameoverseer"
|
20
|
+
```
|
21
|
+
and run to install.
|
22
|
+
```
|
23
|
+
bundle install
|
24
|
+
```
|
25
|
+
|
26
|
+
### Or using RubyGems
|
27
|
+
```
|
28
|
+
gem install gameoverseer
|
29
|
+
```
|
30
|
+
|
31
|
+
# Usage
|
32
|
+
``` ruby
|
33
|
+
require 'gameoverseer'
|
34
|
+
|
35
|
+
# Write a service for your game
|
36
|
+
class GameWorld < GameOverseer::Service
|
37
|
+
def setup
|
38
|
+
channel_manager.register_channel('game_world', self)
|
39
|
+
end
|
40
|
+
|
41
|
+
def process(data)
|
42
|
+
# Do stuff with the data hash.
|
43
|
+
end
|
44
|
+
|
45
|
+
def version
|
46
|
+
"1.3.75"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
host = "localhost"
|
51
|
+
port = 56789
|
52
|
+
GameOverseer.activate(host, port)
|
53
|
+
```
|
data/Rakefile
ADDED
data/gameoverseer.gemspec
CHANGED
@@ -1,22 +1,22 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
$:.push File.expand_path("../lib", __FILE__)
|
3
|
-
require "gameoverseer/version"
|
4
|
-
|
5
|
-
Gem::Specification.new do |s|
|
6
|
-
s.name = "gameoverseer"
|
7
|
-
s.version = GameOverseer::VERSION
|
8
|
-
s.authors = ["Cyberarm"]
|
9
|
-
s.email = ["matthewlikesrobots@gmail.com"]
|
10
|
-
s.homepage = "https://github.com/cyberarm/rewrite-gameoverseer"
|
11
|
-
s.summary = "Generic game server."
|
12
|
-
s.description = "GameOverseer is designed to simplify the making of multiplayer games by providing a way to simply and easily write a game server."
|
13
|
-
|
14
|
-
s.files = `git ls-files`.split("\n")
|
15
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
-
s.require_paths = ["lib", "bin"]
|
18
|
-
|
19
|
-
s.add_runtime_dependency "concurrent-ruby"
|
20
|
-
s.add_runtime_dependency "renet", "~> 0.2", ">= 0.2.2"
|
21
|
-
s.add_runtime_dependency "multi_json"
|
22
|
-
end
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "gameoverseer/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "gameoverseer"
|
7
|
+
s.version = GameOverseer::VERSION
|
8
|
+
s.authors = ["Cyberarm"]
|
9
|
+
s.email = ["matthewlikesrobots@gmail.com"]
|
10
|
+
s.homepage = "https://github.com/cyberarm/rewrite-gameoverseer"
|
11
|
+
s.summary = "Generic game server."
|
12
|
+
s.description = "GameOverseer is designed to simplify the making of multiplayer games by providing a way to simply and easily write a game server."
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
+
s.require_paths = ["lib", "bin"]
|
18
|
+
|
19
|
+
s.add_runtime_dependency "concurrent-ruby"
|
20
|
+
s.add_runtime_dependency "renet", "~> 0.2", ">= 0.2.2"
|
21
|
+
s.add_runtime_dependency "multi_json"
|
22
|
+
end
|
data/lib/gameoverseer.rb
CHANGED
@@ -1,73 +1,73 @@
|
|
1
|
-
require "set"
|
2
|
-
require "openssl"
|
3
|
-
|
4
|
-
require "concurrent"
|
5
|
-
require "renet"
|
6
|
-
|
7
|
-
require_relative "gameoverseer/version"
|
8
|
-
|
9
|
-
begin
|
10
|
-
require_relative "gameoverseer/console/console"
|
11
|
-
rescue => e
|
12
|
-
require_relative "gameoverseer/console/namespace_creator"
|
13
|
-
require_relative "gameoverseer/console/console"
|
14
|
-
end
|
15
|
-
|
16
|
-
require_relative "gameoverseer/channels/channel_manager"
|
17
|
-
|
18
|
-
require_relative "gameoverseer/messages/message_manager"
|
19
|
-
|
20
|
-
require_relative "gameoverseer/clients/client_manager"
|
21
|
-
|
22
|
-
require_relative "gameoverseer/services/service"
|
23
|
-
require_relative "gameoverseer/services/services"
|
24
|
-
|
25
|
-
require_relative "gameoverseer/input_handler/input_handler"
|
26
|
-
|
27
|
-
require_relative "gameoverseer/packet_handler/packet_handler"
|
28
|
-
require_relative "gameoverseer/packet_handler/json_packet_handler"
|
29
|
-
require_relative "gameoverseer/packet_handler/messagepack_packet_handler"
|
30
|
-
require_relative "gameoverseer/encryption_handler/encryption_handler"
|
31
|
-
|
32
|
-
require_relative "gameoverseer/server/renet_server"
|
33
|
-
|
34
|
-
|
35
|
-
Thread.abort_on_exception = true
|
36
|
-
# General purpose game server that uses services (plugins) for logic.
|
37
|
-
module GameOverseer
|
38
|
-
|
39
|
-
# Start server
|
40
|
-
def self.activate(host, port, use_inbuilt_console = false, packet_handler = JsonPacketHandler, encryption_handler = nil)
|
41
|
-
begin
|
42
|
-
if use_inbuilt_console
|
43
|
-
require "gosu"
|
44
|
-
GameOverseer::Console.log "Using inbuilt console"
|
45
|
-
end
|
46
|
-
rescue LoadError
|
47
|
-
fatal "Install gosu 0.10.8 or later to use inbuilt console."
|
48
|
-
end
|
49
|
-
|
50
|
-
GameOverseer::ChannelManager.new
|
51
|
-
GameOverseer::MessageManager.new
|
52
|
-
GameOverseer::ClientManager.new
|
53
|
-
|
54
|
-
@console = GameOverseer::Console.new if use_inbuilt_console
|
55
|
-
@server = GameOverseer::ENetServerRunner.new
|
56
|
-
|
57
|
-
Thread.new {@server.start(host, port, packet_handler, encryption_handler)}
|
58
|
-
@console.show if use_inbuilt_console
|
59
|
-
sleep
|
60
|
-
|
61
|
-
at_exit do
|
62
|
-
GameOverseer::Console.instance.close if use_inbuilt_console
|
63
|
-
@server.supervisor.terminate if defined?(@server.supervisor.terminate)
|
64
|
-
GameOverseer::Console.log "Server Shutdown"
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
# Stop server
|
69
|
-
def self.deactivate
|
70
|
-
puts "ALERT \"CONSOLE CLOSED. LOST CONTROL OF SERVER.\""
|
71
|
-
@server.supervisor.terminate
|
72
|
-
end
|
73
|
-
end
|
1
|
+
require "set"
|
2
|
+
require "openssl"
|
3
|
+
|
4
|
+
require "concurrent"
|
5
|
+
require "renet"
|
6
|
+
|
7
|
+
require_relative "gameoverseer/version"
|
8
|
+
|
9
|
+
begin
|
10
|
+
require_relative "gameoverseer/console/console"
|
11
|
+
rescue => e
|
12
|
+
require_relative "gameoverseer/console/namespace_creator"
|
13
|
+
require_relative "gameoverseer/console/console"
|
14
|
+
end
|
15
|
+
|
16
|
+
require_relative "gameoverseer/channels/channel_manager"
|
17
|
+
|
18
|
+
require_relative "gameoverseer/messages/message_manager"
|
19
|
+
|
20
|
+
require_relative "gameoverseer/clients/client_manager"
|
21
|
+
|
22
|
+
require_relative "gameoverseer/services/service"
|
23
|
+
require_relative "gameoverseer/services/services"
|
24
|
+
|
25
|
+
require_relative "gameoverseer/input_handler/input_handler"
|
26
|
+
|
27
|
+
require_relative "gameoverseer/packet_handler/packet_handler"
|
28
|
+
require_relative "gameoverseer/packet_handler/json_packet_handler"
|
29
|
+
require_relative "gameoverseer/packet_handler/messagepack_packet_handler"
|
30
|
+
require_relative "gameoverseer/encryption_handler/encryption_handler"
|
31
|
+
|
32
|
+
require_relative "gameoverseer/server/renet_server"
|
33
|
+
|
34
|
+
|
35
|
+
Thread.abort_on_exception = true
|
36
|
+
# General purpose game server that uses services (plugins) for logic.
|
37
|
+
module GameOverseer
|
38
|
+
|
39
|
+
# Start server
|
40
|
+
def self.activate(host, port, use_inbuilt_console = false, packet_handler = JsonPacketHandler, encryption_handler = nil)
|
41
|
+
begin
|
42
|
+
if use_inbuilt_console
|
43
|
+
require "gosu"
|
44
|
+
GameOverseer::Console.log "Using inbuilt console"
|
45
|
+
end
|
46
|
+
rescue LoadError
|
47
|
+
fatal "Install gosu 0.10.8 or later to use inbuilt console."
|
48
|
+
end
|
49
|
+
|
50
|
+
GameOverseer::ChannelManager.new
|
51
|
+
GameOverseer::MessageManager.new
|
52
|
+
GameOverseer::ClientManager.new
|
53
|
+
|
54
|
+
@console = GameOverseer::Console.new if use_inbuilt_console
|
55
|
+
@server = GameOverseer::ENetServerRunner.new
|
56
|
+
|
57
|
+
Thread.new {@server.start(host, port, packet_handler, encryption_handler)}
|
58
|
+
@console.show if use_inbuilt_console
|
59
|
+
sleep
|
60
|
+
|
61
|
+
at_exit do
|
62
|
+
GameOverseer::Console.instance.close if use_inbuilt_console
|
63
|
+
@server.supervisor.terminate if defined?(@server.supervisor.terminate)
|
64
|
+
GameOverseer::Console.log "Server Shutdown"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# Stop server
|
69
|
+
def self.deactivate
|
70
|
+
puts "ALERT \"CONSOLE CLOSED. LOST CONTROL OF SERVER.\""
|
71
|
+
@server.supervisor.terminate
|
72
|
+
end
|
73
|
+
end
|
@@ -1,48 +1,48 @@
|
|
1
|
-
module GameOverseer
|
2
|
-
|
3
|
-
# Handles routing packets to the services that subscribe to channels
|
4
|
-
class ChannelManager
|
5
|
-
CHAT = 0
|
6
|
-
WORLD= 1
|
7
|
-
HANDSHAKE = 2
|
8
|
-
FAULT=3
|
9
|
-
|
10
|
-
def initialize
|
11
|
-
@channels = {}
|
12
|
-
ChannelManager.instance = self
|
13
|
-
end
|
14
|
-
|
15
|
-
# Enables a service to subscribe to a channel
|
16
|
-
# @param channel [String]
|
17
|
-
# @param service [Service]
|
18
|
-
def register_channel(channel, service)
|
19
|
-
_channel = channel.downcase
|
20
|
-
unless @channels[_channel]
|
21
|
-
@channels[_channel] = service
|
22
|
-
GameOverseer::Console.log("ChannelManager> mapped '#{_channel}' to '#{service.class}'.")
|
23
|
-
else
|
24
|
-
raise "Could not map channel '#{_channel}' because '#{@channels[data[_channel]].class}' is already using it."
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
# Routes packet to {Service}
|
29
|
-
# @param client_id [Integer] ID of client that sent the packet
|
30
|
-
# @param data [Hash] data from packet
|
31
|
-
def send_to_service(client_id, data)
|
32
|
-
@channels[data['channel']].client_id = client_id
|
33
|
-
@channels[data['channel']].process(data)
|
34
|
-
end
|
35
|
-
|
36
|
-
# Returns instance of active {ChannelManager}
|
37
|
-
# @return [ChannelManager]
|
38
|
-
def self.instance
|
39
|
-
@instance
|
40
|
-
end
|
41
|
-
|
42
|
-
# Sets instance of {ChannelManager} that is used through out the system
|
43
|
-
# @param _instance [ChannelManager]
|
44
|
-
def self.instance=_instance
|
45
|
-
@instance = _instance
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
1
|
+
module GameOverseer
|
2
|
+
|
3
|
+
# Handles routing packets to the services that subscribe to channels
|
4
|
+
class ChannelManager
|
5
|
+
CHAT = 0
|
6
|
+
WORLD= 1
|
7
|
+
HANDSHAKE = 2
|
8
|
+
FAULT=3
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@channels = {}
|
12
|
+
ChannelManager.instance = self
|
13
|
+
end
|
14
|
+
|
15
|
+
# Enables a service to subscribe to a channel
|
16
|
+
# @param channel [String]
|
17
|
+
# @param service [Service]
|
18
|
+
def register_channel(channel, service)
|
19
|
+
_channel = channel.downcase
|
20
|
+
unless @channels[_channel]
|
21
|
+
@channels[_channel] = service
|
22
|
+
GameOverseer::Console.log("ChannelManager> mapped '#{_channel}' to '#{service.class}'.")
|
23
|
+
else
|
24
|
+
raise "Could not map channel '#{_channel}' because '#{@channels[data[_channel]].class}' is already using it."
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Routes packet to {Service}
|
29
|
+
# @param client_id [Integer] ID of client that sent the packet
|
30
|
+
# @param data [Hash] data from packet
|
31
|
+
def send_to_service(client_id, data)
|
32
|
+
@channels[data['channel']].client_id = client_id
|
33
|
+
@channels[data['channel']].process(data)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Returns instance of active {ChannelManager}
|
37
|
+
# @return [ChannelManager]
|
38
|
+
def self.instance
|
39
|
+
@instance
|
40
|
+
end
|
41
|
+
|
42
|
+
# Sets instance of {ChannelManager} that is used through out the system
|
43
|
+
# @param _instance [ChannelManager]
|
44
|
+
def self.instance=_instance
|
45
|
+
@instance = _instance
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|