From: Alexey Shchepin Date: Sun, 27 Apr 2008 19:06:34 +0000 (+0000) Subject: * src/mod_muc/mod_muc_room.erl: Fixed room shaper processing X-Git-Tag: v2.1.0~18^2~724 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=85d3b27d7158775c54734175e43a331cf230d26a;p=ejabberd * src/mod_muc/mod_muc_room.erl: Fixed room shaper processing SVN Revision: 1305 --- diff --git a/ChangeLog b/ChangeLog index 425f895b7..48e89305a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2008-04-27 Alexey Shchepin + + * src/mod_muc/mod_muc_room.erl: Fixed room shaper processing + 2008-04-26 Badlop * src/mod_shared_roster.erl: Fix for new registered accounts not diff --git a/src/mod_muc/mod_muc_room.erl b/src/mod_muc/mod_muc_room.erl index 10b7d8a75..592844dcd 100644 --- a/src/mod_muc/mod_muc_room.erl +++ b/src/mod_muc/mod_muc_room.erl @@ -694,31 +694,27 @@ code_change(_OldVsn, StateName, StateData, _Extra) -> %% {stop, Reason, NewStateData} %%---------------------------------------------------------------------- handle_info({process_user_presence, From}, normal_state = _StateName, StateData) -> - Activity = get_user_activity(From, StateData), - Now = now_to_usec(now()), - {Nick, Packet} = Activity#activity.presence, - NewActivity = Activity#activity{presence_time = Now, - presence = undefined}, - StateData1 = - StateData#state{ - activity = ?DICT:store( - jlib:jid_tolower(From), - NewActivity, - StateData#state.activity)}, - process_presence(From, Nick, Packet, StateData1); + RoomQueueEmpty = queue:is_empty(StateData#state.room_queue), + RoomQueue = queue:in({presence, From}, StateData#state.room_queue), + StateData1 = StateData#state{room_queue = RoomQueue}, + if + RoomQueueEmpty -> + StateData2 = prepare_room_queue(StateData1), + {next_state, normal_state, StateData2}; + true -> + {next_state, normal_state, StateData1} + end; handle_info({process_user_message, From}, normal_state = _StateName, StateData) -> - Activity = get_user_activity(From, StateData), - Now = now_to_usec(now()), - Packet = Activity#activity.message, - NewActivity = Activity#activity{message_time = Now, - message = undefined}, - StateData1 = - StateData#state{ - activity = ?DICT:store( - jlib:jid_tolower(From), - NewActivity, - StateData#state.activity)}, - process_groupchat_message(From, Packet, StateData1); + RoomQueueEmpty = queue:is_empty(StateData#state.room_queue), + RoomQueue = queue:in({message, From}, StateData#state.room_queue), + StateData1 = StateData#state{room_queue = RoomQueue}, + if + RoomQueueEmpty -> + StateData2 = prepare_room_queue(StateData1), + {next_state, normal_state, StateData2}; + true -> + {next_state, normal_state, StateData1} + end; handle_info(process_room_queue, normal_state = StateName, StateData) -> case queue:out(StateData#state.room_queue) of {{value, {message, From}}, RoomQueue} ->