-vsn(3).
-define(EXCHANGE, <<"irc">>).
+-define(TIMEOUT, timer:seconds(30)).
-export([
- start_link/2,
+ start_link/3,
stop/1,
encode_routing_key/1,
decode_routing_key/1,
-include("irc_util.hrl").
-include_lib("amqp_client/include/amqp_client.hrl").
-start_link(ConnectionPid, RoutingKey) ->
- gen_server:start_link(?MODULE, {ConnectionPid, RoutingKey}, []).
+start_link(ConnectionPid, RoutingKey, TableId) ->
+ gen_server:start_link(?MODULE, {ConnectionPid, RoutingKey, TableId}, []).
-init({ConnectionPid, RoutingKey}) ->
+init({ConnectionPid, RoutingKey, TableId}) ->
process_flag(trap_exit, true),
+ rate_limit:wait_and_reset(TableId, irc_amqp_listener, ?TIMEOUT),
{ok, _, ListeningChannel} = amqp_bot_listener:listen_for_events(RoutingKey),
{ok, {ConnectionPid, ListeningChannel}}.
{ok, {RestartStrategy, Children}}.
add_amqp_listener(ObjectSup, ConnectionPid, RoutingKey) ->
+ TableId = rate_limit:create(),
Child = {"amqp_" ++ RoutingKey,
- {irc_amqp_listener, start_link, [ConnectionPid, RoutingKey]},
+ {irc_amqp_listener, start_link, [ConnectionPid, RoutingKey, TableId]},
transient,
200,
worker,