From 5bb477d00ed8064a789b621cfd8f1f24b496d041 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Wed, 14 Aug 2019 08:16:59 -0300 Subject: [PATCH] [FIX] Handle disconnect and reconnect properly (#1131) --- app/lib/methods/subscriptions/room.js | 32 +++----------------------- app/lib/methods/subscriptions/rooms.js | 29 +++-------------------- package.json | 2 +- patches/react-native+0.60.4.patch | 14 ++++++++++- yarn.lock | 12 +++++----- 5 files changed, 26 insertions(+), 63 deletions(-) diff --git a/app/lib/methods/subscriptions/room.js b/app/lib/methods/subscriptions/room.js index e681fbaa5..d8ed07191 100644 --- a/app/lib/methods/subscriptions/room.js +++ b/app/lib/methods/subscriptions/room.js @@ -11,38 +11,14 @@ const removeListener = listener => listener.stop(); export default function subscribeRoom({ rid }) { let promises; - let timer = null; let connectedListener; let disconnectedListener; let notifyRoomListener; let messageReceivedListener; const typingTimeouts = {}; - const loop = () => { - if (timer) { - return; - } - timer = setTimeout(() => { - try { - clearTimeout(timer); - timer = false; - this.loadMissedMessages({ rid }); - loop(); - } catch (e) { - loop(); - } - }, 5000); - }; - const handleConnected = () => { + const handleConnection = () => { this.loadMissedMessages({ rid }); - clearTimeout(timer); - timer = false; - }; - - const handleDisconnected = () => { - if (this.sdk.userId) { - loop(); - } }; const getUserTyping = username => ( @@ -176,8 +152,6 @@ export default function subscribeRoom({ rid }) { messageReceivedListener.then(removeListener); messageReceivedListener = false; } - clearTimeout(timer); - timer = false; Object.keys(typingTimeouts).forEach((key) => { if (typingTimeouts[key]) { clearTimeout(typingTimeouts[key]); @@ -190,8 +164,8 @@ export default function subscribeRoom({ rid }) { }); }; - connectedListener = this.sdk.onStreamData('connected', handleConnected); - disconnectedListener = this.sdk.onStreamData('close', handleDisconnected); + connectedListener = this.sdk.onStreamData('connected', handleConnection); + disconnectedListener = this.sdk.onStreamData('close', handleConnection); notifyRoomListener = this.sdk.onStreamData('stream-notify-room', handleNotifyRoomReceived); messageReceivedListener = this.sdk.onStreamData('stream-room-messages', handleMessageReceived); diff --git a/app/lib/methods/subscriptions/rooms.js b/app/lib/methods/subscriptions/rooms.js index bc70b394a..dc9164724 100644 --- a/app/lib/methods/subscriptions/rooms.js +++ b/app/lib/methods/subscriptions/rooms.js @@ -16,29 +16,8 @@ let streamListener; let subServer; export default function subscribeRooms() { - let timer = null; - const loop = () => { - if (timer) { - return; - } - timer = setTimeout(() => { - clearTimeout(timer); - timer = false; - store.dispatch(roomsRequest()); - loop(); - }, 5000); - }; - - const handleConnected = () => { + const handleConnection = () => { store.dispatch(roomsRequest()); - clearTimeout(timer); - timer = false; - }; - - const handleDisconnected = () => { - if (this.sdk.userId) { - loop(); - } }; const handleStreamMessageReceived = protectedFunction((ddpMessage) => { @@ -145,12 +124,10 @@ export default function subscribeRooms() { streamListener.then(removeListener); streamListener = false; } - clearTimeout(timer); - timer = false; }; - connectedListener = this.sdk.onStreamData('connected', handleConnected); - disconnectedListener = this.sdk.onStreamData('close', handleDisconnected); + connectedListener = this.sdk.onStreamData('connected', handleConnection); + disconnectedListener = this.sdk.onStreamData('close', handleConnection); streamListener = this.sdk.onStreamData('stream-notify-user', handleStreamMessageReceived); try { diff --git a/package.json b/package.json index fe43fbd57..2428bf30c 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ } }, "dependencies": { - "@rocket.chat/sdk": "1.0.0-alpha.28", + "@rocket.chat/sdk": "1.0.0-alpha.30", "deep-equal": "^1.0.1", "ejson": "2.2.0", "expo-haptics": "^6.0.0", diff --git a/patches/react-native+0.60.4.patch b/patches/react-native+0.60.4.patch index 16cddd454..0785c91ee 100644 --- a/patches/react-native+0.60.4.patch +++ b/patches/react-native+0.60.4.patch @@ -1,3 +1,15 @@ +diff --git a/node_modules/react-native/Libraries/WebSocket/RCTSRWebSocket.m b/node_modules/react-native/Libraries/WebSocket/RCTSRWebSocket.m +index 6f1e5e8..b835657 100644 +--- a/node_modules/react-native/Libraries/WebSocket/RCTSRWebSocket.m ++++ b/node_modules/react-native/Libraries/WebSocket/RCTSRWebSocket.m +@@ -595,6 +595,7 @@ - (void)closeWithCode:(NSInteger)code reason:(NSString *)reason; + } + } + ++ [self.delegate webSocket:self didCloseWithCode:code reason:reason wasClean:YES]; + [self _sendFrameWithOpcode:RCTSROpCodeConnectionClose data:payload]; + }); + } diff --git a/node_modules/react-native/React/Modules/RCTRedBox.m b/node_modules/react-native/React/Modules/RCTRedBox.m index 7ed4900..bb85402 100644 --- a/node_modules/react-native/React/Modules/RCTRedBox.m @@ -10,4 +22,4 @@ index 7ed4900..bb85402 100644 + return RCTSharedApplication().delegate.window.safeAreaInsets.bottom; } else { return 0; - } + } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 1edd3a37c..6aaeb0e93 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1347,10 +1347,10 @@ resolved "https://registry.yarnpkg.com/@redux-saga/types/-/types-1.0.2.tgz#1d94f02800b094753f9271c206a26c2a06ca14ee" integrity sha512-8/qcMh15507AnXJ3lBeuhsdFwnWQqnp68EpUuHlYPixJ5vjVmls7/Jq48cnUlrZI8Jd9U1jkhfCl0gaT5KMgVw== -"@rocket.chat/sdk@1.0.0-alpha.28": - version "1.0.0-alpha.28" - resolved "https://registry.yarnpkg.com/@rocket.chat/sdk/-/sdk-1.0.0-alpha.28.tgz#569f3c578c5c12ed54a9317d36fa8413208ce021" - integrity sha512-tQ+tIIX5R931cxIlTTn2ftCfiIo372vCG3omzDwzSfw6Kq24f7giUxVEpWfsI4GtuTU4caoren7wuGYwnST/+A== +"@rocket.chat/sdk@1.0.0-alpha.30": + version "1.0.0-alpha.30" + resolved "https://registry.yarnpkg.com/@rocket.chat/sdk/-/sdk-1.0.0-alpha.30.tgz#fabfab601892bde9c9277a8aae92e88da770d64e" + integrity sha512-beKIoCw0XLjN8dcusqwBiS1hCVKE+y1IzpRYHUtNciS5LhOPujLUwrzF+pys2xkia5TohbRlsbNYlXPehvSHLQ== dependencies: "@types/event-emitter" "^0.3.2" "@types/eventemitter3" "^2.0.2" @@ -8754,9 +8754,9 @@ pad-component@0.0.1: resolved "https://registry.yarnpkg.com/pad-component/-/pad-component-0.0.1.tgz#ad1f22ce1bf0fdc0d6ddd908af17f351a404b8ac" integrity sha1-rR8izhvw/cDW3dkIrxfzUaQEuKw= -paho-mqtt@eclipse/paho.mqtt.javascript#master: +"paho-mqtt@github:eclipse/paho.mqtt.javascript#master": version "1.1.0" - resolved "https://codeload.github.com/eclipse/paho.mqtt.javascript/tar.gz/9b761defeeb4a627db31d92ae1b0ca91b44b226e" + resolved "https://codeload.github.com/eclipse/paho.mqtt.javascript/tar.gz/f5859463aba9a9b7c19f99ab7c4849a723f8d832" pako@~1.0.2: version "1.0.8"