Skip to content

Instantly share code, notes, and snippets.

@tehSLy
Last active August 8, 2019 10:33
Show Gist options
  • Select an option

  • Save tehSLy/0ddcb785c47b6851519e85e30758366f to your computer and use it in GitHub Desktop.

Select an option

Save tehSLy/0ddcb785c47b6851519e85e30758366f to your computer and use it in GitHub Desktop.
import { createEffect, createEvent, createStore, Event as EffectorEvent } from "effector";
export const createWebSocketConnection = (url: string) => {
const instance = new WebSocket(url);
const sendMessage = createEffect<object, any, Error>().use((data) => instance.send(JSON.stringify(data)));
const {message, statusChanged} = createEvents(instance);
const status = createStore<keyof WebSocketEventMap>("close")
.on(statusChanged, (_, e) => e.type)
return { sendMessage, instance, events, status, statusChanged, message };
};
const createEvents = (instance: WebSocket) => {
const message = createEvent<Event>();
const statusChanged = createEvent<Event>();
return ["message", "error", "close", "open"].map((carry: any, key) => {
instance.addEventListener(key, key === "message" ? message : statusChanged);
});
return {message, statusChanged}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment