| 444 | } |
| 445 | |
| 446 | void workerDeliverConnect(xsMachine *the, modWorker worker, uint8_t *message, uint16_t messageLength) |
| 447 | { |
| 448 | xsBeginHost(the); |
| 449 | |
| 450 | xsmcVars(4); |
| 451 | |
| 452 | xsVar(0) = xsmcNewArray(0); // ports = [] |
| 453 | xsVar(1) = xsNewHostObject(xs_emptyworker_destructor); // port = {} |
| 454 | xsmcSetHostData(xsVar(1), worker); |
| 455 | worker->workerPort = xsVar(1); |
| 456 | xsRemember(worker->workerPort); |
| 457 | xsCall1(xsVar(0), xsID_push, xsVar(1)); |
| 458 | |
| 459 | xsVar(2) = xsmcNewObject(); // e = {} |
| 460 | xsmcSet(xsVar(2), xsID_ports, xsVar(0)); // e.ports = ports |
| 461 | |
| 462 | xsVar(3) = xsNewHostFunction(xs_worker_postfromworker, 1); // postMessage |
| 463 | xsmcSet(xsVar(1), xsID_postMessage, xsVar(3)); // port.postMessage = postMessage |
| 464 | xsCall1(xsGlobal, xsID_onconnect, xsVar(2)); // onconnect(e) |
| 465 | |
| 466 | //@@ this eats any exception in onconnect... should be propagated? |
| 467 | xsEndHost(the); |
| 468 | } |
| 469 | |
| 470 | int workerStart(modWorker worker) |
| 471 | { |