Arquitectura del plugin samp-node y libnode embebido

Arquitectura del plugin samp-node y libnode embebido An architecture diagram generated by Archify. sampgdk · puente estatico · Host: open.mp sampgdk puente estatico Servidor open.mp · host y nativos · Host: open.mp Servidor open.mp host y nativos Load / Unload · entrada del plugin · Exportaciones del plugin Load / Unload entrada del plugin OnPublicCall · despacho callbacks · Exportaciones del plugin OnPublicCall despacho callbacks nodeimpl.cpp · init y Tick · Runtime embebido nodeimpl.cpp init y Tick resource.cpp · carga bootstrap · Runtime embebido resource.cpp carga bootstrap libnode y V8 · libreria Node 22 · Runtime embebido libnode y V8 libreria Node 22 events.cpp · registro eventos · Eventos y marshalling events.cpp registro eventos natives.cpp · args nativos · Eventos y marshalling natives.cpp args nativos callbacks.cpp · args public · Eventos y marshalling callbacks.cpp args public modulo entry_file · entrada del script · Capa de recursos JS modulo entry_file entrada del script @infernus/core · motor de eventos · Capa de recursos JS @infernus/core motor de eventos objeto samp global · superficie JS · Capa de recursos JS objeto samp global superficie JS carga el plugin PLUGIN_EXPORT Initialize LoadResource CreateEnv import dinamico register / on OnPublicCall events[name]->call llama al trigger callNative callPublic InvokeNativeArray Host: open.mp Exportaciones del plugin Runtime embebido Eventos y marshalling Capa de recursos JS Legend Frontend Backend Cloud

Exportaciones y orden de arranque

  • • Load() lee samp-node.json y luego Log::Init, sampgdk::Load, Initialize y LoadResource
  • • Supports() declara soporte de nativos AMX y PROCESS_TICK
  • • OnPublicCall consulta js_calling_public para evitar recursion; AmxLoad registra SAMPNode_CallEvent

libnode embebido y bootstrap

  • • InitializeOncePerProcess, luego MultiIsolatePlatform::Create(4), NewIsolate y un uv_loop
  • • functions::init inyecta el samp global y CreateEnvironment carga el bootstrap
  • • bootstrap fija ipv4first, importa entry_file y __internal_esmLoaded libera la espera

Bucle de un hilo y puente sincrono

  • • Sin hilo Node aparte: ProcessTick por frame ejecuta microtareas, uv_run(NOWAIT), DrainTasks
  • • La Promise de un listener async se resuelve girando el bucle de eventos y luego se lee
  • • callNative usa FindNative con marshalling; callPublic recorre cada instancia AMX