buntralino
Version:
Bun library for Buntralino. Buntralino unites Bun and Neutralino.js to make a simpler, lighter alternative to Electron and NW.js. Use Neutralino.js API at client and send harder tasks to Bun while keeping your development process easy.
45 lines (41 loc) • 1.45 kB
text/typescript
export type Connection = {
ws: WebSocket,
port: number,
neuToken: string,
bunToken: string,
name: string
};
import type {PromiseResolveCallback} from './evals';
const awaitedConnections = new Map<string, Set<PromiseResolveCallback>>();
export const connections = new Map<string, Connection>();
export const dropConnection = (name: string) => {
connections.delete(name);
};
export const awaitConnection = (name: string) =>
new Promise<void>(resolve => {
if (!awaitedConnections.has(name)) {
awaitedConnections.set(name, new Set([resolve]));
} else {
awaitedConnections.get(name)!.add(resolve);
}
});
export const registerConnection = (name: string, connection: Connection) => {
connections.set(name, connection);
if (awaitedConnections.has(name)) {
const resolvers = awaitedConnections.get(name)!;
for (const resolve of resolvers) {
resolve();
}
awaitedConnections.delete(name);
}
};
export const getConnectionByToken = (token: string): Connection | undefined => {
for (const [, connection] of connections) {
if (connection.bunToken === token) {
return connection;
}
}
return void 0;
};
export const getConnectionByName = (name: string): Connection | undefined => connections.get(name);
export const isConnectionOpen = (name: string): boolean => connections.has(name);