API Docs for:
Show:

File: /home/padewitte/projets/webcomponents/myscript-js/src/networking/networkWSInterface.js

'use strict';
/* jshint ignore:start */

(function (scope, Q) {
    /**
     * Network interface
     *
     * @class NetworkWSInterface
     * @constructor
     */
    function NetworkWSInterface() {
    }

    NetworkWSInterface.prototype.setUrl = function (url) {
        if ((url !== undefined) && (url !== this._url)) {
            this.close();
            this._url = url;
        }
    };

    NetworkWSInterface.prototype.getUrl = function () {
        return this._url;
    };

    NetworkWSInterface.prototype.setCallback = function (callback) {
        if (callback !== undefined) {
            this.close();
            this._callback = callback;
        }
    };

    NetworkWSInterface.prototype.getCallback = function () {
        return this._callback;
    };

    NetworkWSInterface.prototype.getState = function () {
        return _getWebSocketState(this._socket);
    };

    NetworkWSInterface.prototype.isClosed = function () {
        return this.getState() === 3;
    };

    NetworkWSInterface.prototype.isClosing = function () {
        return this.getState() === 2;
    };

    NetworkWSInterface.prototype.isOpen = function () {
        return this.getState() === 1;
    };

    NetworkWSInterface.prototype.isConnecting = function () {
        return this.getState() === 0;
    };

    NetworkWSInterface.prototype.open = function () {
        if (this.getUrl() && this.getCallback() && ((this.getState() < 0) || this.isClosed())) {
            this._socket = _openWebSocket(this.getUrl(), this.getCallback());
        }
    };

    NetworkWSInterface.prototype.close = function (code, reason) {
        if (this.getState() < 2) {
            _closeWebSocket(this._socket, code, reason);
        }
    };

    NetworkWSInterface.prototype.send = function (request) {
        var state = _getWebSocketState(this._socket);
        if (state  === 1) {
            _sendMessage(this._socket, request);
        } else {
            this.open();
        }
    };

    /**
     *
     * @param url
     * @param callback
     * @returns {WebSocket}
     * @private
     */
    var _openWebSocket = function (url, callback) {
        function onOpen(e) {
            callback(e);
        }
        function onClose(e) {
            callback(e);
        }
        function onError(e) {
            callback(e);
        }
        function onMessage(e) {
            callback({
                type: e.type,
                data: JSON.parse(e.data)
            });
        }

        var socket = new WebSocket(url);
        socket.onopen = onOpen;
        socket.onclose = onClose;
        socket.onerror = onError;
        socket.onmessage = onMessage;
        return socket;
    };

    /**
     *
     * @param socket
     * @param code
     * @param reason
     * @private
     */
    var _closeWebSocket = function (socket, code, reason) {
        if (socket) {
            socket.close(code, reason);
        }
    };

    /**
     *
     * @param socket
     * @returns {*}
     * @private
     */
    var _getWebSocketState = function (socket) {
        if (socket) {
            return socket.readyState;
        }
        return -1;
    };

    /**
     *
     * @param socket
     * @param message
     * @private
     */
    var _sendMessage = function (socket, message) {
        if (socket) {
            socket.send(JSON.stringify(message));
        }
    };

    // Export
    scope.NetworkWSInterface = NetworkWSInterface;
})(MyScript, Q);
/* jshint ignore:end */