pomelo-citrus 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +20 -0
  3. data/Rakefile +0 -0
  4. data/citrus.gemspec +35 -0
  5. data/lib/citrus.rb +18 -0
  6. data/lib/citrus/application.rb +237 -0
  7. data/lib/citrus/citrus.rb +27 -0
  8. data/lib/citrus/common/remote/backend/msg_remote.rb +57 -0
  9. data/lib/citrus/common/remote/frontend/channel_remote.rb +73 -0
  10. data/lib/citrus/common/remote/frontend/session_remote.rb +108 -0
  11. data/lib/citrus/common/service/backend_session_service.rb +265 -0
  12. data/lib/citrus/common/service/channel_service.rb +485 -0
  13. data/lib/citrus/common/service/connection_service.rb +71 -0
  14. data/lib/citrus/common/service/filter_service.rb +92 -0
  15. data/lib/citrus/common/service/handler_service.rb +63 -0
  16. data/lib/citrus/common/service/session_service.rb +446 -0
  17. data/lib/citrus/components/backend_session.rb +32 -0
  18. data/lib/citrus/components/channel.rb +33 -0
  19. data/lib/citrus/components/component.rb +19 -0
  20. data/lib/citrus/components/connection.rb +48 -0
  21. data/lib/citrus/components/connector.rb +265 -0
  22. data/lib/citrus/components/master.rb +40 -0
  23. data/lib/citrus/components/monitor.rb +48 -0
  24. data/lib/citrus/components/proxy.rb +195 -0
  25. data/lib/citrus/components/push_scheduler.rb +74 -0
  26. data/lib/citrus/components/remote.rb +71 -0
  27. data/lib/citrus/components/server.rb +61 -0
  28. data/lib/citrus/components/session.rb +41 -0
  29. data/lib/citrus/connectors/commands/handshake.rb +22 -0
  30. data/lib/citrus/connectors/commands/heartbeat.rb +22 -0
  31. data/lib/citrus/connectors/commands/kick.rb +22 -0
  32. data/lib/citrus/connectors/common/coder.rb +21 -0
  33. data/lib/citrus/connectors/common/handler.rb +21 -0
  34. data/lib/citrus/connectors/ws_connector.rb +110 -0
  35. data/lib/citrus/connectors/ws_socket.rb +75 -0
  36. data/lib/citrus/filters/handler/handler_filter.rb +19 -0
  37. data/lib/citrus/filters/handler/too_busy.rb +16 -0
  38. data/lib/citrus/filters/rpc/rpc_filter.rb +19 -0
  39. data/lib/citrus/filters/rpc/too_busy.rb +16 -0
  40. data/lib/citrus/master/master.rb +60 -0
  41. data/lib/citrus/master/starter.rb +73 -0
  42. data/lib/citrus/master/watchdog.rb +83 -0
  43. data/lib/citrus/modules/console.rb +45 -0
  44. data/lib/citrus/modules/console_module.rb +35 -0
  45. data/lib/citrus/modules/master_watcher.rb +88 -0
  46. data/lib/citrus/modules/monitor_watcher.rb +86 -0
  47. data/lib/citrus/monitor/monitor.rb +61 -0
  48. data/lib/citrus/push_schedulers/buffer.rb +16 -0
  49. data/lib/citrus/push_schedulers/direct.rb +76 -0
  50. data/lib/citrus/server/server.rb +327 -0
  51. data/lib/citrus/util/app_util.rb +203 -0
  52. data/lib/citrus/util/constants.rb +19 -0
  53. data/lib/citrus/util/countdown_latch.rb +42 -0
  54. data/lib/citrus/util/events.rb +14 -0
  55. data/lib/citrus/util/module_util.rb +68 -0
  56. data/lib/citrus/util/path_util.rb +50 -0
  57. data/lib/citrus/util/utils.rb +49 -0
  58. data/lib/citrus/version.rb +7 -0
  59. metadata +241 -0
@@ -0,0 +1,19 @@
1
+ # Author:: MinixLi (gmail: MinixLi1986)
2
+ # Homepage:: http://citrus.inspawn.com
3
+ # Date:: 16 July 2014
4
+
5
+ module Citrus
6
+ # Constants
7
+ #
8
+ #
9
+ module Constants
10
+ # Filepath
11
+ #
12
+ #
13
+ module Filepath
14
+ MASTER = '/config/master.rb'
15
+ SERVER = '/config/servers.rb'
16
+ CONFIG_DIR = '/config'
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,42 @@
1
+ # Author:: MinixLi (gmail: MinixLi1986)
2
+ # Homepage:: http://citrus.inspawn.com
3
+ # Date:: 16 July 2014
4
+
5
+ module Citrus
6
+ # Utils
7
+ #
8
+ #
9
+ module Utils
10
+ # CountDownLatch
11
+ #
12
+ #
13
+ class CountDownLatch
14
+ # Create a count down latch
15
+ #
16
+ # @param [Integer] count
17
+ # @param [Hash] args
18
+ def initialize count, args={}, &block
19
+ @count = count
20
+ @block = block
21
+ if args[:timeout]
22
+ @timer = EM::Timer.new(args[:timeout]) {
23
+ @block.respond_to? :call and @block.call true
24
+ }
25
+ end
26
+ end
27
+
28
+ # Called when a task finish count down
29
+ def done
30
+ unless @count > 0
31
+ throw Exception.new 'illegal state'
32
+ end
33
+
34
+ @count -= 1
35
+ if @count == 0
36
+ @timer.cancel if @timer
37
+ @block.respond_to? :call and @block.call
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,14 @@
1
+ # Author:: MinixLi (gmail: MinixLi1986)
2
+ # Homepage:: http://citrus.inspawn.com
3
+ # Date:: 16 July 2014
4
+
5
+ module Citrus
6
+ # Events
7
+ #
8
+ #
9
+ module Events
10
+ ADD_SERVERS = :add_servers
11
+ REMOVE_SERVERS = :remove_servers
12
+ REPLACE_SERVERS = :replace_servers
13
+ end
14
+ end
@@ -0,0 +1,68 @@
1
+ # Author:: MinixLi (gmail: MinixLi1986)
2
+ # Homepage:: http://citrus.inspawn.com
3
+ # Date:: 18 July 2014
4
+
5
+ require 'citrus/modules/console'
6
+ require 'citrus/modules/master_watcher'
7
+ require 'citrus/modules/monitor_watcher'
8
+
9
+ module Citrus
10
+ # Utils
11
+ #
12
+ #
13
+ module Utils
14
+ # ModuleUtil
15
+ #
16
+ #
17
+ module ModuleUtil
18
+ # Register default console modules
19
+ def register_default_modules
20
+ unless @close_watcher
21
+ if @master
22
+ @app.register ConsoleModules::MasterWatcher, {:app => @app}
23
+ else
24
+ @app.register ConsoleModules::MonitorWatcher, {:app => @app}
25
+ end
26
+ end
27
+ @app.register ConsoleModules::Console, {:app => @app}
28
+ end
29
+
30
+ # Load console modules
31
+ def load_modules
32
+ @app.modules_registered.each { |module_id, module_registered|
33
+ klass = module_registered[:module_klass]
34
+ args = module_registered[:args]
35
+ module_entity = klass.new args, @console_service
36
+ @console_service.register module_registered[:module_id], module_entity
37
+ @modules << module_entity
38
+ }
39
+ end
40
+
41
+ # Start console modules
42
+ def start_modules &block
43
+ start_module nil, @modules, 0, &block
44
+ end
45
+
46
+ # Start console module
47
+ #
48
+ # @param [Object] err
49
+ # @param [Array] modules
50
+ # @param [Integer] index
51
+ def start_module err, modules, index, &block
52
+ if err || index >= modules.length
53
+ block_given? and yield err
54
+ return
55
+ end
56
+
57
+ console_module = modules[index]
58
+ if console_module && console_module.respond_to?(:start)
59
+ console_module.start { |err|
60
+ start_module err, modules, (index + 1), &block
61
+ }
62
+ else
63
+ start_module err, modules, (index + 1), &block
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,50 @@
1
+ # Author:: MinixLi (gmail: MinixLi1986)
2
+ # Homepage:: http://citrus.inspawn.com
3
+ # Date:: 24 July 2014
4
+
5
+ module Citrus
6
+ # Utils
7
+ #
8
+ #
9
+ module Utils
10
+ # PathUtil
11
+ #
12
+ #
13
+ module PathUtil
14
+ # Get system remote service path
15
+ #
16
+ # @param [String] role
17
+ def get_sys_remote_path role
18
+ path = File.join File.dirname(__FILE__), '/../common/remote/', role
19
+ File.exists?(path) ? path : nil
20
+ end
21
+
22
+ # Get user remote service path
23
+ #
24
+ # @param [String] app_base
25
+ # @param [String] server_type
26
+ def get_user_remote_path app_base, server_type
27
+ path = File.join app_base, '/app/servers/', server_type, 'remote'
28
+ File.exists?(path) ? path : nil
29
+ end
30
+
31
+ # Compose remote path record
32
+ #
33
+ # @param [String] namespace
34
+ # @param [String] server_type
35
+ # @param [String] path
36
+ def remote_path_record namespace, server_type, path
37
+ { :namespace => namespace, :server_type => server_type, :path => path }
38
+ end
39
+
40
+ # Get handler path
41
+ #
42
+ # @param [String] app_base
43
+ # @param [String] server_type
44
+ def get_handler_path app_base, server_type
45
+ path = File.join app_base, '/app/servers/', server_type, 'handlers'
46
+ File.exists?(path) ? path : nil
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,49 @@
1
+ # Author:: MinixLi (gmail: MinixLi1986)
2
+ # Homepage:: http://citrus.inspawn.com
3
+ # Date:: 16 July 2014
4
+
5
+ module Citrus
6
+ # Utils
7
+ #
8
+ #
9
+ module Utils
10
+ # Check whether a host is a local adress
11
+ #
12
+ # @param [String] host
13
+ def local? host
14
+ return true
15
+ end
16
+
17
+ # EventEmitter
18
+ #
19
+ #
20
+ module EventEmitter
21
+ # Register event
22
+ #
23
+ # @param [String] event
24
+ def on event, &block
25
+ @on_blocks ||= {}
26
+ @on_blocks[event] = block
27
+ end
28
+
29
+ # Register event once
30
+ #
31
+ # @param [String] event
32
+ def once event, &block
33
+ @once_blocks ||= {}
34
+ @once_blocks[event] = block
35
+ end
36
+
37
+ # Emit event
38
+ def emit *args
39
+ event = args.shift
40
+ if @once_blocks && block = @once_blocks[event]
41
+ @once_blocks.delete event
42
+ elsif !@on_blocks || !block = @on_blocks[event]
43
+ return
44
+ end
45
+ block.call *args
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,7 @@
1
+ # Author:: MinixLi (gmail: MinixLi1986)
2
+ # Homepage:: http://citrus.inspawn.com
3
+ # Date:: 16 July 2014
4
+
5
+ module Citrus
6
+ VERSION = '0.0.1'
7
+ end
metadata ADDED
@@ -0,0 +1,241 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pomelo-citrus
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - MinixLi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: digest-crc
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: eventmachine
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: websocket-eventmachine-server
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pomelo-citrus-admin
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pomelo-citrus-loader
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pomelo-citrus-logger
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pomelo-citrus-protobuf
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: pomelo-citrus-protocol
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: pomelo-citrus-rpc
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: pomelo-citrus-scheduler
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description: pomelo-citrus is a simple clone of pomelo, it provides a fast, scalable
154
+ and distributed game server framework for Ruby
155
+ email: MinixLi1986@gmail.com
156
+ executables: []
157
+ extensions: []
158
+ extra_rdoc_files: []
159
+ files:
160
+ - README.md
161
+ - Rakefile
162
+ - citrus.gemspec
163
+ - lib/citrus.rb
164
+ - lib/citrus/application.rb
165
+ - lib/citrus/citrus.rb
166
+ - lib/citrus/common/remote/backend/msg_remote.rb
167
+ - lib/citrus/common/remote/frontend/channel_remote.rb
168
+ - lib/citrus/common/remote/frontend/session_remote.rb
169
+ - lib/citrus/common/service/backend_session_service.rb
170
+ - lib/citrus/common/service/channel_service.rb
171
+ - lib/citrus/common/service/connection_service.rb
172
+ - lib/citrus/common/service/filter_service.rb
173
+ - lib/citrus/common/service/handler_service.rb
174
+ - lib/citrus/common/service/session_service.rb
175
+ - lib/citrus/components/backend_session.rb
176
+ - lib/citrus/components/channel.rb
177
+ - lib/citrus/components/component.rb
178
+ - lib/citrus/components/connection.rb
179
+ - lib/citrus/components/connector.rb
180
+ - lib/citrus/components/master.rb
181
+ - lib/citrus/components/monitor.rb
182
+ - lib/citrus/components/proxy.rb
183
+ - lib/citrus/components/push_scheduler.rb
184
+ - lib/citrus/components/remote.rb
185
+ - lib/citrus/components/server.rb
186
+ - lib/citrus/components/session.rb
187
+ - lib/citrus/connectors/commands/handshake.rb
188
+ - lib/citrus/connectors/commands/heartbeat.rb
189
+ - lib/citrus/connectors/commands/kick.rb
190
+ - lib/citrus/connectors/common/coder.rb
191
+ - lib/citrus/connectors/common/handler.rb
192
+ - lib/citrus/connectors/ws_connector.rb
193
+ - lib/citrus/connectors/ws_socket.rb
194
+ - lib/citrus/filters/handler/handler_filter.rb
195
+ - lib/citrus/filters/handler/too_busy.rb
196
+ - lib/citrus/filters/rpc/rpc_filter.rb
197
+ - lib/citrus/filters/rpc/too_busy.rb
198
+ - lib/citrus/master/master.rb
199
+ - lib/citrus/master/starter.rb
200
+ - lib/citrus/master/watchdog.rb
201
+ - lib/citrus/modules/console.rb
202
+ - lib/citrus/modules/console_module.rb
203
+ - lib/citrus/modules/master_watcher.rb
204
+ - lib/citrus/modules/monitor_watcher.rb
205
+ - lib/citrus/monitor/monitor.rb
206
+ - lib/citrus/push_schedulers/buffer.rb
207
+ - lib/citrus/push_schedulers/direct.rb
208
+ - lib/citrus/server/server.rb
209
+ - lib/citrus/util/app_util.rb
210
+ - lib/citrus/util/constants.rb
211
+ - lib/citrus/util/countdown_latch.rb
212
+ - lib/citrus/util/events.rb
213
+ - lib/citrus/util/module_util.rb
214
+ - lib/citrus/util/path_util.rb
215
+ - lib/citrus/util/utils.rb
216
+ - lib/citrus/version.rb
217
+ homepage: https://github.com/minixli/pomelo-citrus
218
+ licenses:
219
+ - MIT
220
+ metadata: {}
221
+ post_install_message:
222
+ rdoc_options: []
223
+ require_paths:
224
+ - lib
225
+ required_ruby_version: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ required_rubygems_version: !ruby/object:Gem::Requirement
231
+ requirements:
232
+ - - ">="
233
+ - !ruby/object:Gem::Version
234
+ version: '0'
235
+ requirements: []
236
+ rubyforge_project:
237
+ rubygems_version: 2.4.1
238
+ signing_key:
239
+ specification_version: 4
240
+ summary: pomelo clone written in Ruby using EventMachine
241
+ test_files: []