本文整理匯總了TypeScript中@coder/events.Emitter類的典型用法代碼示例。如果您正苦於以下問題:TypeScript Emitter類的具體用法?TypeScript Emitter怎麽用?TypeScript Emitter使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。
在下文中一共展示了Emitter類的4個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的TypeScript代碼示例。
示例1: Promise
return new Promise((resolve, reject): void => {
const socket = new WebSocket(connectionUrl);
const closeEmitter = new Emitter<TunnelCloseEvent>();
const dataEmitter = new Emitter<ArrayBuffer>();
const connection: ClientConnection = {
get onClose(): Event<TunnelCloseEvent> {
return closeEmitter.event;
},
get onData(): Event<ArrayBuffer> {
return dataEmitter.event;
},
send(data: ArrayBuffer): void {
socket.send(data);
},
};
socket.binaryType = "arraybuffer";
socket.addEventListener("message", (event) => {
dataEmitter.emit(event.data);
});
socket.addEventListener("error", (event) => {
reject("uncertain");
});
socket.addEventListener("open", () => {
resolve(connection);
});
socket.addEventListener("close", (event) => {
closeEmitter.emit({
code: event.code,
reason: event.reason,
});
});
});
示例2:
done: (err: Error): void => {
const removed: number[] = [];
ports.forEach((value, key) => {
if (value !== scanTime) {
// Remove port
removed.push(key);
ports.delete(key);
}
});
if (removed.length > 0) {
removeEmitter.emit(removed);
}
if (added.length > 0) {
addEmitter.emit(added);
}
onCompleted(err);
},
示例3: netstat
export const createPortScanner = (scanInterval: number = 250): PortScanner => {
const ports = new Map<number, number>();
const addEmitter = new Emitter<number[]>();
const removeEmitter = new Emitter<number[]>();
const scan = (onCompleted: (err?: Error) => void): void => {
const scanTime = Date.now();
const added: number[] = [];
netstat({
done: (err: Error): void => {
const removed: number[] = [];
ports.forEach((value, key) => {
if (value !== scanTime) {
// Remove port
removed.push(key);
ports.delete(key);
}
});
if (removed.length > 0) {
removeEmitter.emit(removed);
}
if (added.length > 0) {
addEmitter.emit(added);
}
onCompleted(err);
},
filter: {
state: "LISTEN",
},
}, (data: {
readonly protocol: string;
readonly local: {
readonly port: number;
readonly address: string;
};
}) => {
// https://en.wikipedia.org/wiki/Registered_port
if (data.local.port <= 1023 || data.local.port >= 49151) {
return;
}
// Only forward TCP ports
if (!data.protocol.startsWith("tcp")) {
return;
}
if (!ports.has(data.local.port)) {
added.push(data.local.port);
}
ports.set(data.local.port, scanTime);
});
};
let lastTimeout: NodeJS.Timer | undefined;
let disposed: boolean = false;
const doInterval = (): void => {
scan(() => {
if (disposed) {
return;
}
lastTimeout = setTimeout(doInterval, scanInterval);
});
};
doInterval();
return {
get ports(): number[] {
return Array.from(ports.keys());
},
get onAdded(): Event<number[]> {
return addEmitter.event;
},
get onRemoved(): Event<number[]> {
return removeEmitter.event;
},
dispose(): void {
if (typeof lastTimeout !== "undefined") {
clearTimeout(lastTimeout);
}
disposed = true;
},
};
};
示例4:
socket.addEventListener("close", (event) => {
closeEmitter.emit({
code: event.code,
reason: event.reason,
});
});