Open shsunmoonlee opened 5 years ago
// -- Firebase const Firebase = (function () { // -- Modules const D = require("Diagnostics"); const N = require("Networking"); // -- Public /** * Firebase class. * * @constructor * @param {String} url - The url of your realtime database. */ function Firebase(url) { this._url = url; this._isObserving = false; this._onUpdate = null; } /** * Update the realtime database and set the data as current value. */ Firebase.prototype.set = function(data) { let options = { method: 'PUT', body: JSON.stringify(data) } N.fetch(this._url, options).then(function(result) { if (!((result.status >= 200) && (result.status < 300))) { D.log("Failed to post data!"); } }); } /** * Update the realtime database and set the data as current value. */ Firebase.prototype.subscribe = function(onUpdate) { this._onUpdate = onUpdate; } /** * Start observing changes in your realtime database. */ Firebase.prototype.start = function() { this._isObserving = true; fetch.call(this); } /** * Stop observing changes in your realtime database. */ Firebase.prototype.stop = function() { this._isObserving = false; } /** * Get a description for debugging purposes. * * @return {String} */ Firebase.prototype.toString = function() { return 'Firebase("' + this._url + '")'; } // -- Private /** * Fetch realtime database once. */ function fetch() { const self = this; N.fetch(self._url).then(function(result) { if (self._isObserving) { fetch.call(self); } if ((result.status >= 200) && (result.status < 300)) { return result.json(); } throw new Error("HTTP status code " + result.status); }).then(function(json) { if (self._onUpdate != null) { self._onUpdate(json); } }).catch(function(error) { D.log("There was an issue with fetch operation: " + error.message); }); } // -- Export return Firebase; })(); // -- Modules const S = require("Scene"); const TG = require("TouchGestures"); // -- Constants const URL = "https://ar-studio-hackathon.firebaseio.com/data.json"; // -- Scene const counterText = S.root.find("Counter Text"); const decrementButton = S.root.find("Decrement Button"); const incrementButton = S.root.find("Increment Button"); // -- Example const D = require("Diagnostics"); var data = null; var firebase = new Firebase(URL); firebase.subscribe(function(e) { data = e; D.log(data) counterText.text = `${data.counter}`; }); firebase.start(); var state = { user1: { sequences: [ { expression: 'eyebrowUp', time: 1.5 }, { expression: 'smile', time: 3 }, { expression: 'frown', time: 5 }, { expression: 'mouthOpen', time: 7 }, ], scsore: 10, } } // firebase.set({counter: 6, seunghun: 1, array: ['hi', 'hello']}) firebase.set({counter: 6, seunghun: 1, array: ['hi', 'hello']}) TG.onTap(decrementButton).subscribe(function(e) { data.counter = data.counter - 1; firebase.set(data); }); TG.onTap(incrementButton).subscribe(function(e) { data.counter = data.counter + 1; firebase.set(data); });