qt.js 1.9 KB
Newer Older
Marek Kotewicz's avatar
Marek Kotewicz committed
1 2 3 4
/*
    This file is part of ethereum.js.

    ethereum.js is free software: you can redistribute it and/or modify
Marek Kotewicz's avatar
Marek Kotewicz committed
5
    it under the terms of the GNU Lesser General Public License as published by
Marek Kotewicz's avatar
Marek Kotewicz committed
6 7 8 9 10 11
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    ethereum.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Marek Kotewicz's avatar
Marek Kotewicz committed
12
    GNU Lesser General Public License for more details.
Marek Kotewicz's avatar
Marek Kotewicz committed
13

Marek Kotewicz's avatar
Marek Kotewicz committed
14
    You should have received a copy of the GNU Lesser General Public License
Marek Kotewicz's avatar
Marek Kotewicz committed
15 16
    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
*/
Marek Kotewicz's avatar
Marek Kotewicz committed
17
/** @file qt.js
Marek Kotewicz's avatar
Marek Kotewicz committed
18
 * @authors:
Marek Kotewicz's avatar
Marek Kotewicz committed
19
 *   Jeffrey Wilcke <jeff@ethdev.com>
Marek Kotewicz's avatar
Marek Kotewicz committed
20 21 22 23
 *   Marek Kotewicz <marek@ethdev.com>
 * @date 2014
 */

Marek Kotewicz's avatar
Marek Kotewicz committed
24 25 26 27 28
/**
 * QtProvider object prototype is implementing 'provider protocol'
 * Should be used inside ethereum browser. It's compatible with cpp and go clients.
 * It uses navigator.qt object to pass the messages to native bindings
 */
Marek Kotewicz's avatar
Marek Kotewicz committed
29 30
var QtProvider = function() {
    this.handlers = [];
Marian Oancea's avatar
Marian Oancea committed
31

Marek Kotewicz's avatar
Marek Kotewicz committed
32 33 34 35 36
    var self = this;
    navigator.qt.onmessage = function (message) {
        self.handlers.forEach(function (handler) {
            handler.call(self, JSON.parse(message.data));
        });
37
    };
Marek Kotewicz's avatar
Marek Kotewicz committed
38
};
39

Marek Kotewicz's avatar
Marek Kotewicz committed
40 41 42 43 44
/// Prototype object method
/// Should be called when we want to send single api request to native bindings
/// Asynchronous
/// Response will be received by navigator.qt.onmessage method and passed to handlers
/// @param payload is inner message object
Marek Kotewicz's avatar
Marek Kotewicz committed
45 46 47
QtProvider.prototype.send = function(payload) {
    navigator.qt.postMessage(JSON.stringify(payload));
};
obscuren's avatar
obscuren committed
48

Marek Kotewicz's avatar
Marek Kotewicz committed
49 50
/// Prototype object property
/// Should be used to set message handlers for this provider
Marek Kotewicz's avatar
Marek Kotewicz committed
51 52 53 54 55
Object.defineProperty(QtProvider.prototype, "onmessage", {
    set: function(handler) {
        this.handlers.push(handler);
    }
});
56

Marian Oancea's avatar
Marian Oancea committed
57
module.exports = QtProvider;