summaryrefslogtreecommitdiffstats
path: root/web/react/stores/socket_store.jsx
diff options
context:
space:
mode:
Diffstat (limited to 'web/react/stores/socket_store.jsx')
-rw-r--r--web/react/stores/socket_store.jsx86
1 files changed, 86 insertions, 0 deletions
diff --git a/web/react/stores/socket_store.jsx b/web/react/stores/socket_store.jsx
new file mode 100644
index 000000000..8ebb854c9
--- /dev/null
+++ b/web/react/stores/socket_store.jsx
@@ -0,0 +1,86 @@
+// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+var AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
+var UserStore = require('./user_store.jsx')
+var EventEmitter = require('events').EventEmitter;
+var assign = require('object-assign');
+var client = require('../utils/client.jsx');
+
+var Constants = require('../utils/constants.jsx');
+var ActionTypes = Constants.ActionTypes;
+
+var CHANGE_EVENT = 'change';
+
+var conn;
+
+var SocketStore = assign({}, EventEmitter.prototype, {
+ initialize: function(self) {
+ if (!UserStore.getCurrentId()) return;
+
+ if (!self) self = this;
+ self.setMaxListeners(0);
+
+ if (window["WebSocket"] && !conn) {
+ var protocol = window.location.protocol == "https:" ? "wss://" : "ws://";
+ var port = window.location.protocol == "https:" ? ":8443" : "";
+ var conn_url = protocol + location.host + port + "/api/v1/websocket";
+ console.log("connecting to " + conn_url);
+ conn = new WebSocket(conn_url);
+
+ conn.onclose = function(evt) {
+ console.log("websocket closed");
+ console.log(evt);
+ conn = null;
+ setTimeout(function(){self.initialize(self)}, 3000);
+ };
+
+ conn.onerror = function(evt) {
+ console.log("websocket error");
+ console.log(evt);
+ };
+
+ conn.onmessage = function(evt) {
+ AppDispatcher.handleServerAction({
+ type: ActionTypes.RECIEVED_MSG,
+ msg: JSON.parse(evt.data)
+ });
+ };
+ }
+ },
+ emitChange: function(msg) {
+ this.emit(CHANGE_EVENT, msg);
+ },
+ addChangeListener: function(callback) {
+ this.on(CHANGE_EVENT, callback);
+ },
+ removeChangeListener: function(callback) {
+ this.removeListener(CHANGE_EVENT, callback);
+ },
+ sendMessage: function (msg) {
+ if (conn && conn.readyState === WebSocket.OPEN) {
+ conn.send(JSON.stringify(msg));
+ } else if (!conn || conn.readyState === WebSocket.Closed) {
+ conn = null;
+ this.initialize();
+ }
+ }
+});
+
+SocketStore.dispatchToken = AppDispatcher.register(function(payload) {
+ var action = payload.action;
+
+ switch(action.type) {
+ case ActionTypes.RECIEVED_MSG:
+ SocketStore.emitChange(action.msg);
+ break;
+ default:
+ }
+});
+
+SocketStore.initialize();
+module.exports = SocketStore;
+
+
+
+