مكون UDP الإضافي للمكثف مستوحى من cordova-plugin-chrome-apps-sockets-udp! دعم كل من IPv6 وIPv4، البث المتعدد والبث!
لتصحيح الأخطاء، تحقق من تطبيق Udper الذي تم تطويره باستخدام هذا البرنامج المساعد! https://play.google.com/store/apps/details?id=xyz.chenzhongkai.udper&hl=en_US
باستخدام المكثف يمكن كتابة الكود التالي:
async function process ( ) {
try {
await UdpPlugin . closeAllSockets ( ) ;
let info = await UdpPlugin . create ( ) ;
await UdpPlugin . bind ( { socketId : info . socketId , port : 5500 } )
await UdpPlugin . send ( { socketId : info . socketId , address : targetAddress , port : 6000 , buffer : UdpPluginUtils . bufferToString ( data ) } ) } )
} catch {
//........
}
}
أليس هذا مذهلاً!
$ npm install capacitor-udp
لتطوير Android، لا تنس إضافة فئة البرنامج المساعد في MainActivity!
declare module '@capacitor/core'
في بعض الأحيان تفشل في العمل كما هو متوقع. أعتقد أن الحل القذر مثل تغيير core-plugin-definitions.ts قد يكون الحل الأكثر جدارة بالثقة.
على سبيل المثال،
import { Plugin , PluginListenerHandle } from './definitions' ;
import { IUdpPlugin } from "capacitor-udp"
export interface PluginRegistry {
Accessibility: AccessibilityPlugin ;
App: AppPlugin ;
BackgroundTask: BackgroundTaskPlugin ;
Browser: BrowserPlugin ;
// .............
UdpPlugin: IUdpPlugin ;
[ pluginName : string ] : {
[ prop : string ] : any ;
} ;
}
import { Plugins } from "@capacitor/core" ;
const { UdpPlugin } = Plugins ;
import { UdpPluginUtils } from "capacitor-udp" ; // if you want support for converting between ArrayBuffer and String
بالنسبة للذكاء أو الكتابة النصية، قد تحتاج إلى تحرير الملف في @capacitor/core/dist/esm/core-plugin-definitions.ts. تأكد من تحميل هذا الملف بالفعل، نظرًا لاحتمال وجود مجلدات عقدة_وحدات أخرى.
تشبه واجهة برمجة التطبيقات إلى حد ما واجهة Chrome UDP API، ولكن بطعم المكثف!
الأحداث:
قم بإنشاء مقبس لـ udp، ويمكنك إنشاء أكثر من مقبس يتم تمييزه بواسطة معرف المقبس.
UdpPlugin . create ( { properties : { name : "yourSocketName" , bufferSize : 2048 } } ) . then ( res => { socketId = res . socketId } ) ;
قم بتحديث معلومات المقبس بما في ذلك اسم المقبس وحجم المخزن المؤقت.
UdpPlugin . update ( { socketId : yourSocketId , properties : { name : "socketname" , bufferSize : 2048 } } )
تحتاج إلى ربط مأخذ توصيل قبل إرسال واستقبال البيانات.
UdpPlugin . bind ( { socketId : yourSocketId , port : 5000 } )
لا يدعم المكثف Arraybuffer حاليًا، لذا أحتاج إلى تحويل ArrayBuffer إلى سلسلة base64. لقد قدمت وظيفة مفيدة لمساعدتك في تحقيق ذلك!
UdpPlugin . send ( { socketId : yourSocketId , address : targetAddress , port : 6000 , buffer : bufferString } ) // bufferString is of type string
UdpPlugin . send ( { socketId : yourSocketId , address : targetAddress , port : 6000 , buffer : UdpPluginUtils . bufferToString ( data ) } ) // data is of type ArrayBuffer
أغلق مقبسًا واحدًا
UdpPlugin . close ( { socketId : yourSocketId } )
UdpPlugin . closeAllSockets ( )
بعد تمكين البث، يمكنك إرسال البيانات بعنوان الهدف 255.255.255.255.
UdpPlugin . setBroadcast ( { socketId : yourSocketId , enabled : enableBroadcastOrNot } )
الحصول على كافة المقابس المتاحة.
UdpPlugin . getSockets ( ) . then ( res => {
//res contains sockets...
} )
الانضمام إلى عنوان مجموعة معينة. بالنسبة لـ IPv4، فهو مثل "238.12.12.12". بالنسبة لـ IPv6، فهو مثل "ff02::08".
UdpPlugin . joinGroup ( { socketId : yourSocketId , address : multicastAddress } )
UdpPlugin . leaveGroup ( { socketId : yourSocketId , address : multicastAddress } )
UdpPlugin . getJoinedGroups ( { socketId : yourSocketId } ) . then ( res => {
// res contains your group addresses
} )
إيقاف تلقي البيانات مؤقتًا.
UdpPlugin . setPaused ( { socketId : yourSocketId , paused : pauseOrNot } )
UdpPlugin . setMulticastLoopbackMode ( { socketId : yourSocketId , enabled : enabledOrNot } )
UdpPlugin . addListener ( "receive" , data => {
yourArrayBuffer = UdpPluginUtils . stringToBuffer ( data )
} } ) ;
لفهم ArrayBuffer، يمكنك الرجوع إلى المصفوفات المكتوبة
UdpPlugin . addListener ( "receiveError" , error => { console . log ( error ) } ) ;