Skip to content

Commit

Permalink
Update version to 4.0.0
Browse files Browse the repository at this point in the history
- Some naming adjustments
  • Loading branch information
kaisalmen committed Oct 1, 2024
1 parent c81982c commit 85f4a4d
Show file tree
Hide file tree
Showing 11 changed files with 54 additions and 51 deletions.
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Changelog

## 3.1.0 - 2024-10-01
## 4.0.0 - 2024-10-01

- ComChannelEndpoint has been extracted from WorkerTask
- Now Worker, MessageChannel or DedicatedWorkerGlobalScope can be channel endpoints. Both ends of the communication channel can use the same implementation to send message and await responses if needed.
Expand Down
10 changes: 5 additions & 5 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions packages/examples/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
"dependencies": {
"lil-gui": "~0.19.2",
"three": "~0.169.0",
"wtd-core": "~3.1.0",
"wtd-three-ext": "~3.1.0",
"wtd-core": "~4.0.0",
"wtd-three-ext": "~4.0.0",
"wwobjloader2": "6.2.1"
},
"devDependencies": {
Expand Down
8 changes: 4 additions & 4 deletions packages/examples/src/com/WorkerCom.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ class HelloWorldStandardWorkerExample {
endpointName: 'Com1Worker',
endpointId: 1,
endpointConfig: {
$type: 'WorkerConfigDirect',
worker: com1Worker
$type: 'DirectImplConfig',
impl: com1Worker
},
verbose: true
});
Expand All @@ -49,8 +49,8 @@ class HelloWorldStandardWorkerExample {
endpointName: 'Com2Worker',
endpointId: 2,
endpointConfig: {
$type: 'WorkerConfigDirect',
worker: com2Worker
$type: 'DirectImplConfig',
impl: com2Worker
},
verbose: true
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ class ExampleComRouterWorker implements ComRouter {
new ComChannelEndpoint({
endpointId: 2000,
endpointConfig: {
$type: 'WorkerConfigDirect',
worker: self
$type: 'DirectImplConfig',
impl: self
},
verbose: true,
endpointName: 'HelloWorldComChannelEndpointWorker'
Expand Down
7 changes: 4 additions & 3 deletions packages/wtd-core/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ Build applications with workers with less boiler plate code.

There are multiple examples available demonstarting the features described above (listed from simpler to more advanced):

- **ComChannelEndpoint: Hello World**: [html](https://github.com/kaisalmen/wtd/blob/main/packages/examples/helloWorldComChannelEndpoint.html), [ts](https://github.com/kaisalmen/wtd/blob/main/packages/examples/src/helloWorld/HelloWorldComChannelEndpoint.ts), [worker](https://github.com/kaisalmen/wtd/blob/main/packages/examples/src/worker/HelloWorldComChannelEndpointWorker.ts)
- **WorkerTask: Hello World**: [html](https://github.com/kaisalmen/wtd/blob/main/packages/examples/helloWorldWorkerTask.html), [ts](https://github.com/kaisalmen/wtd/blob/main/packages/examples/src/helloWorld/HelloWorldWorkerTask.ts), [worker](https://github.com/kaisalmen/wtd/blob/main/packages/examples/src/worker/HelloWorldWorker.ts)
- **WorkerTaskDirector: Hello World**: [html](https://github.com/kaisalmen/wtd/blob/main/packages/examples/helloWorldWorkerTaskDirector.html), [ts](https://github.com/kaisalmen/wtd/blob/main/packages/examples/src/helloWorld/helloWorldWorkerTaskDirector.ts), [worker](https://github.com/kaisalmen/wtd/blob/main/packages/examples/src/worker/HelloWorldWorker.ts)
- **WorkerTask: Inter-Worker Communication**: [html](https://github.com/kaisalmen/wtd/blob/main/packages/examples/workerCom.html), [ts](https://github.com/kaisalmen/wtd/blob/main/packages/examples/src/com/WorkerCom.ts), **Worker**: [1](https://github.com/kaisalmen/wtd/blob/main/packages/examples/src/worker/Com1Worker.ts) and [2](https://github.com/kaisalmen/wtd/blob/main/packages/examples/src/worker/Com2Worker.ts)
Expand All @@ -28,9 +29,9 @@ This shall give you an idea how you can use module worker with `WorkerTask` (der
```js
// let WorkerTask create the worker
const workerTask = new WorkerTask({
taskName,
workerId: 1,
workerConfig: {
endpointName,
endpointId: 1,
endpointConfig: {
$type: 'WorkerConfigParams',
url: new URL('./HelloWorldWorker.js', import.meta.url),
workerType: 'module',
Expand Down
2 changes: 1 addition & 1 deletion packages/wtd-core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "wtd-core",
"version": "3.1.0",
"version": "4.0.0",
"license": "MIT",
"type": "module",
"main": "./dist/index.js",
Expand Down
46 changes: 24 additions & 22 deletions packages/wtd-core/src/ComChannelEndpoint.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ export interface WorkerConfig {
}

export interface EndpointConfigDirect {
$type: 'WorkerConfigDirect';
worker: Worker | MessagePort | DedicatedWorkerGlobalScope;
$type: 'DirectImplConfig';
impl: Worker | MessagePort | DedicatedWorkerGlobalScope;
}

export interface AwaitHandler {
Expand Down Expand Up @@ -47,7 +47,7 @@ export class ComChannelEndpoint {
protected endpointConfig: WorkerConfig | EndpointConfigDirect;
protected verbose = false;

protected worker?: Worker | MessagePort | DedicatedWorkerGlobalScope;
protected impl?: Worker | MessagePort | DedicatedWorkerGlobalScope;
protected executionCounter = 0;
protected awaitAnswers = new Map<string, AwaitHandler[]>();

Expand All @@ -58,47 +58,47 @@ export class ComChannelEndpoint {
this.endpointName = config.endpointName;
}

getWorker() {
return this.worker;
getImpl() {
return this.impl;
}

connect(comRoutingHandler?: ComRouter) {
if (this.worker) {
if (this.impl) {
throw new Error('Worker already created. Aborting...');
}
if (this.endpointConfig.$type === 'WorkerConfigDirect') {
this.worker = this.endpointConfig.worker;
if (this.endpointConfig.$type === 'DirectImplConfig') {
this.impl = this.endpointConfig.impl;
} else {
if (this.endpointConfig.url !== undefined) {
if (this.endpointConfig.blob === true) {
this.worker = new Worker(this.endpointConfig.url);
this.impl = new Worker(this.endpointConfig.url);
}
else {
this.worker = new Worker((this.endpointConfig.url as URL).href, {
this.impl = new Worker((this.endpointConfig.url as URL).href, {
type: this.endpointConfig.workerType
});
}
}
}

if (!this.worker) {
if (!this.impl) {
throw new Error('No valid worker configuration was supplied. Aborting...');
}

this.worker.onmessage = (async (message) => {
this.impl.onmessage = (async (message) => {
if (comRoutingHandler !== undefined) {
comRoutingHandler.setComChannelEndpoint(this);
comRouting(comRoutingHandler, message);
}
this.processAwaitHandlerRemoval(message);
});
this.worker.onmessageerror = (async (msg) => {
this.impl.onmessageerror = (async (msg) => {
console.log(`Received errornuous message: ${msg}`);
Promise.reject(msg);
});

if (Object.hasOwn(this.worker ?? {}, 'onerror')) {
(this.worker as Worker).onerror = (async (message) => {
if (Object.hasOwn(this.impl ?? {}, 'onerror')) {
(this.impl as Worker).onerror = (async (message) => {
console.log(`Execution Aborted: ${message.error}`);
Promise.reject(message);
});
Expand All @@ -109,7 +109,7 @@ export class ComChannelEndpoint {
* This is only possible if the worker is available.
*/
sentMessage(def: WorkerMessageDef): Promise<WorkerMessage> {
if (this.worker === undefined) {
if (this.impl === undefined) {
return Promise.reject(new Error('No worker is available. Aborting...'));
}

Expand All @@ -135,7 +135,7 @@ export class ComChannelEndpoint {
log: this.verbose
}]);
}
this.worker?.postMessage(message, transferablesToWorker);
this.impl?.postMessage(message, transferablesToWorker);

if (def.awaitAnswer === false) {
resolve(WorkerMessage.createEmpty());
Expand Down Expand Up @@ -210,19 +210,21 @@ export class ComChannelEndpoint {
}

protected checkWorker(reject: (error: Error) => void) {
if (!this.worker) {
if (!this.impl) {
reject(new Error('No worker is available. Aborting...'));
return false;
}
return true;
}

dispose() {
if (this.worker !== undefined) {
if (Object.hasOwn(this.worker, 'terminate')) {
(this.worker as Worker).terminate();
if (this.impl !== undefined) {
if (Object.hasOwn(this.impl, 'terminate')) {
(this.impl as Worker).terminate();
} else if (Object.hasOwn(this.impl, 'start')) {
(this.impl as MessagePort).close();
} else {
(this.worker as MessagePort).close();
(this.impl as DedicatedWorkerGlobalScope).close();
}
}
}
Expand Down
12 changes: 6 additions & 6 deletions packages/wtd-core/src/WorkerTask.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ export class WorkerTask extends ComChannelEndpoint {
connect() {
super.connect();

if (this.worker !== undefined && Object.hasOwn(this.worker ?? {}, 'onerror')) {
(this.worker as Worker).onerror = (async (answer) => {
if (this.impl !== undefined && Object.hasOwn(this.impl ?? {}, 'onerror')) {
(this.impl as Worker).onerror = (async (answer) => {
console.log(`Execution Aborted: ${answer.error}`);
Promise.reject(answer);
this.markExecuting(false);
Expand All @@ -40,7 +40,7 @@ export class WorkerTask extends ComChannelEndpoint {

async initWorker(def: WorkerMessageDef): Promise<WorkerMessage> {
return new Promise((resolve, reject) => {
if (!this.worker) {
if (!this.impl) {
reject(new Error('No worker is available. Aborting...'));
this.markExecuting(false);
} else {
Expand All @@ -59,14 +59,14 @@ export class WorkerTask extends ComChannelEndpoint {
remove: true,
log: this.verbose,
}]);
this.worker.postMessage(message, transferablesToWorker);
this.impl.postMessage(message, transferablesToWorker);
}
});
}

async executeWorker(def: WorkerExecutionDef): Promise<WorkerMessage> {
return new Promise((resolve, reject) => {
if (!this.worker) {
if (!this.impl) {
reject(new Error('No worker is available. Aborting...'));
this.markExecuting(false);
} else {
Expand Down Expand Up @@ -100,7 +100,7 @@ export class WorkerTask extends ComChannelEndpoint {
});
}
this.updateAwaitHandlers(message, awaitHandlers);
this.worker.postMessage(message, transferablesToWorker);
this.impl.postMessage(message, transferablesToWorker);
}
});
}
Expand Down
6 changes: 3 additions & 3 deletions packages/wtd-three-ext/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ This shall give you an idea how you can use module worker with `WorkerTask` (der
```js
// let WorkerTask create the worker
const workerTask = new WorkerTask({
taskName,
workerId: 1,
workerConfig: {
endpointName,
endpointId: 1,
endpointConfig: {
$type: 'WorkerConfigParams',
url: new URL('./HelloWorldWorker.js', import.meta.url),
workerType: 'module',
Expand Down
4 changes: 2 additions & 2 deletions packages/wtd-three-ext/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "wtd-three-ext",
"version": "3.1.0",
"version": "4.0.0",
"license": "MIT",
"type": "module",
"main": "./dist/index.js",
Expand Down Expand Up @@ -45,7 +45,7 @@
"npm": "10.8.3"
},
"dependencies": {
"wtd-core": "~3.1.0",
"wtd-core": "~4.0.0",
"three": "~0.169.0"
},
"devDependencies": {
Expand Down

0 comments on commit 85f4a4d

Please sign in to comment.