summaryrefslogtreecommitdiff
path: root/src/client/rz_mesh.js
blob: 0d8f0478be1664b320adeee5f92239ebb5103dd7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
"use strict"

/**
 * Manage backend websocket connection
 */
define([ 'rz_config', 'util', 'model/diff', 'socketio'], function(rz_config, util, model_diff, io) {

    var ws_server_url = 'http://' + rz_config.rz_server_host + ':'
                        + rz_config.rz_server_port
                        + '/graph'; // socketio namespace

    var rz_mesh_graph_ref;

    /**
     * @param init_spec: expected to contain a graph:graph mapping
     */
    function init(init_spec) {

        var socket = io.connect(ws_server_url, {
            'reconnectionDelay': 3000,
        });

        util.assert(undefined != init_spec.graph, 'unable to init ws connection, graph undefined');
        rz_mesh_graph_ref = init_spec.graph;

        // wire up event handlers
        socket.on('connect', on_connect);
        socket.on('disconnect', on_disconnect);
        socket.on('error', on_error);
        socket.on('diff_commit__topo', diff_merge__topo);
        socket.on('diff_commit__attr', diff_merge__attr);
    }

    function on_connect() {
        console.log('ws: connection established: endpoint: ' + ws_server_url);
    }

    function on_disconnect() {
        // TODO: call when possible
    }

    function on_error(err) {
        console.log('ws: error: ' + err);
    }

    function diff_merge__topo(topo_diff_raw) {
        console.log('ws: rx: diff_merge__topo');
        var topo_diff_json = JSON.parse(topo_diff_raw);
        var topo_diff = model_diff.new_topo_diff(topo_diff_json);
        rz_mesh_graph_ref.commit_diff__topo(topo_diff);
    }

    function diff_merge__attr(attr_diff_raw) {
        console.log('ws: rx: diff_merge__attr');
        var attr_diff_json = JSON.parse(attr_diff_raw);
        var attr_diff = model_diff.new_attr_diff(attr_diff_json);
        rz_mesh_graph_ref.commit_diff__attr(attr_diff);
    }

    return {
        init : init
    };

});