@jack120/test 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/index.d.ts +1140 -0
  2. package/package.json +4 -1
  3. package/.gitmodules +0 -3
  4. package/.prettierrc +0 -6
  5. package/.vscode/c_cpp_properties.json +0 -14
  6. package/.vscode/launch.json +0 -24
  7. package/.vscode/settings.json +0 -8
  8. package/CMakeLists.txt +0 -52
  9. package/adamas-config.json +0 -5
  10. package/external/CMakeLists.txt +0 -1
  11. package/external/Unity-NodeJS-RPC/CMakeLists.txt +0 -13
  12. package/external/Unity-NodeJS-RPC/README.md +0 -1
  13. package/external/Unity-NodeJS-RPC/RpcClient.cpp +0 -265
  14. package/external/Unity-NodeJS-RPC/include/RpcClient.h +0 -118
  15. package/external/Unity-NodeJS-RPC/main.cpp +0 -76
  16. package/external/Unity-NodeJS-RPC/nlohmann/json.hpp +0 -25526
  17. package/external/Unity-NodeJS-RPC/server/Program.cs +0 -52
  18. package/external/Unity-NodeJS-RPC/server/json.cs +0 -66
  19. package/external/Unity-NodeJS-RPC/server/rpc.cs +0 -369
  20. package/external/Unity-NodeJS-RPC/server/sample1.csproj +0 -10
  21. package/external/Unity-NodeJS-RPC/server/sample1.sln +0 -24
  22. package/external/Unity-NodeJS-RPC/server/unity/RpcUnity.cs.txt +0 -60
  23. package/index.ts +0 -36
  24. package/library/adamas-types.d.ts +0 -70
  25. package/library/debug.ts +0 -7
  26. package/library/device.ts +0 -279
  27. package/library/entity.ts +0 -35
  28. package/library/index.ts +0 -19
  29. package/library/interaction/interaction.ts +0 -281
  30. package/library/networking/state-sync.ts +0 -62
  31. package/library/physics/collider.ts +0 -252
  32. package/library/physics/rigidbody.ts +0 -119
  33. package/library/render/camera.ts +0 -172
  34. package/library/render/light.ts +0 -169
  35. package/library/render/material.ts +0 -258
  36. package/library/render/mesh.ts +0 -208
  37. package/library/render/primitives.ts +0 -76
  38. package/library/render/renderable.ts +0 -137
  39. package/library/render/renderer.ts +0 -124
  40. package/library/render/scene.ts +0 -89
  41. package/library/render/texture.ts +0 -247
  42. package/library/render/transform.ts +0 -259
  43. package/library/rpc.ts +0 -81
  44. package/library/utilities/base64.ts +0 -63
  45. package/loader-template.ts +0 -419
  46. package/native.cc +0 -111
  47. package/project.adamas.json +0 -457
  48. package/rusk.glb +0 -0
  49. package/samples/device-sample.ts +0 -30
  50. package/samples/interaction-sample.ts +0 -134
  51. package/samples/physics-sample.ts +0 -39
  52. package/samples/rendering-sample.ts +0 -88
  53. package/samples/spawn-cube.ts +0 -422
  54. package/samples/state-sync-sample.ts +0 -25
  55. package/tsconfig.json +0 -20
  56. /package/{library → dist}/native-bindings-osx.node +0 -0
  57. /package/{library → dist}/native-bindings-win.node +0 -0
package/library/rpc.ts DELETED
@@ -1,81 +0,0 @@
1
- import { platform } from "node:os";
2
-
3
- const addon =
4
- platform() === "darwin"
5
- ? require("./native-bindings-osx.node")
6
- : require("./native-bindings-win.node");
7
-
8
- export class RpcClient {
9
- static Init() {
10
- addon.Rpc_RegisterCbHandler((callbackId: number, argsJson: string) => {
11
- let kvJson = JSON.parse(argsJson);
12
- let objJson = RpcClient.keyValueToObject(
13
- kvJson["keys"],
14
- kvJson["values"],
15
- );
16
- try {
17
- RpcClient.callbackRegistry[callbackId](objJson);
18
- } catch (error) {
19
- console.error(`${error}`);
20
- }
21
- });
22
- }
23
-
24
- static RegisterCallback(callback: (...args: any[]) => any): number {
25
- let callbackId: number = Number(
26
- RpcClient.Call("_RPC::AllocateCallback", {
27
- clientId: RpcClient.GetClientId(),
28
- }),
29
- );
30
- RpcClient.callbackRegistry[callbackId] = callback;
31
- return callbackId;
32
- }
33
-
34
- /**
35
- *
36
- * @param funcName RPC function name to call
37
- * @param args Arguments of RPC in the format: `{parameter0: value0, parameter1: value1}`
38
- * @returns The value returned from RPC function in string type
39
- */
40
- static Call(funcName: string, args: object): any {
41
- if (!this.initialized) {
42
- this.initialized = true;
43
- RpcClient.Init();
44
- }
45
- const processedArgs: Record<string, any> = {};
46
- for (const [key, value] of Object.entries(args)) {
47
- if (typeof value === "function") {
48
- processedArgs[key] = RpcClient.RegisterCallback(value);
49
- } else {
50
- processedArgs[key] = value;
51
- }
52
- }
53
- return JSON.parse(
54
- addon.Rpc_Call(
55
- funcName,
56
- JSON.stringify(this.objectToKeyValue(processedArgs)),
57
- ),
58
- ).result;
59
- }
60
-
61
- static GetClientId(): number {
62
- return Number(addon.Rpc_GetClientId());
63
- }
64
-
65
- static objectToKeyValue(obj: Record<string, any>) {
66
- const keys = Object.keys(obj);
67
- const values = keys.map((key) => obj[key]);
68
- return { keys, values };
69
- }
70
-
71
- static keyValueToObject(keys: string[], values: any[]): Record<string, any> {
72
- const obj: Record<string, any> = {};
73
- keys.forEach((key, index) => {
74
- obj[key] = values[index];
75
- });
76
- return obj;
77
- }
78
-
79
- static callbackRegistry: { [key: number]: (...args: any[]) => any } = {};
80
- static initialized = false;
81
- }
@@ -1,63 +0,0 @@
1
- const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
2
-
3
- // Use a lookup table to find the index.
4
- const lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);
5
- for (let i = 0; i < chars.length; i++) {
6
- lookup[chars.charCodeAt(i)] = i;
7
- }
8
-
9
- export const base64Encode = (arraybuffer: ArrayBufferLike): string => {
10
- let bytes = new Uint8Array(arraybuffer),
11
- i,
12
- len = bytes.length,
13
- base64 = '';
14
-
15
- for (i = 0; i < len; i += 3) {
16
- base64 += chars[bytes[i] >> 2];
17
- base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];
18
- base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];
19
- base64 += chars[bytes[i + 2] & 63];
20
- }
21
-
22
- if (len % 3 === 2) {
23
- base64 = base64.substring(0, base64.length - 1) + '=';
24
- } else if (len % 3 === 1) {
25
- base64 = base64.substring(0, base64.length - 2) + '==';
26
- }
27
-
28
- return base64;
29
- };
30
-
31
- export const base64Decode = (base64: string): ArrayBufferLike => {
32
- let bufferLength = base64.length * 0.75,
33
- len = base64.length,
34
- i,
35
- p = 0,
36
- encoded1,
37
- encoded2,
38
- encoded3,
39
- encoded4;
40
-
41
- if (base64[base64.length - 1] === '=') {
42
- bufferLength--;
43
- if (base64[base64.length - 2] === '=') {
44
- bufferLength--;
45
- }
46
- }
47
-
48
- const arraybuffer = new ArrayBuffer(bufferLength),
49
- bytes = new Uint8Array(arraybuffer);
50
-
51
- for (i = 0; i < len; i += 4) {
52
- encoded1 = lookup[base64.charCodeAt(i)];
53
- encoded2 = lookup[base64.charCodeAt(i + 1)];
54
- encoded3 = lookup[base64.charCodeAt(i + 2)];
55
- encoded4 = lookup[base64.charCodeAt(i + 3)];
56
-
57
- bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);
58
- bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
59
- bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);
60
- }
61
-
62
- return arraybuffer;
63
- };
@@ -1,419 +0,0 @@
1
- import {
2
- CameraManager,
3
- ColliderManager,
4
- Entity,
5
- EntityManager,
6
- GrabInteractableManager,
7
- LightManager,
8
- LightType,
9
- MaterialManager,
10
- MeshManager,
11
- quat,
12
- RenderableManager,
13
- RigidbodyManager,
14
- ShaderProperties,
15
- ShaderType,
16
- TextureFormat,
17
- TextureManager,
18
- TransformManager,
19
- vec3,
20
- vec4,
21
- } from "@adamas/index";
22
-
23
- export const LoadAsset = async () => {
24
- const assetRecord = new Map<string, object>();
25
-
26
- // <ASSET_IMPORT>
27
-
28
- const projectFile = (await import("./project.adamas.json")).default;
29
-
30
- // type Properties = Exclude<(typeof scene.properties)[number][number], string>;
31
- // type Transforms = Exclude<(typeof scene.transforms)[number][number], string>;
32
- // type Renderables = Exclude<
33
- // (typeof scene.renderables)[number][number],
34
- // string
35
- // >;
36
- // type Lights = Exclude<(typeof scene.lights)[number][number], string>;
37
- // type Cameras = Exclude<(typeof scene.cameras)[number][number], string>;
38
- // type Colliders = Exclude<(typeof scene.colliders)[number][number], string>;
39
- // type Rigidbodies = Exclude<
40
- // (typeof scene.rigidbodies)[number][number],
41
- // string
42
- // >;
43
- // type Grabbles = Exclude<(typeof scene.grabbles)[number][number], string>;
44
-
45
- type Properties = {
46
- componentType: string;
47
- name: string;
48
- };
49
- type Transforms = {
50
- componentType: string;
51
- parent: string;
52
- children: string[];
53
- localScale: {
54
- x: number;
55
- y: number;
56
- z: number;
57
- };
58
- localRotation: {
59
- isEuler: boolean;
60
- _x: number;
61
- _y: number;
62
- _z: number;
63
- _order: string;
64
- };
65
- localPosition: {
66
- x: number;
67
- y: number;
68
- z: number;
69
- };
70
- };
71
- type Renderables = {
72
- componentType: string;
73
- layerMask: number;
74
- receiveShadows: boolean;
75
- castShadows: number;
76
- culling: boolean;
77
- mesh: string;
78
- material: string;
79
- };
80
- type Lights = {
81
- componentType: string;
82
- color: {
83
- x: number;
84
- y: number;
85
- z: number;
86
- };
87
- cullingMask: number;
88
- intensity: number;
89
- range: number;
90
- shadows: number;
91
- lightType: number;
92
- spotAngle: number;
93
- isSpotAngleDegree: boolean;
94
- };
95
- type Cameras = {
96
- componentType: string;
97
- cullingMask: number;
98
- projectionType: number;
99
- projectionFov: number;
100
- projectionAspectRatio: number;
101
- projectionNear: number;
102
- projectionFar: number;
103
- renderTexture: string;
104
- orthoLeft: number;
105
- orthoRight: number;
106
- orthoBottom: number;
107
- orthoTop: number;
108
- orthoNear: number;
109
- orthoFar: number;
110
- };
111
- type Colliders = {
112
- componentType: string;
113
- colliders: (
114
- | {
115
- isTrigger: boolean;
116
- colliderType: string;
117
- center: {
118
- x: number;
119
- y: number;
120
- z: number;
121
- };
122
- size: {
123
- x: number;
124
- y: number;
125
- z: number;
126
- };
127
- radius?: undefined;
128
- height?: undefined;
129
- }
130
- | {
131
- isTrigger: boolean;
132
- colliderType: string;
133
- center: {
134
- x: number;
135
- y: number;
136
- z: number;
137
- };
138
- radius: number;
139
- size?: undefined;
140
- height?: undefined;
141
- }
142
- | {
143
- isTrigger: boolean;
144
- colliderType: string;
145
- center: {
146
- x: number;
147
- y: number;
148
- z: number;
149
- };
150
- height: number;
151
- radius: number;
152
- size?: undefined;
153
- }
154
- )[];
155
- };
156
- type Rigidbodies = {
157
- componentType: string;
158
- angularDamping: number;
159
- isKinematic: boolean;
160
- linearDamping: number;
161
- mass: number;
162
- useGravity: boolean;
163
- };
164
- type Grabbles = {
165
- componentType: string;
166
- throwOnDetach: boolean;
167
- trackPosition: boolean;
168
- trackRotation: boolean;
169
- trackScale: boolean;
170
- attachEntity: string;
171
- };
172
-
173
- const scene = projectFile.scene;
174
- const properties = new Map(scene.properties as [string, Properties][]);
175
- const transforms = new Map(scene.transforms as [string, Transforms][]);
176
- const renderables = new Map(scene.renderables as [string, Renderables][]);
177
- const lights = new Map(scene.lights as [string, Lights][]);
178
- const cameras = new Map(scene.cameras as [string, Cameras][]);
179
- const colliders = new Map(scene.colliders as [string, Colliders][]);
180
- const rigidbodies = new Map(scene.rigidbodies as [string, Rigidbodies][]);
181
- const grabbles = new Map(scene.grabbles as [string, Grabbles][]);
182
-
183
- const entityMap = new Map<string, Entity>();
184
- for (const entity of scene.entities) {
185
- const property = properties.get(entity)!;
186
- const entityId = EntityManager.Create(property.name);
187
- entityMap.set(entity, entityId);
188
- }
189
-
190
- for (const entity of scene.entities) {
191
- const currEntity = entityMap.get(entity)!;
192
-
193
- const transform = transforms.get(entity);
194
- if (transform) {
195
- if (transform.parent != "root") {
196
- TransformManager.SetParent(
197
- currEntity,
198
- entityMap.get(transform.parent)!,
199
- );
200
- }
201
-
202
- TransformManager.SetLocalPosition(
203
- currEntity,
204
- vec3.fromValues(
205
- transform.localPosition.x,
206
- transform.localPosition.y,
207
- transform.localPosition.z,
208
- ),
209
- );
210
- TransformManager.SetLocalScale(
211
- currEntity,
212
- vec3.fromValues(
213
- transform.localScale.x,
214
- transform.localScale.y,
215
- transform.localScale.z,
216
- ),
217
- );
218
- TransformManager.SetLocalRotation(
219
- currEntity,
220
- quat.fromEuler(
221
- [0, 0, 0, 0],
222
- transform.localRotation._x,
223
- transform.localRotation._y,
224
- transform.localRotation._z,
225
- ),
226
- );
227
- }
228
-
229
- const renderable = renderables.get(entity);
230
- if (renderable && renderable.mesh && renderable.material) {
231
- RenderableManager.Create(currEntity);
232
-
233
- const meshAsset = assetRecord.get(
234
- renderable.mesh,
235
- ) as typeof import(".mesh").default;
236
-
237
- if (meshAsset) {
238
- const mesh = MeshManager.Create();
239
- MeshManager.SetVertices(mesh, meshAsset.base64Vertices);
240
- MeshManager.SetTriangles(mesh, meshAsset.base64Indices);
241
-
242
- if (meshAsset.base64Uvs) MeshManager.SetUVs(mesh, meshAsset.base64Uvs);
243
- if (meshAsset.base64Normals)
244
- MeshManager.SetNormals(mesh, meshAsset.base64Normals);
245
- RenderableManager.SetMesh(currEntity, mesh);
246
-
247
- RenderableManager.SetCulling(currEntity, renderable.culling);
248
- }
249
-
250
- const materialAsset = assetRecord.get(
251
- renderable.material,
252
- ) as typeof import(".mat").default;
253
-
254
- if (materialAsset) {
255
- const matHandle = MaterialManager.Create(ShaderType.URP_LIT);
256
- MaterialManager.SetColor(
257
- matHandle,
258
- ShaderProperties.BaseColor,
259
- vec4.fromValues(
260
- materialAsset.baseColor.x,
261
- materialAsset.baseColor.y,
262
- materialAsset.baseColor.z,
263
- materialAsset.baseColor.w,
264
- ),
265
- );
266
-
267
- if (materialAsset.baseMap) {
268
- const texHandle = TextureManager.Create2D(1, 1, TextureFormat.RGBA32);
269
- const texAsset = assetRecord.get(
270
- materialAsset.baseMap,
271
- )! as typeof import(".tex").default;
272
-
273
- TextureManager.LoadImageBase64(texHandle, texAsset.base64Image);
274
- MaterialManager.SetTexture(
275
- matHandle,
276
- ShaderProperties.BaseMap,
277
- texHandle,
278
- );
279
- }
280
-
281
- if (materialAsset.detailNormalMap) {
282
- }
283
-
284
- MaterialManager.SetColor(
285
- matHandle,
286
- ShaderProperties.EmissionColor,
287
- vec4.fromValues(
288
- materialAsset.emissionColor.x,
289
- materialAsset.emissionColor.y,
290
- materialAsset.emissionColor.z,
291
- 1,
292
- ),
293
- );
294
- if (materialAsset.emissionMap) {
295
- }
296
-
297
- RenderableManager.SetMaterial(currEntity, matHandle);
298
- }
299
- }
300
-
301
- const light = lights.get(entity);
302
- if (light) {
303
- LightManager.Create(currEntity, light.lightType);
304
- LightManager.SetColor(
305
- currEntity,
306
- vec3.fromValues(light.color.x, light.color.y, light.color.z),
307
- );
308
- LightManager.SetCullingMask(currEntity, light.cullingMask);
309
- LightManager.SetIntensity(currEntity, light.intensity);
310
- LightManager.SetRange(currEntity, light.range);
311
- LightManager.SetShadows(currEntity, light.shadows);
312
-
313
- if (light.lightType == LightType.Spot)
314
- LightManager.SetSpotAngle(currEntity, light.spotAngle);
315
- }
316
-
317
- const camera = cameras.get(entity);
318
- if (camera) {
319
- CameraManager.Create(currEntity);
320
- CameraManager.SetCullingMask(currEntity, camera.cullingMask);
321
-
322
- if (camera.projectionType == 0) {
323
- CameraManager.SetProjection(
324
- currEntity,
325
- 0,
326
- camera.projectionFov,
327
- camera.projectionAspectRatio,
328
- camera.projectionNear,
329
- camera.projectionFar,
330
- );
331
- } else {
332
- CameraManager.SetOrthographic(
333
- currEntity,
334
- camera.orthoLeft,
335
- camera.orthoRight,
336
- camera.orthoBottom,
337
- camera.orthoTop,
338
- camera.orthoNear,
339
- camera.orthoFar,
340
- );
341
- }
342
- }
343
-
344
- const collider = colliders.get(entity);
345
- if (collider) {
346
- collider.colliders.forEach((c) => {
347
- switch (c.colliderType) {
348
- case "Box": {
349
- const handle = ColliderManager.CreateBox(currEntity);
350
- ColliderManager.SetBoxColliderCenter(
351
- handle,
352
- vec3.fromValues(c.center.x, c.center.y, c.center.z),
353
- );
354
- ColliderManager.SetBoxColliderSize(
355
- handle,
356
- vec3.fromValues(c.size!.x, c.size!.y, c.size!.z),
357
- );
358
- break;
359
- }
360
- case "Sphere": {
361
- const handle = ColliderManager.CreateSphere(currEntity);
362
- ColliderManager.SetSphereColliderCenter(
363
- handle,
364
- vec3.fromValues(c.center.x, c.center.y, c.center.z),
365
- );
366
- ColliderManager.SetSphereColliderRadius(handle, c.radius!);
367
- break;
368
- }
369
- case "Capsule": {
370
- const handle = ColliderManager.CreateCapsule(currEntity);
371
- ColliderManager.SetCapsuleColliderCenter(
372
- handle,
373
- vec3.fromValues(c.center.x, c.center.y, c.center.z),
374
- );
375
- ColliderManager.SetCapsuleColliderRadius(handle, c.radius!);
376
- ColliderManager.SetCapsuleColliderHeight(handle, c.height!);
377
- break;
378
- }
379
- }
380
- });
381
- }
382
-
383
- const rigidbody = rigidbodies.get(entity);
384
- if (rigidbody) {
385
- RigidbodyManager.Create(currEntity);
386
- RigidbodyManager.SetAngularDamping(currEntity, rigidbody.angularDamping);
387
- RigidbodyManager.SetIsKinematic(currEntity, rigidbody.isKinematic);
388
- RigidbodyManager.SetLinearDamping(currEntity, rigidbody.linearDamping);
389
- RigidbodyManager.SetMass(currEntity, rigidbody.mass);
390
- RigidbodyManager.SetUseGravity(currEntity, rigidbody.useGravity);
391
- }
392
-
393
- const grabble = grabbles.get(entity);
394
- if (grabble) {
395
- GrabInteractableManager.Create(currEntity);
396
-
397
- GrabInteractableManager.SetThrowOnDetach(
398
- currEntity,
399
- grabble.throwOnDetach,
400
- );
401
- GrabInteractableManager.SetTrackPosition(
402
- currEntity,
403
- grabble.trackPosition,
404
- );
405
- GrabInteractableManager.SetTrackRotation(
406
- currEntity,
407
- grabble.trackRotation,
408
- );
409
- GrabInteractableManager.SetTrackScale(currEntity, grabble.trackScale);
410
-
411
- if (grabble.attachEntity) {
412
- GrabInteractableManager.SetAttachEntity(
413
- currEntity,
414
- entityMap.get(grabble.attachEntity)!,
415
- );
416
- }
417
- }
418
- }
419
- };
package/native.cc DELETED
@@ -1,111 +0,0 @@
1
- #include <napi.h>
2
- #include <RpcClient.h>
3
-
4
- struct TsfnContext
5
- {
6
- TsfnContext(Napi::Env env): deferred(Napi::Promise::Deferred::New(env)) {}
7
-
8
- // Native Promise returned to JavaScript
9
- Napi::Promise::Deferred deferred;
10
-
11
- Napi::ThreadSafeFunction tsfn;
12
-
13
- static void Destroy(Napi::Env env, void* finalizeData, TsfnContext* context)
14
- {
15
- // Resolve the Promise previously returned to JS via the CreateTSFN method.
16
- context->deferred.Resolve(Napi::Boolean::New(env, true));
17
- delete context;
18
- }
19
- };
20
-
21
- Napi::Number RpcGetClientId(const Napi::CallbackInfo& info)
22
- {
23
- Napi::Env env = info.Env();
24
- return Napi::Number::New(env, RpcClient::Get().GetClientId());
25
- }
26
-
27
- Napi::Value RpcCall(const Napi::CallbackInfo& info)
28
- {
29
- Napi::Env env = info.Env();
30
- if (info.Length() != 2)
31
- {
32
- Napi::TypeError::New(env, "Wrong number of arguments")
33
- .ThrowAsJavaScriptException();
34
- return env.Null();
35
- }
36
-
37
- if (!info[0].IsString() || !info[1].IsString())
38
- {
39
- Napi::TypeError::New(env, "Wrong arguments")
40
- .ThrowAsJavaScriptException();
41
- return env.Null();
42
- }
43
-
44
- std::string functionName = info[0].As<Napi::String>().Utf8Value();
45
- std::string jsonArgs = info[1].As<Napi::String>().Utf8Value();
46
-
47
- std::string resultStr = RpcClient::Get().Call(functionName, jsonArgs);
48
- return Napi::String::New(env, resultStr);
49
- }
50
-
51
- Napi::Value RpcRegisterCbHandler(const Napi::CallbackInfo& info)
52
- {
53
- Napi::Env env = info.Env();
54
- if (info.Length() != 1)
55
- {
56
- Napi::TypeError::New(env, "Wrong number of arguments")
57
- .ThrowAsJavaScriptException();
58
- return env.Null();
59
- }
60
-
61
- if (!info[0].IsFunction())
62
- {
63
- Napi::TypeError::New(env, "Wrong arguments")
64
- .ThrowAsJavaScriptException();
65
- return env.Null();
66
- }
67
-
68
- TsfnContext* context = new TsfnContext(env);
69
-
70
- context->tsfn = Napi::ThreadSafeFunction::New(
71
- env, // Environment
72
- info[0].As<Napi::Function>(), // JS function from caller
73
- "TSFN", // Resource name
74
- 0, // Max queue size (0 = unlimited).
75
- 1, // Initial thread count
76
- context, // Context,
77
- TsfnContext::Destroy, // Finalizer
78
- (void*)nullptr // Finalizer data
79
- );
80
-
81
- RpcClient::Get().RegisterCallbackHandler([=] (int callbackId, const std::string& jsonArgs)
82
- {
83
- napi_status status = context->tsfn.BlockingCall(context,
84
- [=](Napi::Env env, Napi::Function jsCallback, TsfnContext* ctx) {
85
- jsCallback.Call({
86
- Napi::Number::New(env, callbackId),
87
- Napi::String::New(env, jsonArgs)
88
- });
89
- }
90
- );
91
-
92
- if (status != napi_ok) {
93
- Napi::Error::Fatal("ThreadEntry",
94
- "Napi::ThreadSafeNapi::Function.BlockingCall() failed"
95
- );
96
- }
97
- });
98
-
99
- return context->deferred.Promise();
100
- }
101
-
102
- static Napi::Object Init(Napi::Env env, Napi::Object exports) {
103
- RpcClient::Get(6969, true);
104
-
105
- exports.Set(Napi::String::New(env, "Rpc_Call"), Napi::Function::New(env, RpcCall));
106
- exports.Set(Napi::String::New(env, "Rpc_RegisterCbHandler"), Napi::Function::New(env, RpcRegisterCbHandler));
107
- exports.Set(Napi::String::New(env, "Rpc_GetClientId"), Napi::Function::New(env, RpcGetClientId));
108
- return exports;
109
- }
110
-
111
- NODE_API_MODULE(hello, Init)