مكتبة InSim لـ Node.js مع دعم TypeScript.
يوفر Node InSim واجهة برمجة تطبيقات JavaScript للتواصل مع بروتوكول Live for Speed InSim عبر اتصال TCP. بعد الاتصال بمضيف LFS عبر اسم مضيف ومنفذ، ستتمكن من إرسال حزم InSim إلى المضيف واستقبال الحزم الواردة من المضيف.
جميع بنيات الحزم في Node InSim مطابقة للبنيات المحددة في بروتوكول InSim. يتم توثيق جميع فئات الحزم بجميع خصائصها وفقًا للمواصفات.
Node InSim متوافق مع الإصدار 9 من InSim.
قم بتثبيت حزمة node-insim NPM في تطبيق Node.js الخاص بك:
npm install --save node-insimأو إذا كنت تستخدم الغزل:
yarn add node-insimلمزيد من الوثائق التفصيلية لواجهة برمجة التطبيقات العامة، راجع https://simbroadcasts.github.io/node-insim/.
للاتصال بمضيف LFS، يجب عليك إدخال اسم المضيف الخاص به والمنفذ والاسم المختصر لتطبيق InSim الخاص بك.
يجب تكوين منفذ InSim في إعدادات مضيف LFS. تأكد أيضًا من السماح لعنوان IP العام الذي يتصل منه تطبيقك بالاتصال بمنفذ InSim الخاص بالمضيف.
import { InSim } from 'node-insim' ;
const inSim = new InSim ( ) ;
inSim . connect ( {
Host : '127.0.0.1' ,
Port : 29999 ,
IName : 'Node InSim App' ,
} ) ; للاتصال بمضيفين متعددين في وقت واحد، قم بإنشاء مثيل InSim جديد لكل مضيف.
import { InSim } from 'node-insim' ;
const inSim1 = new InSim ( ) ;
inSim1 . connect ( {
Host : '127.0.0.1' ,
Port : 29999 ,
IName : 'Node InSim App' ,
} ) ;
const inSim2 = new InSim ( ) ;
inSim2 . connect ( {
Host : '127.0.0.2' ,
Port : 30000 ,
IName : 'Node InSim App' ,
} ) ; افتراضيًا، يفتح Node InSim اتصال TCP. إذا كنت تريد استخدام UDP، فاضبط خيار Protocol على UDP في وظيفة connect .
import { InSim } from 'node-insim' ;
const inSim = new InSim ( ) ;
inSim . connect ( {
Host : '127.0.0.1' ,
Port : 29999 ,
IName : 'Node InSim App' ,
Protocol : 'UDP' ,
} ) ; يمكن إرسال حزم InSim باستخدام طريقة send() على مثيل فئة InSim ، والذي يأخذ وسيطة واحدة - مثيل فئة الحزمة.
إحدى الطرق السريعة لتعيين خصائص الحزمة هي نشرها في مُنشئ الفئة:
import { InSim } from 'node-insim' ;
import { IS_TINY , TinyType } from 'node-insim/packets' ;
const inSim = new InSim ( ) ;
inSim . connect ( {
Host : '127.0.0.1' ,
Port : 29999 ,
IName : 'Node InSim App' ,
} ) ;
inSim . send (
new IS_TINY ( {
ReqI : 1 ,
SubT : TinyType . TINY_PING ,
} ) ,
) ;هناك طريقة أخرى تتمثل في تعيين كل خاصية بعد إنشاء المثيل:
import { InSim } from 'node-insim' ;
import { IS_TINY , TinyType } from 'node-insim/packets' ;
const inSim = new InSim ( ) ;
inSim . connect ( {
Host : '127.0.0.1' ,
Port : 29999 ,
IName : 'Node InSim App' ,
} ) ;
const pingPacket = new IS_TINY ( ) ;
pingPacket . ReqI = 1 ;
pingPacket . SubT = TinyType . TINY_PING ;
inSim . send ( pingPacket ) ; تحتوي فئة InSim على أساليب مساعدة مفيدة لإرسال الرسائل إلى LFS.
inSim . sendLocalMessage ( 'Local message' ) ; inSim . sendMessage ( '/end' ) ; IS_MSTIS_MSX inSim . sendMessage ( 'This is a message' ) ; inSim . sendMessageToConnection ( 4 , 'This is a message targeting UCID 4' ) ; inSim . sendMessageToPlayer ( 4 , 'This is a message targeting PLID 4' ) ; تعرض فئة InSim طريقة on() ، والتي تُستخدم للاستماع إلى الحزم الواردة حسب نوعها.
import { InSim } from 'node-insim' ;
import type { IS_VER } from 'node-insim/packets' ;
import { PacketType } from 'node-insim/packets' ;
const inSim = new InSim ( ) ;
inSim . on ( PacketType . ISP_VER , onVersion ) ;
function onVersion ( packet : IS_VER ) {
console . log ( `Connected to LFS ${ packet . product } ${ packet . Version } ` ) ;
} يحتوي رد اتصال الحدث على الحزمة المستلمة والوسيطة الثانية الاختيارية - مثيل InSim الذي استقبل تلك الحزمة. يمكنك استخدام هذا المثيل لإرسال حزم إضافية ردًا على ذلك.
import { InSim } from 'node-insim' ;
import { PacketType } from 'node-insim/packets' ;
import type { IS_VER } from 'node-insim/packets' ;
const inSim = new InSim ( ) ;
inSim . on ( PacketType . ISP_VER , onVersion ) ;
function onVersion ( packet : IS_VER , inSim : InSim ) {
inSim . send (
new IS_TINY ( {
ReqI : 1 ,
SubT : TinyType . TINY_PING ,
} ) ,
) ;
} يمكنك استخدام وسيطة inSim في رد اتصال معالج الأحداث لتحديد المضيف المصدر للحزم المستلمة، على سبيل المثال من خلال خاصية options.Host .
وبدلاً من ذلك، يقبل مُنشئ فئة InSim وسيطة id اختيارية، والتي يمكن استخدامها أيضًا للتمييز بين اتصالات InSim.
import { InSim } from 'node-insim' ;
const inSim1 = new InSim ( 'Host One' ) ;
inSim1 . connect ( {
Host : '127.0.0.1' ,
Port : 29999 ,
IName : 'Node InSim App' ,
} ) ;
const inSim2 = new InSim ( 'Host Two' ) ;
inSim2 . connect ( {
Host : '127.0.0.2' ,
Port : 30000 ,
IName : 'Node InSim App' ,
} ) ;
inSim . on ( PacketType . ISP_VER , onVersion ) ;
function onVersion ( packet : IS_VER , inSim : InSim ) {
console . log ( `Connected to ${ inSim . options . Host } : ${ inSim . options . Port } ` ) ;
if ( inSim . id ) {
console . log ( `InSim connection ID: ${ inSim . id } ` ) ;
}
}يتم تحويل كافة السلاسل الموجودة في الحزم المستلمة أو المرسلة تلقائيًا من ترميز LFS إلى Unicode والعكس.
إذا كنت بحاجة إلى الوصول إلى السلسلة الأولية المشفرة بـ LFS في حزمة مستلمة، فاستخدم خاصية _raw في مثيل الحزمة، والتي تحتوي على كافة خصائص السلسلة غير المحولة.
import { InSim } from 'node-insim' ;
import { PacketType } from 'node-insim/packets' ;
import type { IS_ISM } from 'node-insim/packets' ;
const inSim = new InSim ( ) ;
inSim . on ( PacketType . ISP_ISM , ( packet : IS_ISM ) => {
console . log ( packet . HName ) ; // UTF-8 string - ^1Drifter Team ^7★ Server
console . log ( packet . _raw . HName ) ; // raw string - ^1Drifter Team ^7^J�� Serveru0000u0000u0000u0000
} ) ;عند إرسال قيمة سلسلة Unicode في حزمة، سيتم تشفير كل حرف في ترميز LFS الصحيح، حتى يتمكن LFS من عرض النص في رسالة أو زر.
import { InSim } from 'node-insim' ;
import { PacketType } from 'node-insim/packets' ;
import type { IS_MSL } from 'node-insim/packets' ;
const inSim = new InSim ( ) ;
inSim . on ( PacketType . ISP_VER , ( packet : IS_VER ) => {
inSim . send (
new IS_MSL ( {
Msg : 'čau světe' , // LFS will receive: ^Eèau svìte
} ) ,
) ;
} ) ; للاتصال بخدمة InSim Relay، استخدم طريقة connectRelay() . بمجرد الاتصال، يمكنك إرسال واستقبال حزم الترحيل. يوضح المثال التالي كيفية إظهار قائمة بالمضيفين المتصلين بـ InSim Relay:
import { InSim } from 'node-insim' ;
import { IR_HLR , IR_HOS , PacketType , HInfo } from 'node-insim/packets' ;
inSim . connectRelay ( ) ;
inSim . on ( 'connect' , ( ) => {
// Request a list of hosts
inSim . send ( new IR_HLR ( ) ) ;
} ) ;
inSim . on ( PacketType . IRP_HOS , ( packet : IR_HOS ) => {
// Log the name of each received host
packet . Info . forEach ( ( host : HInfo ) => {
console . log ( host . HName ) ;
} ) ;
} ) ;يمكن العثور على مزيد من المعلومات حول بروتوكول InSim Relay في سلسلة معلومات عميل InSim Relay في منتدى LFS.
import { OutGauge , OutGaugePack } from 'node-insim' ;
const outGauge = new OutGauge ( ) ;
outGauge . connect ( {
Host : '127.0.0.1' ,
Port : 29999 ,
} ) ;
outGauge . on ( 'packet' , ( data : OutGaugePack ) => {
console . clear ( ) ;
console . log ( data . RPM ) ;
} ) ; import { OutSim , OutSimPack } from 'node-insim' ;
const outSim = new OutSim ( ) ;
outSim . connect ( {
Host : '127.0.0.1' ,
Port : 29999 ,
} ) ;
outSim . on ( 'packet' , ( data ) => {
// Make sure the simple OutSimPack packet is really received, as opposed to OutSimPack2
if ( ! ( data instanceof OutSimPack ) ) {
return ;
}
console . clear ( ) ;
console . log ( data . PosX ) ;
} ) ; يستخدم Node InSim حزمة debug NPM لسجلات التصحيح. افتراضيًا، لا يقوم Node InSim بإخراج أي سجلات إلى الإخراج القياسي.
لتمكين التسجيل، استخدم متغير البيئة DEBUG عند تشغيل تطبيق InSim الخاص بك. جميع السجلات مسبوقة بـ node-insim . يمكنك استخدام أحرف البدل لتصفية السجلات التي تحتاجها.
DEBUG= * node insim.js # debug all messages
DEBUG=node-insim:tcp node insim.js # debug only TCP protocol messages يمكنك العثور على أمثلة للتطبيقات باستخدام Node InSim في مجلد الأمثلة.
| مثال | ||
|---|---|---|
| اتصال إنسيم | جافا سكريبت + سي جي إس | تايب سكريبت + ESM |
| اتصال InSim (مضيفون متعددون) | جافا سكريبت + سي جي إس | تايب سكريبت + ESM |
| اتصال InSim (UDP) | جافا سكريبت + سي جي إس | تايب سكريبت + ESM |
| تتابع InSim | جافا سكريبت + سي جي إس | تايب سكريبت + ESM |
| مقياس خارجي | جافا سكريبت + سي جي إس | تايب سكريبت + ESM |
| OutGauge مع أزرار InSim | جافا سكريبت + سي جي إس | تايب سكريبت + ESM |
| OutSim | جافا سكريبت + سي جي إس | تايب سكريبت + ESM |
| OutSim مع الخيارات | جافا سكريبت + سي جي إس | تايب سكريبت + ESM |
قبل تشغيل أحد الأمثلة، اتبع الإرشادات الموجودة في ملف README.md الخاص بكل مثال.
على سبيل المثال، لتشغيل مثال "اتصال InSim - TypeScript"، قم بتشغيل الأوامر التالية:
cd examples/typescript/insim-connection
npm install
npm startyarn dev عند إضافة حزم InSim جديدة إلى المكتبة، يمكنك استخدام مولدات التعليمات البرمجية المضمنة باستخدام yarn generate . سيقوم بإنشاء وتحديث جميع الملفات الضرورية لك.
yarn test
yarn test:watchلتشغيل هذه الاختبارات، يجب تشغيل LFS مع فتح منفذ InSim.
بشكل افتراضي، تتصل الاختبارات بـ 127.0.0.1:29999 . يمكن تكوين مضيف ومنفذ InSim عن طريق نسخ .env إلى .env.local في دليل lfs-test .
yarn test:lfs سيمر هذا الأمر عبر كل تطبيق في المجلد examples/ ، وسيثبت تبعياته، ثم ينشئ التطبيق (على الآلة الكاتبة فقط).
yarn test:examplesyarn lintyarn format سيتم إنشاء الملفات المترجمة في dist/ .
yarn buildيمكنك تشغيل تنسيق التعليمات البرمجية وإصلاح lint + والإنشاء والاختبار باستخدام الأمر التالي:
yarn check-all