Skip to content

Commit

Permalink
fix(WebSocket): handle readyState properly
Browse files Browse the repository at this point in the history
  • Loading branch information
nokome committed Nov 29, 2018
1 parent 923b629 commit 8b63f34
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 5 deletions.
7 changes: 6 additions & 1 deletion src/comms/WebSocketClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,12 @@ export default class WebSocketClient extends Client {

// Overrides of `Client` methods

send (request: JsonRpcRequest) {
async send (request: JsonRpcRequest) {
if (this.socket.readyState !== WebSocket.OPEN) {
await new Promise(resolve => {
this.socket.onopen = () => resolve()
})
}
this.socket.send(JSON.stringify(request))
}
}
4 changes: 2 additions & 2 deletions tests/comms/WebSocketClientServer.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@ test('WebSockets', async () => {
await server.start()

const client = new WebSocketClient(`ws://${server.address}:${server.port}`)
await new Promise(resolve => setTimeout(resolve, 1000))


const string = '{"type": "Person", "givenNames": ["John", "Paul"], "familyNames": ["Smith"]}'
const object = JSON.parse(string)
const thing = new Person(object)
Expand All @@ -23,5 +22,6 @@ test('WebSockets', async () => {
expect(error.message).toEqual("Internal error: Unhandled import format: bar/baz")
}

client.socket.close()
await server.stop()
})
8 changes: 6 additions & 2 deletions tests/comms/browserTests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,13 @@ import HttpClient from '../../src/comms/HttpClient'
import WebSocketClient from '../../src/comms/WebSocketClient'
import WebWorkerClient from '../../src/comms/WebWorkerClient'

const thing = {type: 'Thing'}

var httpClient = new HttpClient('http://127.0.0.1:2000')
httpClient.execute(thing).then(console.log)

var wsClient = new WebSocketClient('ws://127.0.0.1:2000')
wsClient.execute(thing).then(console.log)

var worker = new Worker('webWorkerServer.js')
var wwClient = new WebWorkerClient(worker)
var wwClient = new WebWorkerClient('/webWorkerServer.js')
wwClient.execute(thing).then(console.log)

0 comments on commit 8b63f34

Please sign in to comment.