pomelo-citrus 0.0.1

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 (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: []