nw-skeleton

Source: app-wrapper/js/lib/main/mainMessageHandlers.js

/**
 * @fileOverview MainMessageHandlers class file
 * @author Dino Ivankov <dinoivankov@gmail.com>
 * @version 1.3.1
 */

const _ = require('lodash');
const MessageHandlersBase = require('./messageHandlersBase').MessageHandlersBase;

/**
 * A Utility class for handling main script messages
 *
 * @class
 * @extends {MessageHandlersBase}
 * @memberOf mainScript
 */
class MainMessageHandlers extends MessageHandlersBase {

    /**
     * Creates MainMessageHandlers instance
     *
     * @constructor
     * @return {MainMessageHandlers}              Instance of MainMessageHandlers class
     */
    constructor() {
        super();
        this.responseMessageIdentifier = 'messageResponse';
        return this;
    }

    /**
     * Returns this handlers instance method names
     *
     * @return {string[]} An array of method names
     */
    getMethodNames () {
        let superNames = super.getMethodNames();
        let methodNames = _.concat(superNames, Object.getOwnPropertyNames(MainMessageHandlers.prototype));
        return _.uniqWith(methodNames, _.isEqual);
    }

    /**
     * Simple ping handler - responds with 'pong' instruction
     *
     * @param  {string}     uuid        UUID of the message
     * @param  {Object}     messageData Data passed with message
     * @param  {Boolean}    simulate    Just simulate and return responseData, don't actually do or change anything
     * @return {undefined}
     */
    pingHandler (uuid, messageData, simulate) {
        let duration = 500;
        if (messageData.data && messageData.data.duration && _.isInteger(messageData.data.duration)){
            duration = messageData.data.duration;
        }
        let responseData = this.getResponseData(messageData);
        responseData.instruction = 'pong';
        responseData._result_ = true;
        setTimeout( () =>{
            return this.respond(responseData, simulate);
        }, duration);
    }

    /**
     * Logging handler - logs message data to console
     *
     * @param  {string}     uuid        UUID of the message
     * @param  {Object}     messageData Data passed with message
     * @param  {Boolean}    simulate    Just simulate and return responseData, don't actually do or change anything
     * @return {undefined}
     */
    logHandler (uuid, messageData, simulate) {
        let responseData = this.getResponseData(messageData);
        if (messageData && messageData.data){
            if (messageData.data.message){
                let type = messageData.data.type || 'info';
                let force = messageData.data.force || false;
                let forceToWindow = messageData.data.forceToWindow || false;
                if (!simulate){
                    this.log(messageData.data.message, type, messageData.data.data, force, forceToWindow);
                }
                responseData._result_ = true;
            } else {
                responseData._messages_.push({
                    message: 'Can not log message - no message supplied',
                    type: 'error',
                    data: []
                });
                responseData._missingParams_.push('data.message');
                responseData._result_ = false;
            }
        } else {
            responseData._messages_.push({
                message: 'Can not log message - no data supplied',
                type: 'error',
                data: []
            });
            responseData._missingParams_.push('data');
            responseData._result_ = false;
        }
        return this.respond(responseData, simulate);
    }

    /**
     * Property logging handler - logs mainScript property from message data to console
     *
     * @param  {string}     uuid        UUID of the message
     * @param  {Object}     messageData Data passed with message
     * @param  {Boolean}    simulate    Just simulate and return responseData, don't actually do or change anything
     * @return {undefined}
     */
    logMainScriptPropertyHandler (uuid, messageData, simulate) {
        let responseData = this.getResponseData(messageData);
        if (messageData.data && messageData.data.property) {
            let prop = _.get(mainScript, messageData.data.property);
            if (prop){
                let type = messageData.data.type || 'info';
                let force = messageData.data.force || false;
                let forceToWindow = messageData.data.forceToWindow || false;
                if (!simulate){
                    this.log(prop, type, messageData.data.data, force, forceToWindow);
                }
                responseData._result_ = true;
            } else {
                responseData._messages_.push({
                    message: 'Can not find mainScript property "{1}"',
                    type: 'error',
                    data: [messageData.data.property]
                });
                responseData._result_ = false;
            }
        } else {
            responseData._messages_.push({
                message: 'Can not find mainScript property - no property supplied',
                type: 'error',
                data: []
            });
            responseData._missingParams_.push('data.property');
            responseData._result_ = false;
        }
        return this.respond(responseData, simulate);
    }
}

exports.MainMessageHandlers = MainMessageHandlers;