mirror of
https://github.com/denoland/deno.git
synced 2024-11-23 15:16:54 -05:00
79b3bc05d6
* establish basic event loop for workers * make "self.close()" inside worker * remove "runWorkerMessageLoop() - instead manually call global function in Rust when message arrives. This is done in preparation for structured clone * refactor "WorkerChannel" and use distinct structs for internal and external channels; "WorkerChannelsInternal" and "WorkerHandle" * move "State.worker_channels_internal" to "Worker.internal_channels" * add "WorkerEvent" enum for child->host communication; currently "Message(Buf)" and "Error(ErrBox)" variants are supported * add tests for nested workers * add tests for worker throwing error on startup
99 lines
3.1 KiB
TypeScript
99 lines
3.1 KiB
TypeScript
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
|
import * as minimal from "./dispatch_minimal.ts";
|
|
import * as json from "./dispatch_json.ts";
|
|
import { AsyncHandler } from "./plugins.ts";
|
|
|
|
// These consts are shared with Rust. Update with care.
|
|
export let OP_READ: number;
|
|
export let OP_WRITE: number;
|
|
export let OP_EXIT: number;
|
|
export let OP_IS_TTY: number;
|
|
export let OP_ENV: number;
|
|
export let OP_EXEC_PATH: number;
|
|
export let OP_UTIME: number;
|
|
export let OP_SET_ENV: number;
|
|
export let OP_GET_ENV: number;
|
|
export let OP_GET_DIR: number;
|
|
export let OP_START: number;
|
|
export let OP_APPLY_SOURCE_MAP: number;
|
|
export let OP_FORMAT_ERROR: number;
|
|
export let OP_CACHE: number;
|
|
export let OP_RESOLVE_MODULES: number;
|
|
export let OP_FETCH_SOURCE_FILES: number;
|
|
export let OP_OPEN: number;
|
|
export let OP_CLOSE: number;
|
|
export let OP_SEEK: number;
|
|
export let OP_FETCH: number;
|
|
export let OP_METRICS: number;
|
|
export let OP_REPL_START: number;
|
|
export let OP_REPL_READLINE: number;
|
|
export let OP_ACCEPT: number;
|
|
export let OP_ACCEPT_TLS: number;
|
|
export let OP_CONNECT: number;
|
|
export let OP_SHUTDOWN: number;
|
|
export let OP_LISTEN: number;
|
|
export let OP_LISTEN_TLS: number;
|
|
export let OP_RESOURCES: number;
|
|
export let OP_GET_RANDOM_VALUES: number;
|
|
export let OP_GLOBAL_TIMER_STOP: number;
|
|
export let OP_GLOBAL_TIMER: number;
|
|
export let OP_NOW: number;
|
|
export let OP_QUERY_PERMISSION: number;
|
|
export let OP_REVOKE_PERMISSION: number;
|
|
export let OP_REQUEST_PERMISSION: number;
|
|
export let OP_CREATE_WORKER: number;
|
|
export let OP_HOST_POST_MESSAGE: number;
|
|
export let OP_HOST_TERMINATE_WORKER: number;
|
|
export let OP_HOST_GET_MESSAGE: number;
|
|
export let OP_WORKER_POST_MESSAGE: number;
|
|
export let OP_WORKER_CLOSE: number;
|
|
export let OP_RUN: number;
|
|
export let OP_RUN_STATUS: number;
|
|
export let OP_KILL: number;
|
|
export let OP_CHDIR: number;
|
|
export let OP_MKDIR: number;
|
|
export let OP_CHMOD: number;
|
|
export let OP_CHOWN: number;
|
|
export let OP_REMOVE: number;
|
|
export let OP_COPY_FILE: number;
|
|
export let OP_STAT: number;
|
|
export let OP_REALPATH: number;
|
|
export let OP_READ_DIR: number;
|
|
export let OP_RENAME: number;
|
|
export let OP_LINK: number;
|
|
export let OP_SYMLINK: number;
|
|
export let OP_READ_LINK: number;
|
|
export let OP_TRUNCATE: number;
|
|
export let OP_MAKE_TEMP_DIR: number;
|
|
export let OP_CWD: number;
|
|
export let OP_CONNECT_TLS: number;
|
|
export let OP_HOSTNAME: number;
|
|
export let OP_OPEN_PLUGIN: number;
|
|
export let OP_COMPILE: number;
|
|
export let OP_TRANSPILE: number;
|
|
export let OP_SIGNAL_BIND: number;
|
|
export let OP_SIGNAL_UNBIND: number;
|
|
export let OP_SIGNAL_POLL: number;
|
|
|
|
/** **WARNING:** This is only available during the snapshotting process and is
|
|
* unavailable at runtime. */
|
|
export let OP_FETCH_ASSET: number;
|
|
|
|
const PLUGIN_ASYNC_HANDLER_MAP: Map<number, AsyncHandler> = new Map();
|
|
|
|
export function setPluginAsyncHandler(
|
|
opId: number,
|
|
handler: AsyncHandler
|
|
): void {
|
|
PLUGIN_ASYNC_HANDLER_MAP.set(opId, handler);
|
|
}
|
|
|
|
export function getAsyncHandler(opName: string): (msg: Uint8Array) => void {
|
|
switch (opName) {
|
|
case "OP_WRITE":
|
|
case "OP_READ":
|
|
return minimal.asyncMsgFromRust;
|
|
default:
|
|
return json.asyncMsgFromRust;
|
|
}
|
|
}
|