krakenlab 2018.01.07
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 +7 -0
- data/.gitignore +3 -0
- data/.pronto.yml +11 -0
- data/.rspec +3 -0
- data/.rubocop.yml +51 -0
- data/.travis.yml +19 -0
- data/Dangerfile +57 -0
- data/Gemfile +4 -0
- data/LICENSE +21 -0
- data/README.md +156 -0
- data/Rakefile +18 -0
- data/bin/console +14 -0
- data/bin/kraken +14 -0
- data/bin/setup +8 -0
- data/kraken.gemspec +46 -0
- data/lib/kraken.rb +15 -0
- data/lib/kraken/constants/project.rb +64 -0
- data/lib/kraken/core/app.rb +46 -0
- data/lib/kraken/core/client.rb +108 -0
- data/lib/kraken/core/config.rb +39 -0
- data/lib/kraken/core/connection.rb +21 -0
- data/lib/kraken/core/handlers/factory.rb +14 -0
- data/lib/kraken/core/handlers/godot30_handler.rb +16 -0
- data/lib/kraken/core/handlers/handler.rb +150 -0
- data/lib/kraken/core/listener.rb +28 -0
- data/lib/kraken/core/log.rb +50 -0
- data/lib/kraken/models/db.rb +24 -0
- data/lib/kraken/models/model.rb +25 -0
- data/lib/kraken/triggers/trigger.rb +25 -0
- data/lib/kraken/version.rb +3 -0
- metadata +374 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b3ab05e5732c687e312e0f4c91c347583f3334fd
|
4
|
+
data.tar.gz: 7679574d57d64ab362f6c67b14ba5a4a9cfdc0be
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 69220696053c6d378c78eff7134c6a46375d590f8fc17b4bd564ef7b15908c133e7f5a95a19e960703147ee1f0100f195e41156f93318b7c8409b288dfc82a28
|
7
|
+
data.tar.gz: 4be8944ca7f59fb56badb2baf27d16b660c1c402b4a87d090c1da8c76ddbb30d555775c2efedc79da2684bbd0695f36b1d1ef1fed98138f3410c57307c98a0bd
|
data/.gitignore
ADDED
data/.pronto.yml
ADDED
data/.rspec
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# This configuration was generated by
|
2
|
+
# `rubocop --auto-gen-config`
|
3
|
+
# on 2017-09-15 11:07:31 -0300 using RuboCop version 0.49.1.
|
4
|
+
# The point is for the user to remove these configuration records
|
5
|
+
# one by one as the offenses are removed from the code base.
|
6
|
+
# Note that changes in the inspected code, or installation of new
|
7
|
+
# versions of RuboCop, may require this file to be generated again.
|
8
|
+
|
9
|
+
# Offense count: 21
|
10
|
+
Metrics/AbcSize:
|
11
|
+
Max: 24
|
12
|
+
|
13
|
+
# Offense count: 7
|
14
|
+
# Configuration parameters: CountComments, ExcludedMethods.
|
15
|
+
Metrics/BlockLength:
|
16
|
+
Max: 39
|
17
|
+
|
18
|
+
# Offense count: 2
|
19
|
+
# Configuration parameters: CountComments.
|
20
|
+
Metrics/ClassLength:
|
21
|
+
Max: 112
|
22
|
+
|
23
|
+
# Offense count: 15
|
24
|
+
# Configuration parameters: CountComments.
|
25
|
+
Metrics/MethodLength:
|
26
|
+
Max: 14
|
27
|
+
|
28
|
+
# Offense count: 1
|
29
|
+
# Configuration parameters: CountComments.
|
30
|
+
Metrics/ModuleLength:
|
31
|
+
Max: 106
|
32
|
+
|
33
|
+
Metrics/LineLength:
|
34
|
+
Max: 130
|
35
|
+
|
36
|
+
Style/FormatStringToken:
|
37
|
+
Enabled: false
|
38
|
+
|
39
|
+
Metrics/BlockLength:
|
40
|
+
Max: 50
|
41
|
+
Exclude:
|
42
|
+
- 'Rakefile'
|
43
|
+
- '**/*.rake'
|
44
|
+
- '**/*_spec.rb'
|
45
|
+
- '*.gemspec'
|
46
|
+
|
47
|
+
Style/ClassVars:
|
48
|
+
Enabled: false
|
49
|
+
|
50
|
+
Performance/HashEachMethods:
|
51
|
+
Enabled: false
|
data/.travis.yml
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
language: ruby
|
2
|
+
|
3
|
+
sudo: true
|
4
|
+
|
5
|
+
services:
|
6
|
+
- redis-server
|
7
|
+
- postgresql
|
8
|
+
|
9
|
+
before_install:
|
10
|
+
- sudo apt-get update -qq
|
11
|
+
- sudo apt-get install -y postgresql-server-dev-all
|
12
|
+
|
13
|
+
rvm:
|
14
|
+
- 2.4.1
|
15
|
+
|
16
|
+
script:
|
17
|
+
- 'export PRONTO_PULL_REQUEST_ID=${TRAVIS_PULL_REQUEST} && bundle exec pronto run -f github_pr -c origin/${TRAVIS_BRANCH}'
|
18
|
+
- bundle exec rspec
|
19
|
+
- bundle exec danger
|
data/Dangerfile
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
# MESSAGE CHECKLIST
|
2
|
+
|
3
|
+
message = <<-MESSAGE
|
4
|
+
## Hello, hitchhiker. Not that anyone cares about what I say, but please, ensure you did check these things:
|
5
|
+
|
6
|
+
- [ ] Run all tests locally
|
7
|
+
- [ ] If you introduced front-end changes, are there desktop and mobile screenshots attached?
|
8
|
+
- [ ] Review the added i18n texts and ensure you added i18n keys for all needed cases
|
9
|
+
- [ ] Do manual tests in the pages affected by the changes you're introducing in this PR
|
10
|
+
- [ ] Fix all FIXME and remove all TODO comments
|
11
|
+
|
12
|
+
MESSAGE
|
13
|
+
|
14
|
+
markdown(message)
|
15
|
+
|
16
|
+
# GIT & GITHUB
|
17
|
+
|
18
|
+
## Make it more obvious that a pr is a work in progress and shouldn't be merged yet
|
19
|
+
warn('PR is classed as Work in Progress') if github.pr_title.include?('WIP')
|
20
|
+
|
21
|
+
## Warn when there is a big pr
|
22
|
+
warn('Big PR') if git.lines_of_code > 500
|
23
|
+
|
24
|
+
## If these are all empty something has gone wrong, better to raise it in a comment
|
25
|
+
if git.modified_files.empty? && git.added_files.empty? && git.deleted_files.empty?
|
26
|
+
raise('This PR has no changes at all, this is likely an issue during development.')
|
27
|
+
end
|
28
|
+
|
29
|
+
# DATABASE
|
30
|
+
|
31
|
+
added_migration = git.added_files.include?('db/migrate/*.rb')
|
32
|
+
has_schema_changes = git.modified_files.include?('db/schema.rb')
|
33
|
+
|
34
|
+
## Added migrations and didn't update schema.rb
|
35
|
+
if added_migration && !has_schema_changes
|
36
|
+
warn('Run `db:migrate` and commit changes of `schema.rb` file!')
|
37
|
+
end
|
38
|
+
|
39
|
+
# TODOS
|
40
|
+
|
41
|
+
todoist.warn_for_todos
|
42
|
+
todoist.print_todos_table
|
43
|
+
|
44
|
+
# TESTS
|
45
|
+
|
46
|
+
has_app_changes = !git.modified_files.grep(/(lib|app)/).empty?
|
47
|
+
has_test_changes = !git.modified_files.grep(/(spec|test)/).empty?
|
48
|
+
|
49
|
+
## Changed the code, but didn't added or updated a test case?
|
50
|
+
if has_app_changes && !has_test_changes
|
51
|
+
message = <<-MESSAGE
|
52
|
+
I think you ought to know I'm feeling very depressed with the fact that you didn't add any test case.
|
53
|
+
That's OK as long as you're refactoring existing code.
|
54
|
+
MESSAGE
|
55
|
+
|
56
|
+
warn(message.strip)
|
57
|
+
end
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2017 Marlon Henry Schweigert & KrakenLab
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,156 @@
|
|
1
|
+
[](https://travis-ci.org/KrakenLab/kraken)
|
2
|
+
[](https://www.codacy.com/app/Schweigert/kraken?utm_source=github.com&utm_medium=referral&utm_content=KrakenLab/kraken&utm_campaign=Badge_Grade)
|
3
|
+
[](https://badge.fury.io/rb/krakenlab)
|
4
|
+
[](https://www.codetriage.com/krakenlab/kraken)
|
5
|
+
[](https://beta.gemnasium.com/projects/github.com/KrakenLab/kraken)
|
6
|
+
|
7
|
+
# Welcome to Kraken!
|
8
|
+
|
9
|
+
Kraken is a mmo server framework that includes everything needed to create database-backed according to the Model-View-Controller (MVC) pattern over a distribuited redis network.
|
10
|
+
|
11
|
+
It's works with:
|
12
|
+
- Redis, to distribute game data over all nodes in network.
|
13
|
+
- Postgre, To save all permanent data.
|
14
|
+
|
15
|
+
Applications developed with kraken have 4 pillars:
|
16
|
+
- Db instances, saved on Postgre. Database instances are organized by ActiveRecord.
|
17
|
+
- Model instances, saved over a Redis Cloud. Model instances are organized by Ohm, a Mapper to redis.
|
18
|
+
- Triggers and Callbacks, to made the Remote Call Procedure to server, organized by Kraken.
|
19
|
+
|
20
|
+
## Model
|
21
|
+
|
22
|
+
`Model` are the first pillar from MVC pattern. But, in Kraken, Models are divided into memory and database instances.
|
23
|
+
|
24
|
+
The `Kraken::Db` is a shortcut to Active Record. You can write Db models to Sqlite, PostgreSQL, MySQL and others Db's.
|
25
|
+
|
26
|
+
On the other hand, `Kraken::Model` is a shortcut to Ohm mapper. It's write all data in redis-server.
|
27
|
+
Be careful! Redis has no garbage collection. Always write the `on_delete` method to garbage data on user disconnection. You can also use this method to write permanent game state updates to the database.
|
28
|
+
|
29
|
+
## View
|
30
|
+
|
31
|
+
`View` are the second pillar from MVC pattern. In kraken, view are the callback of a trigger. It's are a simple data, a array or a hash! You do not need to worry about it! Just write the return! Kraken translates all this to you!
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
class Example < Kraken::Trigger
|
35
|
+
def run
|
36
|
+
puts params
|
37
|
+
@callback = [1,2,3,4,5]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
Kraken::Config.instance.setup do |config|
|
42
|
+
config.add_trigger klass: Example
|
43
|
+
end
|
44
|
+
```
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
require 'kraken/client'
|
48
|
+
|
49
|
+
a = Kraken::Client.new('user', 'pass')
|
50
|
+
a.connect('localhost', 3030)
|
51
|
+
a.call('example', {a: 'hehe'})
|
52
|
+
# => [1,2,3,4,5]
|
53
|
+
```
|
54
|
+
|
55
|
+
## Controller
|
56
|
+
|
57
|
+
The `controller` is the logical pillar from MVC! This is a Trigger! Triggers are events that can be triggered by a client, using some argument.
|
58
|
+
|
59
|
+
You must use the Models in the triggers to update the game states in Database, and use the callback to return and update the game on the client side.
|
60
|
+
|
61
|
+
# Installation
|
62
|
+
|
63
|
+
#### Postgre
|
64
|
+
|
65
|
+
```bash
|
66
|
+
sudo apt-get install postgresql postgresql-contrib libpq-dev
|
67
|
+
```
|
68
|
+
|
69
|
+
#### Redis
|
70
|
+
|
71
|
+
```bash
|
72
|
+
cd /tmp
|
73
|
+
curl -O http://download.redis.io/redis-stable.tar.gz
|
74
|
+
tar xzvf redis-stable.tar.gz
|
75
|
+
cd redis-stable
|
76
|
+
make
|
77
|
+
sudo make install
|
78
|
+
|
79
|
+
sudo service redis start
|
80
|
+
```
|
81
|
+
|
82
|
+
#### Kraken Framework
|
83
|
+
|
84
|
+
Install the kraken:
|
85
|
+
`$ gem install kraken`
|
86
|
+
|
87
|
+
Create a new KrakenApp:
|
88
|
+
`$ kraken -n app_name`
|
89
|
+
|
90
|
+
Use the `migrate.rb` to setup a fixed start database.
|
91
|
+
|
92
|
+
Add a config file in config path:
|
93
|
+
|
94
|
+
```ruby
|
95
|
+
# config/config.rb
|
96
|
+
Kraken::Config.instance.setup do |config|
|
97
|
+
config.server name: 'new_app', handler: :default
|
98
|
+
|
99
|
+
config.add_trigger klass: Characters::Index
|
100
|
+
config.add_trigger klass: Characters::New
|
101
|
+
end
|
102
|
+
```
|
103
|
+
|
104
|
+
and setup a new method authentication method:
|
105
|
+
```ruby
|
106
|
+
#config/connection.rb
|
107
|
+
class Kraken::Connection < Kraken::Model
|
108
|
+
set :characters, :Character
|
109
|
+
|
110
|
+
attr_accessor :account
|
111
|
+
attr_accessor :cache
|
112
|
+
|
113
|
+
def on_delete
|
114
|
+
characters.each { |character| character.delete }
|
115
|
+
@cache.each_key { |key| @cach[key].delete }
|
116
|
+
end
|
117
|
+
|
118
|
+
# The standard is to allow everyone!
|
119
|
+
# Implement it!
|
120
|
+
def authenticate
|
121
|
+
@account = Db::Account.where(user: user).first
|
122
|
+
return false if account.nil?
|
123
|
+
return false unless account.user == user && account.pass == pass
|
124
|
+
|
125
|
+
@cache = {}
|
126
|
+
|
127
|
+
true
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
```
|
132
|
+
|
133
|
+
and run this!: `kraken -s`
|
134
|
+
|
135
|
+
# Development
|
136
|
+
|
137
|
+
After checking out the repo, run `bundle install` to install dependencies. You can also run `rake console` for an interactive prompt that will allow you to experiment.
|
138
|
+
|
139
|
+
## Version
|
140
|
+
|
141
|
+
As we release many stable versions for testing, and we price by incremental implementation, the only rule for the versions is: `Year.Month.Day`
|
142
|
+
|
143
|
+
# Contributing
|
144
|
+
|
145
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/KrakenLab/kraken.
|
146
|
+
|
147
|
+
Perform automated and manual testing using the console. Do not forget to check the style using `rubocop`.
|
148
|
+
We will help with possible problems in your PR '\\o/'!
|
149
|
+
|
150
|
+
### contributors
|
151
|
+
|
152
|
+
- [Marlon Henry Schweigert](http://github.com/Schweigert)
|
153
|
+
|
154
|
+
# License
|
155
|
+
|
156
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'redis'
|
3
|
+
|
4
|
+
task default: :spec
|
5
|
+
|
6
|
+
task :console do
|
7
|
+
sh './bin/console'
|
8
|
+
end
|
9
|
+
|
10
|
+
task test: :dbreset do
|
11
|
+
sh 'pronto run'
|
12
|
+
sh 'bundle exec rspec'
|
13
|
+
end
|
14
|
+
|
15
|
+
task :dbreset do
|
16
|
+
db = Redis.new
|
17
|
+
db.keys.each { |key| db.del key }
|
18
|
+
end
|
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'kraken'
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require 'pry'
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require 'irb'
|
14
|
+
IRB.start(__FILE__)
|
data/bin/kraken
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'require_all'
|
5
|
+
require 'kraken'
|
6
|
+
|
7
|
+
Kraken::App.create_app(ARGV.last) if ARGV.include? '-n'
|
8
|
+
Kraken::App.print_version if ARGV.include? '-v'
|
9
|
+
Kraken::App.print_help if ARGV.include?('-h') || ARGV.size.zero?
|
10
|
+
|
11
|
+
Kraken::App.load_app
|
12
|
+
|
13
|
+
Kraken::App.start_console if ARGV.include? '-d'
|
14
|
+
Kraken::App.start_server if ARGV.include? '-s'
|
data/bin/setup
ADDED
data/kraken.gemspec
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
lib = File.expand_path('../lib', __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require 'kraken/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = 'krakenlab'
|
7
|
+
spec.version = Kraken::VERSION
|
8
|
+
spec.authors = ['Marlon Henry Schweigert']
|
9
|
+
spec.email = ['fleyhe0@gmail.com']
|
10
|
+
|
11
|
+
spec.summary = 'Kraken Distribuited MMO Framework.'
|
12
|
+
spec.description = 'A Easy way to project your MMO Server.'
|
13
|
+
spec.homepage = 'http://www.github.com/KrakenLab/kraken'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
17
|
+
f.match(%r{^(test|spec|features)/})
|
18
|
+
end
|
19
|
+
|
20
|
+
spec.bindir = 'bin'
|
21
|
+
spec.executables = ['kraken']
|
22
|
+
spec.require_paths = ['lib']
|
23
|
+
|
24
|
+
spec.add_runtime_dependency 'active_record_migrations', '5.0.2.1'
|
25
|
+
spec.add_runtime_dependency 'activerecord', '~> 5.0', '>= 5.0.0.1'
|
26
|
+
spec.add_runtime_dependency 'logger'
|
27
|
+
spec.add_runtime_dependency 'ohm'
|
28
|
+
spec.add_runtime_dependency 'pg'
|
29
|
+
spec.add_runtime_dependency 'project_creator', '2018.1.1'
|
30
|
+
spec.add_runtime_dependency 'require_all', '1.5.0'
|
31
|
+
|
32
|
+
spec.add_development_dependency 'bundler', '~> 1.16'
|
33
|
+
spec.add_development_dependency 'danger'
|
34
|
+
spec.add_development_dependency 'danger-github_ext'
|
35
|
+
spec.add_development_dependency 'danger-simplecov_json'
|
36
|
+
spec.add_development_dependency 'danger-todoist'
|
37
|
+
spec.add_development_dependency 'faker'
|
38
|
+
spec.add_development_dependency 'pronto'
|
39
|
+
spec.add_development_dependency 'pronto-flay'
|
40
|
+
spec.add_development_dependency 'pronto-rubocop'
|
41
|
+
spec.add_development_dependency 'pry', '0.11.3'
|
42
|
+
spec.add_development_dependency 'rake', '12.3.0'
|
43
|
+
spec.add_development_dependency 'redis'
|
44
|
+
spec.add_development_dependency 'rspec', '3.7'
|
45
|
+
spec.add_development_dependency 'rubocop', '0.52.0'
|
46
|
+
end
|