提交 ad87decd 编写于 作者: Huan (李卓桓)'s avatar Huan (李卓桓)

#32 Room Event: `join` & `leave`

上级 12a81eb8
......@@ -336,52 +336,56 @@ function onServerLogout(data) {
function onServerMessage(data) {
let m = new Message(data)
/**
* Fire Events if match message type & content
*/
switch (m.type()) { // data.MsgType
case Message.Type.VERIFYMSG:
Firer.fireFriendRequest.call(this, m)
break
case Message.Type.SYS:
if (m.room()) {
Firer.fireRoomJoin.call(this, m)
Firer.fireRoomLeave.call(this, m)
} else {
Firer.fireFriendConfirm.call(this, m)
}
break
}
/**
* Check Type for special Message
* reload if needed
*/
switch (m.type()) {
case Message.Type.IMAGE:
// log.verbose('PuppetWebEvent', 'onServerMessage() IMAGE message')
m = new MediaMessage(data)
break
}
co.call(this, function* () {
yield m.ready()
// To Be Deleted: set self...
if (this.userId) {
m.set('self', this.userId)
} else {
log.warn('PuppetWebEvent', 'onServerMessage() without this.userId')
}
/**
* Fire Events if match message type & content
*/
switch (m.type()) { // data.MsgType
case Message.Type.VERIFYMSG:
Firer.fireFriendRequest.call(this, m)
break
case Message.Type.SYS:
if (m.room()) {
Firer.fireRoomJoin.call(this, m)
Firer.fireRoomLeave.call(this, m)
} else {
Firer.fireFriendConfirm.call(this, m)
}
break
}
m.ready() // TODO: EventEmitter2 for video/audio/app/sys....
.then(_ => this.emit('message', m))
.catch(e => {
log.error('PuppetWebEvent', 'onServerMessage() message ready exception: %s', e)
// console.log(e)
/**
* FIXME: add retry here...
* setTimeout(onServerMessage.bind(this, data, ++attempt), 1000)
* Check Type for special Message
* reload if needed
*/
switch (m.type()) {
case Message.Type.IMAGE:
// log.verbose('PuppetWebEvent', 'onServerMessage() IMAGE message')
m = new MediaMessage(data)
break
}
// To Be Deleted: set self...
if (this.userId) {
m.set('self', this.userId)
} else {
log.warn('PuppetWebEvent', 'onServerMessage() without this.userId')
}
m.ready() // TODO: EventEmitter2 for video/audio/app/sys....
.then(_ => this.emit('message', m))
.catch(e => {
log.error('PuppetWebEvent', 'onServerMessage() message ready exception: %s', e)
// console.log(e)
/**
* FIXME: add retry here...
* setTimeout(onServerMessage.bind(this, data, ++attempt), 1000)
*/
})
})
}
......
......@@ -115,19 +115,27 @@ function fireRoomJoin(m) {
let inviterContact, inviteeContact
if (inviter === "You've") {
inviterContact = Contact.load(this.userId)
} else {
inviterContact = room.member(inviter)
}
inviteeContact = room.member(invitee)
if (!inviterContact || !inviteeContact) {
log.error('PuppetWebEvent', 'inivter or invitee not found for %s, %s', inviter, invitee)
return
}
room.emit('join', inviteeContact, inviterContact)
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)
if (!inviterContact || !inviteeContact) {
log.error('PuppetWebEvent', 'inivter or invitee not found for %s, %s', inviter.name(), invitee.name())
return
}
room.emit('join', inviteeContact, inviterContact)
})
}
function checkRoomLeave(content) {
......@@ -151,6 +159,7 @@ function fireRoomLeave(m) {
}
const room = m.room()
leaverContact = room.member(leaver)
if (!leaverContact) {
......@@ -158,6 +167,7 @@ function fireRoomLeave(m) {
return
}
room.emit('leave', leaverContact)
room.refresh()
}
module.exports = PuppetWebFirer
......@@ -214,12 +214,18 @@ class Room extends EventEmitter{
}
member(name) {
log.verbose('Room', 'member(%s)', name)
if (!this.obj.memberList) {
log.warn('Room', 'member() not ready')
return null
}
const nickMap = this.obj.nickMap
const idList = Object.keys(nickMap)
.filter(k => nickMap[k] === name)
log.silly('Room', 'member() check nickMap: %s', JSON.stringify(nickMap))
if (idList.length) {
return Contact.load(idList[0])
} else {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册