MCPcopy Index your code
hub / github.com/Ptechgithub/pp-worker / makeReadableWebSocketStream

Function makeReadableWebSocketStream

_worker.js:397–436  ·  view source on GitHub ↗

* Creates a readable stream from a WebSocket server, allowing for data to be read from the WebSocket. * @param {import("@cloudflare/workers-types").WebSocket} webSocketServer The WebSocket server to create the readable stream from. * @param {string} earlyDataHeader The header containing early da

(webSocketServer, earlyDataHeader, log)

Source from the content-addressed store, hash-verified

395 * @returns {ReadableStream} A readable stream that can be used to read data from the WebSocket.
396 */
397function makeReadableWebSocketStream(webSocketServer, earlyDataHeader, log) {
398 let readableStreamCancel = false;
399 const stream = new ReadableStream({
400 start(controller) {
401 webSocketServer.addEventListener('message', (event) => {
402 const message = event.data;
403 controller.enqueue(message);
404 });
405
406 webSocketServer.addEventListener('close', () => {
407 safeCloseWebSocket(webSocketServer);
408 controller.close();
409 });
410
411 webSocketServer.addEventListener('error', (err) => {
412 log('webSocketServer has error');
413 controller.error(err);
414 });
415 const { earlyData, error } = base64ToArrayBuffer(earlyDataHeader);
416 if (error) {
417 controller.error(error);
418 } else if (earlyData) {
419 controller.enqueue(earlyData);
420 }
421 },
422
423 pull(controller) {
424 // if ws can stop read if stream is full, we can implement backpressure
425 // https://streams.spec.whatwg.org/#example-rs-push-backpressure
426 },
427
428 cancel(reason) {
429 log(`ReadableStream was canceled, due to ${reason}`)
430 readableStreamCancel = true;
431 safeCloseWebSocket(webSocketServer);
432 }
433 });
434
435 return stream;
436}
437
438// https://xtls.github.io/development/protocols/vless.html
439// https://github.com/zizifn/excalidraw-backup/blob/main/v2ray-protocol.excalidraw

Callers 1

vlessOverWSHandlerFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected