module JamRuby class ChatMessage < ActiveRecord::Base include HtmlSanitize html_sanitize strict: [:message] self.table_name = 'chat_messages' self.primary_key = 'id' default_scope order('created_at DESC') attr_accessible :user_id, :message, :music_session_id belongs_to :user belongs_to :music_session validates :user, presence: true validates :message, length: {minimum: 1, maximum: 255}, no_profanity: true class << self @@mq_router = MQRouter.new @@message_factory = MessageFactory.new def index(user, params = {}) limit = params[:limit] limit ||= 20 limit = limit.to_i start = params[:start].presence start = start.to_i || 0 query = ChatMessage.where('channel = ?', params[:channel]) if params.has_key? (:music_session) music_session_id = params[:music_session] query = ChatMessage.where('music_session_id = ?', music_session_id) end query = query.offset(start).limit(limit).order('created_at DESC') if query.length == 0 [query, nil] elsif query.length < limit [query, nil] else [query, start + limit] end end def send_chat_msg(music_session, chat_msg, user, client_id, channel) music_session_id = music_session.id if music_session msg = @@message_factory.chat_message( music_session_id, user.name, user.id, chat_msg.message, chat_msg.id, chat_msg.created_at.utc.iso8601, channel ) if channel == 'session' @@mq_router.server_publish_to_session(music_session, msg, sender = {:client_id => client_id}) elsif channel == 'global' @@mq_router.publish_to_active_clients(msg) end end end end end