summaryrefslogtreecommitdiffstats
path: root/web/react/stores/socket_store.jsx
diff options
context:
space:
mode:
authorJoramWilander <jwawilander@gmail.com>2015-08-12 12:45:15 -0400
committerJoramWilander <jwawilander@gmail.com>2015-08-18 08:59:26 -0400
commitfa1491bbfbb1261757943759edf44883d31e5477 (patch)
treeac5474908c28abf741371602603e22669cb4197e /web/react/stores/socket_store.jsx
parentc77f6041889b2dd8c6e830b8c2f42ab9c1340849 (diff)
downloadchat-fa1491bbfbb1261757943759edf44883d31e5477.tar.gz
chat-fa1491bbfbb1261757943759edf44883d31e5477.tar.bz2
chat-fa1491bbfbb1261757943759edf44883d31e5477.zip
finalize implenetation of predictive client posts so that users get immediate feedback after posting
Diffstat (limited to 'web/react/stores/socket_store.jsx')
-rw-r--r--web/react/stores/socket_store.jsx128
1 files changed, 68 insertions, 60 deletions
diff --git a/web/react/stores/socket_store.jsx b/web/react/stores/socket_store.jsx
index 8ebb854c9..c3c331828 100644
--- a/web/react/stores/socket_store.jsx
+++ b/web/react/stores/socket_store.jsx
@@ -15,72 +15,80 @@ 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();
+ initialize: function() {
+ if (!UserStore.getCurrentId()) {
+ return;
+ }
+
+ var self = this;
+ self.setMaxListeners(0);
+
+ if (window.WebSocket && !conn) {
+ var protocol = 'ws://';
+ var port = '';
+ if (window.location.protocol === 'https:') {
+ protocol = 'wss://';
+ port = ':8443';
+ }
+ var connUrl = protocol + location.host + port + '/api/v1/websocket';
+ console.log('connecting to ' + connUrl);
+ conn = new WebSocket(connUrl);
+
+ conn.onclose = function closeConn(evt) {
+ console.log('websocket closed');
+ console.log(evt);
+ conn = null;
+ setTimeout(
+ function reconnect() {
+ self.initialize();
+ },
+ 3000
+ );
+ };
+
+ conn.onerror = function connError(evt) {
+ console.log('websocket error');
+ console.log(evt);
+ };
+
+ conn.onmessage = function connMessage(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;
+ var action = payload.action;
- switch(action.type) {
- case ActionTypes.RECIEVED_MSG:
- SocketStore.emitChange(action.msg);
- break;
- default:
- }
+ switch (action.type) {
+ case ActionTypes.RECIEVED_MSG:
+ SocketStore.emitChange(action.msg);
+ break;
+
+ default:
+ }
});
SocketStore.initialize();
module.exports = SocketStore;
-
-
-
-