Skip to content
Snippets Groups Projects
Select Git revision
  • c4609b938ad0ec3f7027782e397fd4c0d454c1dd
  • master default protected
2 results

main.js

Blame
  • main.js 3.08 KiB
    var wsUrl = 'ws://' + document.location.host + '/ws';
    
    var settings = {
        brightness: 0,
        interval: 0,
    };
    
    $(document).ready(function () {
        uiEnabled(false);
        $("#wsMessages, #prompt").val("");
        startSocket();
    });
    
    $(document).on('change', '.rangeSetting', function () {
        var setting = $(this).data('name');
        var value = $(this).val();
        switch (setting) {
            case 'brightness':
                value = mapRange(value, 1, 100, 8, 255);
                break;
            case 'interval':
                value = mapRange(value, 1, 100, 1000, 10);
                break;
        }
        settings[setting] = value;
        var payload = {
            'settings': settings
        };
        wsSend(payload);
    });
    
    $('.btnAction').on('click', function () {
        var action = $(this).data('action');
        sendAction(action);
    });
    
    $("#prompt").on('keydown', function (e) {
        if (e.keyCode == 13 && $("#prompt").val() != "") {
            var val = $("#prompt").val();
            wsSend(JSON.parse(val));
            $("#prompt").val("");
        }
    });
    
    function uiEnabled(enabled) {
        if (enabled) {
            $('#spinner').addClass('invisible');
            $('.btnAction').prop('disabled', false);
            $('.rangeSetting').prop('disabled', false);
        } else {
            $('#spinner').removeClass('invisible');
            $('.btnAction').prop('disabled', true);
            $('.rangeSetting').prop('disabled', true);
        }
    }
    
    function addMessage(msg) {
        var txt = $("#wsMessages");
        txt.val($.trim(txt.val() + "\n" + msg));
        txt.scrollTop(txt[0].scrollHeight - txt.height());
    }
    
    function wsSend(obj) {
        ws.send(obj).done(function () {
            addMessage("➡️ " + JSON.stringify(obj));
        }).fail(function (e) {
            addMessage("❗️ " + JSON.stringify(obj));
        });
    }
    
    var ws;
    function startSocket() {
        ws = $.simpleWebSocket({
            url: wsUrl,
            timeout: 5000,
            onOpen: function (e) {
                ws.isConnected(function (connected) {
                    console.log("WS: connected");
                    addMessage("✅ connected");
                    sendAction('getSettings');
                });
            },
            onClose: function (e) {
                uiEnabled(false);
                console.log("WS: disconnected");
                addMessage("❌ disconnected");
            },
            onError: function (e) {
                uiEnabled(false);
                console.log("WS: error");
                addMessage("❗️ error");
            },
        });
    
        ws.listen(function (data) {
            addMessage("⬅️ " + JSON.stringify(data));
            if (data.settings) {
                loadSettings(data.settings);
            }
        });
    }
    
    function sendAction(action) {
        var payload = {
            'action': action
        };
        wsSend(payload);
    }
    
    function loadSettings(data) {
        settings.brightness = data.brightness;
        settings.interval = data.interval;
        uiEnabled(true);
        $('#rangeBrightness').val(mapRange(data.brightness, 8, 255, 1, 100));
        $('#rangeSpeed').val(mapRange(data.interval, 1000, 10, 1, 100));
        sendAction('getHighscores');
    }
    
    function mapRange(number, inMin, inMax, outMin, outMax) {
        return Math.round((number - inMin) * (outMax - outMin) / (inMax - inMin) + outMin);
    }