Source: directives/mensageria/chat-grupo/chat-grupo.service.js

/**
 * @ngdoc directives
 * @name MensageriaChatGrupo
 * @module s4c.directives.mensageria.chatgrupo.MensageriaChatGrupoService
 *
 * @description
 * `MensageriaChatGrupoService` Componente para acesso ao api do backend e/ou comunicação entre controllers
 * 
 * 
 */
(function () {
    angular.module('s4c.components.collaboration')
        .factory('MensageriaChatGrupo', MensageriaChatGrupo);

    MensageriaChatGrupo.$inject = [
        'MensageriaService',
        'CommService'
    ];

    function MensageriaChatGrupo(MensageriaService, CommService) {
        var service = {
            on: on,
            trigger: trigger,
            _eventos: {
                'novaMensagem': [],
                'updateFotoGrupo': [],
                'grupoRemovido': [],
                'usuarioRemovido': [],
                'mensagemApagada': []
            },
            enviarMensagem: enviarMensagem
        };

        CommService.on('updateFotoGrupo', function (data) {
            service.trigger('updateFotoGrupo', data);
        });

        CommService.on('mensagemGrupo', function (data) {
            // Não notificar quando o usuário está com a janela aberta:
            trigger('novaMensagem', data);
        });

        CommService.on('grupoRemovido', function (data) {
            // Não notificar quando o usuário está com a janela aberta:
            trigger('grupoRemovido', data);
        });

        CommService.on('usuarioRemovido', function (data) {
            trigger('usuarioRemovido', data);
        });

        function on(nomeEvento, callback) {
            service._eventos[nomeEvento].push(callback);
        }

        function trigger(nomeEvento, args) {
            _.each(service._eventos[nomeEvento], function (callback) {
                callback(args);
            });
        }

        /**
         * @method
         * 
         * @param {*} grupo 
         * @param {*} mensagem 
         * 
         */
        function enviarMensagem(grupo, mensagem) {

            MensageriaService.enviarMensagemGrupoUsuario(grupo.id, mensagem).then(function (resultado) {
                service.trigger('novaMensagem', resultado);
            });
        }

        return service;
    }
}());