diff options
| author | Andrey Trebler <treblera@gmail.com> | 2020-04-30 09:09:48 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-04-30 03:09:48 -0400 |
| commit | 8ec36681dd4abac346551a54cdd6870ed8e864f5 (patch) | |
| tree | 3cad9f96252a0a8896d2e675f2038efbb89eb3ed /std/ws/mod.ts | |
| parent | 12c6055855af37d00be953080370909d0d7ea9b1 (diff) | |
feat: Make WebSocket Reader/Writer (#5001) (#5002)
Diffstat (limited to 'std/ws/mod.ts')
| -rw-r--r-- | std/ws/mod.ts | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/std/ws/mod.ts b/std/ws/mod.ts index 7e444f274..2a18cded7 100644 --- a/std/ws/mod.ts +++ b/std/ws/mod.ts @@ -10,8 +10,10 @@ import { TextProtoReader } from "../textproto/mod.ts"; import { Deferred, deferred } from "../util/async.ts"; import { assert } from "../testing/asserts.ts"; import { concat } from "../bytes/mod.ts"; +import { copyBytes } from "../io/util.ts"; import Conn = Deno.Conn; import Writer = Deno.Writer; +import Reader = Deno.Reader; export enum OpCode { Continue = 0x0, @@ -65,7 +67,7 @@ export interface WebSocketFrame { payload: Uint8Array; } -export interface WebSocket { +export interface WebSocket extends Reader, Writer { readonly conn: Conn; readonly isClosed: boolean; @@ -327,6 +329,26 @@ class WebSocketImpl implements WebSocket { return this.enqueue(frame); } + async write(p: Uint8Array): Promise<number> { + await this.send(p); + + return p.byteLength; + } + + async read(p: Uint8Array): Promise<number | null> { + for await (const ev of this.receive()) { + if (ev instanceof Uint8Array) { + return copyBytes(p, ev); + } + + if (typeof ev === "string") { + return copyBytes(p, encode(ev)); + } + } + + return null; + } + ping(data: WebSocketMessage = ""): Promise<void> { const payload = typeof data === "string" ? encode(data) : data; const frame = { |
