summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2015-09-08 12:49:53 +0200
committerTrygve Laugstøl <trygvis@inamo.no>2015-09-08 12:49:53 +0200
commit615a043031f37fe5bc55fdf9cbc2e83a5e305908 (patch)
tree128a22f4d34934ec7c7d75a78ffea7c16c7c32fb
parentbcf3120d437da01fda78397a345bf805b008eb7a (diff)
downloadbeer-duke-615a043031f37fe5bc55fdf9cbc2e83a5e305908.tar.gz
beer-duke-615a043031f37fe5bc55fdf9cbc2e83a5e305908.tar.bz2
beer-duke-615a043031f37fe5bc55fdf9cbc2e83a5e305908.tar.xz
beer-duke-615a043031f37fe5bc55fdf9cbc2e83a5e305908.zip
wip
-rw-r--r--package.json12
-rw-r--r--src/BeerDuke.js150
-rw-r--r--src/BeerDukeController.js33
-rw-r--r--src/BeerDukeTap.js45
-rw-r--r--src/beer-duke.js31
-rw-r--r--src/config.js15
-rw-r--r--src/controller.html (renamed from src/index.html)10
-rw-r--r--src/tap.html18
-rw-r--r--src/templates/controller.html9
-rw-r--r--src/templates/footer.html5
-rw-r--r--src/templates/settings.html14
-rw-r--r--src/templates/tap.html5
12 files changed, 297 insertions, 50 deletions
diff --git a/package.json b/package.json
index 304157e..a1ae283 100644
--- a/package.json
+++ b/package.json
@@ -3,9 +3,6 @@
"version": "0.0.0",
"description": "",
"main": "index.js",
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
- },
"author": "",
"license": "MIT",
"devDependencies": {
@@ -17,12 +14,13 @@
"baseURL": "src"
},
"dependencies": {
- "angular": "github:angular/bower-angular@^1.4.4"
+ "angular": "npm:angular@^1.4.5",
+ "angular-route": "npm:angular-route@^1.4.5"
},
"devDependencies": {
- "babel": "npm:babel-core@^5.8.22",
- "babel-runtime": "npm:babel-runtime@^5.8.20",
- "core-js": "npm:core-js@^1.1.0"
+ "core-js": "npm:core-js@^1.1.0",
+ "traceur": "github:jmcriffey/bower-traceur@0.0.91",
+ "traceur-runtime": "github:jmcriffey/bower-traceur-runtime@0.0.91"
}
}
}
diff --git a/src/BeerDuke.js b/src/BeerDuke.js
new file mode 100644
index 0000000..491872a
--- /dev/null
+++ b/src/BeerDuke.js
@@ -0,0 +1,150 @@
+import angular from 'angular';
+
+class SettingsController {
+ constructor(BeerDukeSettings) {
+ this.settings = BeerDukeSettings;
+ }
+}
+
+class BeerDukeSettings {
+ constructor() {
+ this.clientId = this.clientId || 'beer-duke-' + Math.round(Math.random() * 100000);
+ this.showSettings = this.showSettings || false;
+ }
+
+ get clientId() {
+ return BeerDukeSettings.load('clientId');
+ }
+
+ set clientId(clientId) {
+ BeerDukeSettings.store('clientId', clientId);
+ }
+
+ get showSettings() {
+ return BeerDukeSettings.load('showSettings');
+ }
+
+ set showSettings(showSettings) {
+ BeerDukeSettings.store('showSettings', showSettings);
+ }
+
+ static store(key, value) {
+ window.localStorage[key] = angular.toJson(value);
+ return value;
+ }
+
+ static load(key) {
+ return angular.fromJson(window.localStorage[key]);
+ }
+}
+
+class BeerDukeService {
+ constructor($timeout, $rootScope, BeerDukeSettings) {
+ this.$timeout = $timeout;
+ this.$rootScope = $rootScope;
+
+ this.connected_ = false;
+ this.messages = [];
+ }
+
+ connect(type) {
+ let client = new Paho.MQTT.Client("wss://trygvis.io:9001/", BeerDukeSettings.clientId + "-" + type);
+ client.onConnectionLost = (a) => {
+ this.$timeout(() => {
+ this.$rootScope.$apply(() => {
+ this.onConnectionLost(a);
+ })
+ });
+ };
+ client.onMessageArrived = (a) => {
+ this.$timeout(() => {
+ this.$rootScope.$apply(() => {
+ this.onMessageArrived(a);
+ })
+ });
+ };
+
+ this.client = client;
+
+ this.client.connect({
+ onSuccess: () => {
+ this.$timeout(() => {
+ this.$rootScope.$apply(() => {
+ this.onConnect();
+ })
+ });
+ }
+ });
+ }
+
+ get connected() {
+ return this.connected_;
+ }
+
+ onConnect() {
+ console.log('Connected');
+
+ this.connected_ = true;
+
+ this.client.subscribe("/beer-duke");
+ }
+
+ onConnectionLost(responseObject) {
+ this.connected_ = false;
+
+ //if (responseObject.errorCode !== 0)
+ console.log("onConnectionLost:", responseObject);
+ console.log("onConnectionLost:", responseObject.errorMessage);
+ }
+
+ onMessageArrived(message) {
+ console.log("onMessageArrived:" + message.payloadString);
+
+ this.messages.push(message);
+ }
+
+ requestBeer(code) {
+ let message = new Paho.MQTT.Message(angular.toJson({code: code}));
+ message.destinationName = "/beer-duke";
+ this.client.send(message);
+ }
+}
+
+class MqttController {
+ constructor(BeerDukeService) {
+ this.BeerDukeService = BeerDukeService;
+ }
+
+ get connected() {
+ return this.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)
+ .service('BeerDukeSettings', BeerDukeSettings)
+ .config(config)
+ .run(run);
diff --git a/src/BeerDukeController.js b/src/BeerDukeController.js
new file mode 100644
index 0000000..fd70357
--- /dev/null
+++ b/src/BeerDukeController.js
@@ -0,0 +1,33 @@
+import angular from 'angular';
+import 'angular-route';
+import './BeerDuke.js';
+
+class BeerDukeControllerController {
+ constructor(BeerDukeService) {
+ this.BeerDukeService = BeerDukeService;
+ }
+
+ requestBeer() {
+ let code = this.code;
+
+ console.log('code', code);
+ this.BeerDukeService.requestBeer(code);
+ }
+}
+
+function run(BeerDukeService) {
+ BeerDukeService.connect('controller');
+}
+
+function config($routeProvider) {
+ $routeProvider
+ .when('/', {
+ controller: BeerDukeControllerController,
+ controllerAs: 'ctrl',
+ templateUrl: 'templates/controller.html'
+ });
+}
+angular.module('BeerDukeController', ['ngRoute', 'BeerDuke'])
+ .run(run)
+ .config(config)
+ .controller('BeerDukeControllerController', BeerDukeControllerController);
diff --git a/src/BeerDukeTap.js b/src/BeerDukeTap.js
new file mode 100644
index 0000000..3392e85
--- /dev/null
+++ b/src/BeerDukeTap.js
@@ -0,0 +1,45 @@
+import angular from 'angular';
+import 'angular-route';
+import './BeerDuke.js';
+
+class BeerDukeTapController {
+ constructor($timeout, BeerDukeSettings) {
+ console.log('BeerDukeTapController', this);
+
+ this.$timeout = $timeout;
+ this.settings = BeerDukeSettings;
+
+ this.rotateCode();
+ this.count = 0;
+ this.code = '';
+ }
+
+ rotateCode() {
+ this.code = '' + this.count++;
+ this.$timeout(() => {
+ this.rotateCode();
+ }, 1000);
+ }
+}
+
+class TapSettingsController {
+ constructor() {
+ }
+}
+
+function run(BeerDukeService) {
+ BeerDukeService.connect('tap');
+}
+
+function config($routeProvider) {
+ $routeProvider
+ .when('/', {
+ controller: BeerDukeTapController,
+ controllerAs: 'ctrl',
+ templateUrl: 'templates/tap.html'
+ });
+}
+
+angular.module('BeerDukeTap', ['BeerDuke', 'ngRoute'])
+ .run(run)
+ .config(config);
diff --git a/src/beer-duke.js b/src/beer-duke.js
deleted file mode 100644
index 8178836..0000000
--- a/src/beer-duke.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import angular from 'angular';
-
-function run() {
- function onConnect() {
- // Once a connection has been made, make a subscription and send a message.
- console.log("onConnect");
- client.subscribe("/World");
- let message = new Paho.MQTT.Message("Hello");
- message.destinationName = "/World";
- client.send(message);
- }
-
- function onConnectionLost(responseObject) {
- if (responseObject.errorCode !== 0)
- console.log("onConnectionLost:" + responseObject.errorMessage);
- }
-
- function onMessageArrived(message) {
- console.log("onMessageArrived:" + message.payloadString);
- client.disconnect();
- }
-
- //let client = new Paho.MQTT.Client("trygvis.io", 9001, "/", "clientId");
- let client = new Paho.MQTT.Client("wss://trygvis.io:9001/", "clientId");
- client.onConnectionLost = onConnectionLost;
- client.onMessageArrived = onMessageArrived;
- client.connect({onSuccess: onConnect});
-}
-
-angular.module('BeerDuke', [])
- .run(run);
diff --git a/src/config.js b/src/config.js
index 7b73f04..5bf6bd5 100644
--- a/src/config.js
+++ b/src/config.js
@@ -1,6 +1,6 @@
System.config({
defaultJSExtensions: true,
- transpiler: "babel",
+ transpiler: "traceur",
babelOptions: {
"optional": [
"runtime",
@@ -13,13 +13,14 @@ System.config({
},
map: {
- "angular": "github:angular/bower-angular@1.4.4",
- "babel": "npm:babel-core@5.8.22",
- "babel-runtime": "npm:babel-runtime@5.8.20",
+ "angular": "npm:angular@1.4.5",
+ "angular-route": "npm:angular-route@1.4.5",
"core-js": "npm:core-js@1.1.1",
"jasmine-node": "npm:jasmine-node@1.14.5",
"mhevery/jasmine-node": "github:mhevery/jasmine-node@1.14.5",
"mqtt_over_websockets": "npm:mqtt_over_websockets@0.0.1-b",
+ "traceur": "github:jmcriffey/bower-traceur@0.0.91",
+ "traceur-runtime": "github:jmcriffey/bower-traceur-runtime@0.0.91",
"github:jspm/nodelibs-assert@0.1.0": {
"assert": "npm:assert@1.3.0"
},
@@ -67,6 +68,9 @@ System.config({
"github:jspm/nodelibs-vm@0.1.0": {
"vm-browserify": "npm:vm-browserify@0.0.4"
},
+ "npm:angular@1.4.5": {
+ "process": "github:jspm/nodelibs-process@0.1.1"
+ },
"npm:asn1.js@2.2.0": {
"assert": "github:jspm/nodelibs-assert@0.1.0",
"bn.js": "npm:bn.js@2.2.0",
@@ -78,9 +82,6 @@ System.config({
"npm:assert@1.3.0": {
"util": "npm:util@0.10.3"
},
- "npm:babel-runtime@5.8.20": {
- "process": "github:jspm/nodelibs-process@0.1.1"
- },
"npm:browserify-aes@1.0.3": {
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
"buffer-xor": "npm:buffer-xor@1.0.2",
diff --git a/src/index.html b/src/controller.html
index 463f704..c6b76b9 100644
--- a/src/index.html
+++ b/src/controller.html
@@ -1,18 +1,18 @@
<html>
<head>
- <script type="application/javascript" src="jspm_packages/system.js"></script>
+ <script type="application/javascript" src="jspm_packages/system.src.js"></script>
<script type="application/javascript" src="../org.eclipse.paho.mqtt.javascript/src/mqttws31.js"></script>
<script type="application/javascript" src="config.js"></script>
- <!--<script type="application/javascript" src="beer-duke.js"></script>-->
- <script type="application/javascript">
+ <script type="text/ecmascript">
Promise.all([
System.import('angular'),
- System.import('beer-duke')])
+ System.import('BeerDukeController')])
.then(function (modules) {
- modules[0].bootstrap(document, ['BeerDuke']);
+ modules[0].bootstrap(document, ['BeerDukeController']);
});
</script>
</head>
<body>
+<div ng-view></div>
</body>
</html>
diff --git a/src/tap.html b/src/tap.html
new file mode 100644
index 0000000..5f47e2e
--- /dev/null
+++ b/src/tap.html
@@ -0,0 +1,18 @@
+<html>
+<head>
+ <script type="application/javascript" src="jspm_packages/system.src.js"></script>
+ <script type="application/javascript" src="../org.eclipse.paho.mqtt.javascript/src/mqttws31.js"></script>
+ <script type="application/javascript" src="config.js"></script>
+ <script type="text/ecmascript">
+ Promise.all([
+ System.import('angular'),
+ System.import('BeerDukeTap')])
+ .then(function (modules) {
+ modules[0].bootstrap(document, ['BeerDukeTap']);
+ });
+ </script>
+</head>
+<body>
+<div ng-view></div>
+</body>
+</html>
diff --git a/src/templates/controller.html b/src/templates/controller.html
new file mode 100644
index 0000000..c6cc4c8
--- /dev/null
+++ b/src/templates/controller.html
@@ -0,0 +1,9 @@
+<div ng-controller="MqttController as mqtt">
+ <div ng-controller="BeerDukeControllerController as ctrl">
+ <label>
+ Code from tap:
+ <input type="number" ng-model="ctrl.code">
+ </label>
+ <button ng-click="ctrl.requestBeer()">Request Beer!</button>
+ </div>
+</div>
diff --git a/src/templates/footer.html b/src/templates/footer.html
new file mode 100644
index 0000000..17483ae
--- /dev/null
+++ b/src/templates/footer.html
@@ -0,0 +1,5 @@
+<div ng-if="settings.showSettings">
+ <hr/>
+ <a href="#/settings">settings</a><br/>
+ connected = {{mqtt.connected}}
+</div>
diff --git a/src/templates/settings.html b/src/templates/settings.html
new file mode 100644
index 0000000..5147065
--- /dev/null
+++ b/src/templates/settings.html
@@ -0,0 +1,14 @@
+<div>
+ <h2>Settings</h2>
+ <a href="#/">back</a>
+ <label>
+ showSettings
+ <input type="checkbox" ng-model="ctrl.settings.showSettings">
+ </label>
+
+ <label>
+ clientId
+ <input type="text" ng-model="ctrl.settings.clientId">
+ </label>
+
+</div>
diff --git a/src/templates/tap.html b/src/templates/tap.html
new file mode 100644
index 0000000..c266f2d
--- /dev/null
+++ b/src/templates/tap.html
@@ -0,0 +1,5 @@
+<div>
+ Code: {{ctrl.code}}
+
+ <ng-include src="'templates/footer.html'"/>
+</div>