SandboXP

Форк
0
/
bus.js 
103 строки · 1.8 Кб
1
"use strict";
2

3
var Bus = {};
4

5
/** @constructor */
6
function BusConnector()
7
{
8
    this.listeners = {};
9
    this.pair = undefined;
10
}
11

12
/**
13
 * @param {string} name
14
 * @param {function(?)} fn
15
 * @param {Object} this_value
16
 */
17
BusConnector.prototype.register = function(name, fn, this_value)
18
{
19
    var listeners = this.listeners[name];
20

21
    if(listeners === undefined)
22
    {
23
        listeners = this.listeners[name] = [];
24
    }
25

26
    listeners.push({
27
        fn: fn,
28
        this_value: this_value,
29
    });
30
};
31

32
/**
33
 * Unregister one message with the given name and callback
34
 *
35
 * @param {string} name
36
 * @param {function()} fn
37
 */
38
BusConnector.prototype.unregister = function(name, fn)
39
{
40
    var listeners = this.listeners[name];
41

42
    if(listeners === undefined)
43
    {
44
        return;
45
    }
46

47
    this.listeners[name] = listeners.filter(function(l)
48
    {
49
        return l.fn !== fn;
50
    });
51
};
52

53
/**
54
 * Send ("emit") a message
55
 *
56
 * @param {string} name
57
 * @param {*=} value
58
 * @param {*=} unused_transfer
59
 */
60
BusConnector.prototype.send = function(name, value, unused_transfer)
61
{
62
    if(!this.pair)
63
    {
64
        return;
65
    }
66

67
    var listeners = this.pair.listeners[name];
68

69
    if(listeners === undefined)
70
    {
71
        return;
72
    }
73

74
    for(var i = 0; i < listeners.length; i++)
75
    {
76
        var listener = listeners[i];
77
        listener.fn.call(listener.this_value, value);
78
    }
79
};
80

81
/**
82
 * Send a message, guaranteeing that it is received asynchronously
83
 *
84
 * @param {string} name
85
 * @param {Object=} value
86
 */
87
BusConnector.prototype.send_async = function(name, value)
88
{
89
    dbg_assert(arguments.length === 1 || arguments.length === 2);
90

91
    setTimeout(this.send.bind(this, name, value), 0);
92
};
93

94
Bus.create = function()
95
{
96
    var c0 = new BusConnector();
97
    var c1 = new BusConnector();
98

99
    c0.pair = c1;
100
    c1.pair = c0;
101

102
    return [c0, c1];
103
};
104

105

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.