Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed issue with websocket connections being closed when deep linking … #2146

Merged
merged 1 commit into from
May 14, 2020

Conversation

tonyanziano
Copy link
Contributor

…into a conversation.

===

Fixes #2144

===

This issue was a Windows-only (possibly Linux as well) bug that was happening due to the following:

  1. The Emulator (on Windows) parses deep links / protocol URLs after we receive an event from the client saying that the Welcome page has rendered
  2. This step happens before the browser window ready-to-show event is fired, and so before the WebSocket server is initialized
  3. The start conversation action dispatched by the protocol URL in step 1 then triggers the start conversation flow which eventually makes a call to the getWebSocketPort route
  4. The getWebSocketPort route starts the websocket server if not already running, and then returns the port. In the deep linking case, this always starts the server
  5. The conversation with Web Chat is started with a successfully connected websocket
  6. The ready-to-show browser window event is then fired and the web socket server is re-initialized which then calls cleanup(), closing the previously connected websocket for the running conversation
  7. now messages do properly flow out of WebChat, through the emulator, to the bot, and back to the emulator, but the websocket is no longer there to complete the trip to WebChat
  8. This results in a broken WebChat UI where none of the messages are seen as "sent" and none of the bot responses are rendered

===

This PR fixes that issue by changing the websocket server logic to only initialize the server once and return the port, instead of re-initializing if already running.

This means that the second call to WebSocketServer.init() in step 6 above results in a no-op and instead just returns the websocket server port.

===

This does not occur on Mac because the protocol URLs are parsed and executed after the initial setup of the websocket server inside of the ready-to-show browser window event handler

@tonyanziano tonyanziano force-pushed the toanzian/deeplink-fix branch from df01ef8 to ebb27aa Compare May 14, 2020 21:48
@srinaath
Copy link
Contributor

Nice catch!!

@tonyanziano tonyanziano merged commit 4681f24 into v4.9.0 May 14, 2020
@tonyanziano tonyanziano deleted the toanzian/deeplink-fix branch May 14, 2020 22:08
tonyanziano added a commit that referenced this pull request May 14, 2020
* Prepped v4.9.0 release

* Bump webchat to 4.9.0

Signed-off-by: Srinaath Ravichandran <srravich@microsoft.com>

* Changelog updated

Signed-off-by: Srinaath Ravichandran <srravich@microsoft.com>

* Changed readme

Signed-off-by: Srinaath Ravichandran <srravich@microsoft.com>

* Allow micrphone usage from electron

Signed-off-by: Srinaath Ravichandran <srravich@microsoft.com>

* Updates to lock files

Signed-off-by: Srinaath Ravichandran <srravich@microsoft.com>

* Removed dependancies to botbuilder myget for regular npm js libs

Signed-off-by: Srinaath Ravichandran <srravich@microsoft.com>

* Revert lock back to master

Signed-off-by: Srinaath Ravichandran <srravich@microsoft.com>

* PR number update

Signed-off-by: Srinaath Ravichandran <srravich@microsoft.com>

* Fixed issue with websocket connections being closed when deep linking into a conversation. (#2146)

Co-authored-by: Srinaath Ravichandran <srravich@microsoft.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants