function on_message()

in resources/prosody-plugins/mod_speakerstats_component.lua [32:107]


function on_message(event)
    
    if event.stanza.attr.type == "error" then
        return; 
    end

    local speakerStats
        = event.stanza:get_child('speakerstats', 'http://jitsi.org/jitmeet');
    if speakerStats then
        local roomAddress = speakerStats.attr.room;
        local room = get_room_from_jid(room_jid_match_rewrite(roomAddress));

        if not room then
            log("warn", "No room found %s", roomAddress);
            return false;
        end
        
        if not room.speakerStats then
            log("warn", "No speakerStats found for %s", roomAddress);
            return false;
        end

        local roomSpeakerStats = room.speakerStats;
        local from = event.stanza.attr.from;

        local occupant = room:get_occupant_by_real_jid(from);
        if not occupant then
            log("warn", "No occupant %s found for %s", from, roomAddress);
            return false;
        end

        local newDominantSpeaker = roomSpeakerStats[occupant.jid];
        local oldDominantSpeakerId = roomSpeakerStats['dominantSpeakerId'];

        if oldDominantSpeakerId then
            local oldDominantSpeaker = roomSpeakerStats[oldDominantSpeakerId];
            if oldDominantSpeaker then
                oldDominantSpeaker:setDominantSpeaker(false);
            end
        end

        if newDominantSpeaker then
            newDominantSpeaker:setDominantSpeaker(true);
        end

        room.speakerStats['dominantSpeakerId'] = occupant.jid;
    end

    local facialExpression = event.stanza:get_child('facialExpression', 'http://jitsi.org/jitmeet');

    if facialExpression then
        local roomAddress = facialExpression.attr.room;
        local room = get_room_from_jid(room_jid_match_rewrite(roomAddress));

        if not room then
            log("warn", "No room found %s", roomAddress);
            return false;
        end
         if not room.speakerStats then
            log("warn", "No speakerStats found for %s", roomAddress);
            return false;
        end
        local from = event.stanza.attr.from;

        local occupant = room:get_occupant_by_real_jid(from);
        if not occupant then
            log("warn", "No occupant %s found for %s", from, roomAddress);
            return false;
        end
        local facialExpressions = room.speakerStats[occupant.jid].facialExpressions;
        facialExpressions[facialExpression.attr.expression] = 
            facialExpressions[facialExpression.attr.expression] + tonumber(facialExpression.attr.duration);
    end

    return true
end