class WebSocketClientServer
implements Disposable
extends EventTarget
import { WebSocketClientServer } from "https://deno.land/x/websocket_broadcastchannel@0.8.0/src/web-socket-client-server.ts";
Responsible for managing a WebSocket connection, either as a server or as a client.
Owns:
- a url for where to listen, or connect to
- a state machine (server/client/connecting/closed etc)
- an AbortController for when "closed" state is desired or reached
- a Set, per channel name
- a WebSocketServer (when server)
- a WebSocket (when client)
- yet undelivered messages
Emits:
- "close" when aborted or closed
- WebSocketBroadcastChannel: "message" to deliver messages locally to WebSocketBroadcastChannels
Listens to:
- AbortController: "abort" → state:closed.
- WebSocketBroadcastChannel: "close" → remove from channelSets, and if empty, abort.
- WebSocketBroadcastChannel: "postMessage" → means a message came from a WebSocketBroadcastChannel, so it should be sent to the server or clients, depending on the state.
- WebSocketServer when in state:server: "client:open" → sendOutgoingMessages
- WebSocketServer when in state:server: "client:message" → means a message came from a client, so it should go to all WebSocketBroadcastChannels in channelSets for the message's channel name, and to all server.webSockets.
- WebSocketServer when in state:server: server.finished → state:client
- WebSocket when in state:client: "open" → sendOutgoingMessages
- WebSocket when in state:client: "message" → means a message came from the server, so it should go to all WebSocketBroadcastChannels in channelSets for the message's channel name.
- WebSocket when in state:client: "close" → state:client closed
- WebSocket when in state:client: "error" → state:client closed
Constructors
new
WebSocketClientServer(url: IdUrl, autoStart?)Properties
private
readonly
log1: Loggerprivate
onBroadcastChannelPostMessage: EventListenerprivate
optional
server: WebSocketServerprivate
readonly
state: StateMachine<ClientServerState>private
optional
ws: WebSocketprivate
yetUndeliveredMessages: MultiplexMessage[]readonly
abortController: AbortControllerreadonly
channelSets: Map<string, Set<WebSocketBroadcastChannel>>readonly
url: IdUrlMethods
private
cleanup()private
cleanupAndStartConnecting()private
cleanupAndStartServerAndGotoServer()private
doSendOutgoingMessage(message: MultiplexMessage)private
ensureChannelSet(channelName: string): Set<WebSocketBroadcastChannel>private
getChannelSetOrEmpty(channelName: string): Set<WebSocketBroadcastChannel>private
outgoingMessagesToSend(): Generator<MultiplexMessage>private
postMessageLocal(message: MultiplexMessage)private
sendOutgoingMessages()private
unregisterChannel(broadcastChannel: WebSocketBroadcastChannel)broadcast(message: MultiplexMessage)
close(): void
createClientServerStateMachine(): StateMachine<ClientServerState>
registerChannel(broadcastChannel: WebSocketBroadcastChannel)
[Symbol.dispose](): void