Skip to content
This repository was archived by the owner on Jun 3, 2020. It is now read-only.

Commit 389cb6b

Browse files
committed
Update PeerSocket API to support read/write/duplex streams
1 parent 06c8980 commit 389cb6b

1 file changed

Lines changed: 22 additions & 6 deletions

File tree

web-apis/fg/peer-socket.js

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* globals ReadableStream */
1+
/* globals ReadableStream WritableStream */
22

33
const errors = require('beaker-error-constants')
44
const {EventTarget, Event, fromEventStream} = require('./event-target')
@@ -113,22 +113,38 @@ exports.setup = function (rpc) {
113113
TAB_IDENT = +n || 0
114114
}
115115

116-
async send (data) {
116+
async write (data) {
117117
peerSocketRPC.socketSend(TAB_IDENT, this.lobby.type, this.lobby.name, this.id, data)
118118
}
119119

120-
createMessageStream () {
120+
createReadStream () {
121121
var messageEventHandler
122+
const cancel = () => this.removeEventListener('message', messageEventHandler)
122123
return new ReadableStream({
123124
start: (controller) => {
124125
messageEventHandler = e => controller.enqueue(e.message)
125126
this.addEventListener('message', messageEventHandler)
127+
this.addEventListener('close', () => {
128+
controller.close()
129+
cancel()
130+
})
126131
},
127-
cancel: () => {
128-
this.removeEventListener('message', messageEventHandler)
129-
}
132+
cancel
130133
})
131134
}
135+
136+
createWriteStream () {
137+
return new WritableStream({
138+
write: (data) => this.write(data)
139+
// NOTE
140+
// currently not possible to close or cancel a peersocket
141+
// -prf
142+
})
143+
}
144+
145+
createDuplexStream () {
146+
return {readable: this.createReadStream(), writable: this.createWriteStream()}
147+
}
132148
}
133149

134150
function setImmutableAttr (obj, name, value) {

0 commit comments

Comments
 (0)