93 lines
3.7 KiB
CoffeeScript
Executable File
93 lines
3.7 KiB
CoffeeScript
Executable File
Meteor.methods
|
|
# meetingId: the id of the meeting
|
|
# chatObject: the object including info on the chat message, including the text
|
|
# requesterUserId: the userId of the user sending chat
|
|
# requesterToken: the authToken of the requester
|
|
sendChatMessagetoServer: (meetingId, chatObject, requesterUserId, requesterToken) ->
|
|
chatType = chatObject.chat_type
|
|
recipient = chatObject.to_userid
|
|
eventName = null
|
|
action = ->
|
|
if chatType is "PUBLIC_CHAT"
|
|
eventName = "send_public_chat_message_request"
|
|
return 'chatPublic'
|
|
else
|
|
eventName = "send_private_chat_message_request"
|
|
if recipient is requesterUserId
|
|
return 'chatSelf' #not allowed
|
|
else
|
|
return 'chatPrivate'
|
|
|
|
if isAllowedTo(action(), meetingId, requesterUserId, requesterToken) and chatObject.from_userid is requesterUserId
|
|
chatObject.message = translateHTML5ToFlash(chatObject.message)
|
|
message =
|
|
header :
|
|
timestamp: new Date().getTime()
|
|
name: eventName
|
|
payload:
|
|
message: chatObject
|
|
meeting_id: meetingId
|
|
requester_id: chatObject.from_userid
|
|
|
|
Meteor.log.info "publishing chat to redis"
|
|
publish Meteor.config.redis.channels.toBBBApps.chat, message
|
|
return
|
|
|
|
deletePrivateChatMessages: (userId, contact_id) ->
|
|
# if authorized pass through
|
|
requester = Meteor.Users.findOne({userId: userId})
|
|
contact = Meteor.Users.findOne({_id: contact_id})
|
|
deletePrivateChatMessages(requester.userId, contact.userId)
|
|
# --------------------------------------------------------------------------------------------
|
|
# Private methods on server
|
|
# --------------------------------------------------------------------------------------------
|
|
@addChatToCollection = (meetingId, messageObject) ->
|
|
# manually convert time from 1.408645053653E12 to 1408645053653 if necessary
|
|
# (this is the time_from that the Flash client outputs)
|
|
messageObject.from_time = (messageObject.from_time).toString().split('.').join("").split("E")[0]
|
|
|
|
if messageObject.from_userid? and messageObject.to_userid?
|
|
messageObject.message = translateFlashToHTML5(messageObject.message)
|
|
|
|
entry =
|
|
meetingId: meetingId
|
|
message:
|
|
chat_type: messageObject.chat_type
|
|
message: messageObject.message
|
|
to_username: messageObject.to_username
|
|
from_tz_offset: messageObject.from_tz_offset
|
|
from_color: messageObject.from_color
|
|
to_userid: messageObject.to_userid
|
|
from_userid: messageObject.from_userid
|
|
from_time: messageObject.from_time
|
|
from_username: messageObject.from_username
|
|
from_lang: messageObject.from_lang
|
|
|
|
id = Meteor.Chat.insert(entry)
|
|
Meteor.log.info "added chat id=[#{id}]:#{messageObject.message}." #" Chat.size is now #{Meteor.Chat.find({meetingId: meetingId}).count()}"
|
|
|
|
# called on server start and meeting end
|
|
@clearChatCollection = (meetingId) ->
|
|
if meetingId?
|
|
Meteor.Chat.remove({meetingId: meetingId}, Meteor.log.info "cleared Chat Collection (meetingId: #{meetingId}!")
|
|
else
|
|
Meteor.Chat.remove({}, Meteor.log.info "cleared Chat Collection (all meetings)!")
|
|
|
|
# --------------------------------------------------------------------------------------------
|
|
# end Private methods on server
|
|
# --------------------------------------------------------------------------------------------
|
|
|
|
# translate '\n' newline character and '\r' carriage returns to '<br/>' breakline character for Flash
|
|
@translateHTML5ToFlash = (message) ->
|
|
result = message
|
|
result = result.replace(new RegExp(CARRIAGE_RETURN, 'g'), BREAK_LINE)
|
|
result = result.replace(new RegExp(NEW_LINE, 'g'), BREAK_LINE)
|
|
result
|
|
|
|
# translate '<br/>' breakline character to '\r' carriage return character for HTML5
|
|
@translateFlashToHTML5 = (message) ->
|
|
result = message
|
|
result = result.replace(new RegExp(BREAK_LINE, 'g'), CARRIAGE_RETURN)
|
|
result
|
|
|