Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
.Veneno.
wechaty
提交
d47c2fe6
W
wechaty
项目概览
.Veneno.
/
wechaty
与 Fork 源项目一致
Fork自
wechaty / wechaty
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
W
wechaty
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d47c2fe6
编写于
10月 06, 2016
作者:
Huan (李卓桓)
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
#32
fix Room MemberList refresh race condition
上级
ad87decd
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
49 addition
and
18 deletion
+49
-18
src/puppet-web/firer.js
src/puppet-web/firer.js
+49
-18
未找到文件。
src/puppet-web/firer.js
浏览文件 @
d47c2fe6
...
...
@@ -18,9 +18,10 @@
* here `this` is a PuppetWeb Instance
*
***************************************/
const
util
=
require
(
'
util
'
)
const
fs
=
require
(
'
fs
'
)
const
co
=
require
(
'
co
'
)
const
util
=
require
(
'
util
'
)
const
fs
=
require
(
'
fs
'
)
const
co
=
require
(
'
co
'
)
const
retryPromise
=
require
(
'
retry-promise
'
).
default
const
log
=
require
(
'
../brolog-env
'
)
const
Contact
=
require
(
'
../contact
'
)
...
...
@@ -49,7 +50,7 @@ const regexConfig = {
function
fireFriendRequest
(
m
)
{
const
info
=
m
.
rawObj
.
RecommendInfo
log
.
verbose
(
'
PuppetWeb
Event
'
,
'
fireFriendRequest(%s)
'
,
info
)
log
.
verbose
(
'
PuppetWeb
Firer
'
,
'
fireFriendRequest(%s)
'
,
info
)
const
request
=
new
FriendRequest
()
request
.
receive
(
info
)
...
...
@@ -70,7 +71,7 @@ function checkFriendConfirm(content) {
function
fireFriendConfirm
(
m
)
{
const
content
=
m
.
content
()
log
.
silly
(
'
PuppetWeb
Event
'
,
'
fireFriendConfirm(%s)
'
,
content
)
log
.
silly
(
'
PuppetWeb
Firer
'
,
'
fireFriendConfirm(%s)
'
,
content
)
if
(
!
checkFriendConfirm
(
content
))
{
return
...
...
@@ -116,25 +117,49 @@ function fireRoomJoin(m) {
let
inviterContact
,
inviteeContact
co
.
call
(
this
,
function
*
()
{
yield
room
.
refresh
()
yield
new
Promise
(
resolve
=>
{
setTimeout
(
_
=>
resolve
(),
1000
)
})
if
(
inviter
===
"
You've
"
)
{
inviterContact
=
Contact
.
load
(
this
.
userId
)
}
else
{
inviterContact
=
room
.
member
(
inviter
)
}
inviteeContact
=
room
.
member
(
invitee
)
const
max
=
15
const
backoff
=
100
// max = (2*totalTime/backoff) ^ (1/2)
// timeout = 11,250 for {max: 15, backoff: 100}
yield
retryPromise
({
max
:
max
,
backoff
:
backoff
},
attempt
=>
{
log
.
silly
(
'
PuppetWebFirer
'
,
'
fireRoomJoin() retryPromise() attempt %d
'
,
attempt
)
return
room
.
refresh
()
.
then
(
_
=>
{
log
.
silly
(
'
PuppetWebFirer
'
,
'
inviteeContact: %s, invitorContact: %s
'
,
inviteeContact
,
inviterContact
)
inviteeContact
||
(
inviteeContact
=
room
.
member
(
invitee
))
inviterContact
||
(
inviterContact
=
room
.
member
(
inviter
))
if
(
inviteeContact
&&
inviterContact
)
{
log
.
silly
(
'
PuppetWebFirer
'
,
'
resolve() inviteeContact: %s, invitorContact: %s
'
,
inviteeContact
,
inviterContact
)
return
Promise
.
resolve
()
}
else
{
log
.
silly
(
'
PuppetWebFirer
'
,
'
reject() inviteeContact: %s, invitorContact: %s
'
,
inviteeContact
,
inviterContact
)
return
Promise
.
reject
()
}
})
.
catch
(
e
=>
{
log
.
error
(
'
PuppetWebFirer
'
,
'
retryPromise() room.refresh() rejected: %s
'
,
e
.
stack
)
throw
e
})
})
.
catch
(
e
=>
{
/* fail safe */
})
if
(
!
inviterContact
||
!
inviteeContact
)
{
log
.
error
(
'
PuppetWeb
Event
'
,
'
inivter or invitee not found for %s, %s
'
,
inviter
.
name
(),
invitee
.
name
()
)
log
.
error
(
'
PuppetWeb
Firer
'
,
'
inivter or invitee not found for %s, %s
'
,
inviter
,
invitee
)
return
}
yield
inviteeContact
.
ready
()
yield
inviterContact
.
ready
()
room
.
emit
(
'
join
'
,
inviteeContact
,
inviterContact
)
}).
catch
(
e
=>
{
log
.
error
(
'
PuppetWebFirer
'
,
'
retryPromise() rejected: %s
'
,
e
.
stack
)
})
}
...
...
@@ -163,11 +188,17 @@ function fireRoomLeave(m) {
leaverContact
=
room
.
member
(
leaver
)
if
(
!
leaverContact
)
{
log
.
error
(
'
PuppetWeb
Event
'
,
'
leaver not found for %s
'
,
leaver
)
log
.
error
(
'
PuppetWeb
Firer
'
,
'
leaver not found for %s
'
,
leaver
)
return
}
room
.
emit
(
'
leave
'
,
leaverContact
)
room
.
refresh
()
co
.
call
(
this
,
function
*
()
{
yield
leaverContact
.
ready
()
room
.
emit
(
'
leave
'
,
leaverContact
)
room
.
refresh
()
}).
catch
(
e
=>
{
log
.
error
(
'
PuppetWebFirer
'
,
'
fireRoomLeave() co exception: %s
'
,
e
.
stack
)
})
}
module
.
exports
=
PuppetWebFirer
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录