Class: Events::Subscribers::MessageBroadcaster

Inherits:
Object
  • Object
show all
Includes:
Events::Subscriber
Defined in:
lib/events/subscribers/message_broadcaster.rb

Overview

Broadcasts message lifecycle events to connected WebSocket clients via ActionCable. Subscribes to MessageCreated and MessageUpdated events.

Examples:

Registering at boot

Events::Bus.subscribe(Events::Subscribers::MessageBroadcaster.new) { |event|
  event[:name].start_with?("anima.message.")
}

Constant Summary collapse

ACTION_MAP =
{
  Events::MessageCreated::TYPE => "create",
  Events::MessageUpdated::TYPE => "update"
}.freeze

Instance Method Summary collapse

Instance Method Details

#emit(event) ⇒ Object

Parameters:

  • event (Hash)

    Rails.event notification hash



22
23
24
25
26
27
28
29
30
31
# File 'lib/events/subscribers/message_broadcaster.rb', line 22

def emit(event)
  message = event[:payload][:message]
  action = ACTION_MAP.fetch(event[:payload][:type])
  session = message.session
  broadcast_payload = message.payload.merge("id" => message.id, "action" => action)
  broadcast_payload["api_metrics"] = message.api_metrics if message.api_metrics.present?
  broadcast_payload["rendered"] = {session.view_mode => message.decorate.render(session.view_mode)}

  ActionCable.server.broadcast("session_#{message.session_id}", broadcast_payload)
end