diff options
Diffstat (limited to 'src/BeerDuke.js')
-rw-r--r-- | src/BeerDuke.js | 287 |
1 files changed, 156 insertions, 131 deletions
diff --git a/src/BeerDuke.js b/src/BeerDuke.js index 82f37c2..6f88016 100644 --- a/src/BeerDuke.js +++ b/src/BeerDuke.js @@ -1,166 +1,191 @@ -import angular from 'angular'; +(function () { + 'use strict'; -class SettingsController { - constructor(BeerDukeSettings) { - this.settings = BeerDukeSettings; - } -} + function SettingsController($log, $location, BeerDukeSettings) { + var ctrl = this; -class BeerDukeSettings { - constructor() { - this.clientId = BeerDukeSettings.load('clientId') || 'beer-duke-' + Math.round(Math.random() * 100000); - console.log('this =', this); - this.showSettings = BeerDukeSettings.load('showSettings') == 'true' || false; - } + ctrl.clientId = BeerDukeSettings.clientId(); + ctrl.showSettings = BeerDukeSettings.showSettings(); - save() { - BeerDukeSettings.store('clientId', clientId); - BeerDukeSettings.store('showSettings', showSettings); - } + ctrl.save = function () { + BeerDukeSettings.clientId(ctrl.clientId); + BeerDukeSettings.showSettings(ctrl.showSettings); + BeerDukeSettings.save(); - static store(key, value) { - window.localStorage[key] = angular.toJson(value); - return value; + $location.path('/') + } } - static load(key) { - let x = window.localStorage[key]; - console.log('key =', key, 'x =', x); - return angular.fromJson(x); - } -} + function BeerDukeSettings() { -class BeerDukeService { - constructor($timeout, $rootScope, BeerDukeSettings) { - this.$timeout = $timeout; - this.$rootScope = $rootScope; + function save() { + store('clientId', clientId_); + store('showSettings', showSettings_); + } - this.connected_ = false; - this.messages = []; - } + function store(key, value) { + window.localStorage[key] = angular.toJson(value); + return value; + } - static xxx() { - return new BeerDukeSettings(); - } + function load(key) { + var x = window.localStorage[key]; + if (typeof x === 'undefined') { + return x; + } - connect(type, opts) { - this.opts = opts || {}; - - console.log('BeerDukeSettings =', BeerDukeSettings); - let clientId = BeerDukeSettings.clientId + "-" + type; - console.log('clientId =', clientId); - let client = new Paho.MQTT.Client("wss://trygvis.io:9001/", clientId); - client.onConnectionLost = (a) => { - this.$timeout(() => { - this.$rootScope.$apply(() => { - this.onConnectionLost(a); - }) - }); - }; - client.onMessageArrived = (a) => { - this.$timeout(() => { - this.$rootScope.$apply(() => { - this.onMessageArrived(a); - }) - }); - }; + return angular.fromJson(x); + } - this.client = client; + var clientId_ = load('clientId') || 'beer-duke-' + Math.round(Math.random() * 100000); + var showSettings_ = load('showSettings') || false; + save(); - this.client.connect({ - onSuccess: () => { - this.$timeout(() => { - this.$rootScope.$apply(() => { - this.onConnect(); - }) - }); + function clientId(x) { + if (x) { + clientId_ = x; } - }); - } + return clientId_; + } - get connected() { - return this.connected_; + function showSettings(x) { + if (x) { + showSettings_ = x; + } + return showSettings_; + } + + return { + clientId: clientId, + showSettings: showSettings, + load: load, + save: save + } } - onConnect() { - console.log('Connected'); + function BeerDukeService($log, $timeout, $rootScope, BeerDukeSettings) { + var self = this; + var connected_ = false; + var messages = []; + var callbacks = {}; + + function connect(type) { + var clientId = BeerDukeSettings.clientId() + "-" + type; + var client = new Paho.MQTT.Client("wss://trygvis.io:9001/", clientId); + client.onConnectionLost = function (a) { + $timeout(function () { + $rootScope.$apply(function () { + onConnectionLost(a); + }) + }); + }; + client.onMessageArrived = function () { + var args = arguments; + $timeout(function () { + $rootScope.$apply(function () { + onMessageArrived.apply(self, args); + }) + }); + }; + + self.client = client; + + self.client.connect({ + onSuccess: function () { + var args = arguments; + $timeout(function () { + $rootScope.$apply(function () { + onConnect.apply(self, args); + }) + }); + } + }); + } - this.connected_ = true; + function subscribe(name) { + return self.client.subscribe(name); + } - if (this.opts.onConnect) { - try { - this.opts.onConnect(); - } catch (e) { - } + function connected() { + return self.connected_; } - //this.client.subscribe("/beer-duke"); - } + function onConnect() { + $log.info('Connected'); - onConnectionLost(responseObject) { - this.connected_ = false; + self.connected_ = true; - //if (responseObject.errorCode !== 0) - console.log("onConnectionLost:", responseObject); - console.log("onConnectionLost:", responseObject.errorMessage); - } + invoke('onConnect'); + } - onMessageArrived(message) { - console.log("onMessageArrived:" + message.payloadString); + function invoke(name, args) { + var fn = callbacks[name]; - this.messages.push(message); + if (typeof fn === 'function') { + try { + return fn.apply(undefined, args); + } catch (e) { + $log.warn('exception calling ' + name, e); + } + } + } + + function onConnectionLost(responseObject) { + self.connected_ = false; - if (this.opts.onMessageArrived) { + //if (responseObject.errorCode !== 0) + $log.warn("onConnectionLost:", responseObject); + $log.warn("onConnectionLost:", responseObject.errorMessage); + } + + function onMessageArrived(message) { + messages.push(message); try { - let m = angular.fromJson(message); - this.opts.onMessageArrived(m); + var m = angular.fromJson(message); + invoke('onMessageArrived', [m]); } catch (e) { + $log.warn('could not parse json', e); } } - } - requestBeer(code) { - let message = new Paho.MQTT.Message(angular.toJson({code: code})); - message.destinationName = "/beer-duke"; - this.client.send(message); + function submit(destination, payload) { + var message = new Paho.MQTT.Message(angular.toJson(payload)); + message.destinationName = destination; + self.client.send(message); + } + + return { + messages: messages, + submit: submit, + connect: connect, + subscribe: subscribe, + connected: connected, + callbacks: callbacks + } } -} -class MqttController { - constructor(BeerDukeService) { - this.BeerDukeService = BeerDukeService; + function config($routeProvider) { + $routeProvider + .when('/settings', { + controller: SettingsController, + controllerAs: 'ctrl', + templateUrl: 'templates/settings.html' + }) + .otherwise({ + redirectTo: '/' + }) } - get connected() { - return this.BeerDukeService.connected; + function run($rootScope, BeerDukeSettings, BeerDukeService) { + $rootScope.settings = BeerDukeSettings; + $rootScope.mqtt = { + connected: BeerDukeService.connected + } } -} - -function config($routeProvider) { - console.log('BeerDuke: config'); - $routeProvider - .when('/settings', { - controller: SettingsController, - controllerAs: 'ctrl', - templateUrl: 'templates/settings.html' - }) - .otherwise({ - redirectTo: '/' - }) -} - -function run($rootScope, BeerDukeSettings, BeerDukeService) { - $rootScope.settings = BeerDukeSettings; - $rootScope.mqtt = { - get connected() { - return BeerDukeService.connected - } - }; -} - -angular.module('BeerDuke', ['ngRoute']) - .controller('MqttController', MqttController) - .service('BeerDukeService', BeerDukeService) - .factory('BeerDukeSettings', () => new BeerDukeSettings()) - .config(config) - .run(run); + + angular.module('BeerDuke', ['ngRoute']) + .factory('BeerDukeService', BeerDukeService) + .factory('BeerDukeSettings', BeerDukeSettings) + .config(config) + .run(run); +}()); |