Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
e04c95e5
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
e04c95e5
编写于
7月 06, 2015
作者:
D
David Heinemeier Hansson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Extract periodic timers concern
上级
53c4b416
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
42 addition
and
24 deletion
+42
-24
lib/action_cable/channel.rb
lib/action_cable/channel.rb
+2
-1
lib/action_cable/channel/base.rb
lib/action_cable/channel/base.rb
+1
-17
lib/action_cable/channel/callbacks.rb
lib/action_cable/channel/callbacks.rb
+1
-6
lib/action_cable/channel/periodic_timers.rb
lib/action_cable/channel/periodic_timers.rb
+38
-0
未找到文件。
lib/action_cable/channel.rb
浏览文件 @
e04c95e5
module
ActionCable
module
Channel
autoload
:Base
,
'action_cable/channel/base'
autoload
:Callbacks
,
'action_cable/channel/callbacks'
autoload
:PeriodicTimers
,
'action_cable/channel/periodic_timers'
autoload
:Streams
,
'action_cable/channel/streams'
autoload
:Base
,
'action_cable/channel/base'
end
end
lib/action_cable/channel/base.rb
浏览文件 @
e04c95e5
...
...
@@ -2,14 +2,12 @@ module ActionCable
module
Channel
class
Base
include
Callbacks
include
PeriodicTimers
include
Streams
on_subscribe
:connect
on_unsubscribe
:disconnect
on_subscribe
:start_periodic_timers
on_unsubscribe
:stop_periodic_timers
attr_reader
:params
,
:connection
delegate
:logger
,
to: :connection
...
...
@@ -22,7 +20,6 @@ def matches?(identifier)
def
initialize
(
connection
,
channel_identifier
,
params
=
{})
@connection
=
connection
@channel_identifier
=
channel_identifier
@_active_periodic_timers
=
[]
@params
=
params
perform_connection
...
...
@@ -115,19 +112,6 @@ def run_unsubscribe_callbacks
end
def
start_periodic_timers
self
.
class
.
periodic_timers
.
each
do
|
callback
,
options
|
@_active_periodic_timers
<<
EventMachine
::
PeriodicTimer
.
new
(
options
[
:every
])
do
worker_pool
.
async
.
run_periodic_timer
(
self
,
callback
)
end
end
end
def
stop_periodic_timers
@_active_periodic_timers
.
each
{
|
timer
|
timer
.
cancel
}
end
def
worker_pool
connection
.
worker_pool
end
...
...
lib/action_cable/channel/callbacks.rb
浏览文件 @
e04c95e5
...
...
@@ -4,11 +4,10 @@ module Callbacks
extend
ActiveSupport
::
Concern
included
do
class_attribute
:on_subscribe_callbacks
,
:on_unsubscribe_callbacks
,
:
periodic_timers
,
:
instance_reader
=>
false
class_attribute
:on_subscribe_callbacks
,
:on_unsubscribe_callbacks
,
:instance_reader
=>
false
self
.
on_subscribe_callbacks
=
[]
self
.
on_unsubscribe_callbacks
=
[]
self
.
periodic_timers
=
[]
end
module
ClassMethods
...
...
@@ -19,10 +18,6 @@ def on_subscribe(*methods)
def
on_unsubscribe
(
*
methods
)
self
.
on_unsubscribe_callbacks
+=
methods
end
def
periodically
(
callback
,
every
:)
self
.
periodic_timers
+=
[
[
callback
,
every:
every
]
]
end
end
end
end
...
...
lib/action_cable/channel/periodic_timers.rb
0 → 100644
浏览文件 @
e04c95e5
module
ActionCable
module
Channel
module
PeriodicTimers
extend
ActiveSupport
::
Concern
included
do
class_attribute
:periodic_timers
,
instance_reader:
false
self
.
periodic_timers
=
[]
on_subscribe
:start_periodic_timers
on_unsubscribe
:stop_periodic_timers
end
module
ClassMethods
def
periodically
(
callback
,
every
:)
self
.
periodic_timers
+=
[
[
callback
,
every:
every
]
]
end
end
private
def
active_periodic_timers
@active_periodic_timers
||=
[]
end
def
start_periodic_timers
self
.
class
.
periodic_timers
.
each
do
|
callback
,
options
|
active_periodic_timers
<<
EventMachine
::
PeriodicTimer
.
new
(
options
[
:every
])
do
worker_pool
.
async
.
run_periodic_timer
(
self
,
callback
)
end
end
end
def
stop_periodic_timers
active_periodic_timers
.
each
{
|
timer
|
timer
.
cancel
}
end
end
end
end
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录