ปลั๊กอิน 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
สำหรับ Intellisense หรือ typescript คุณอาจต้องแก้ไขไฟล์ใน @capacitor/core/dist/esm/core-plugin-definitions.ts ตรวจสอบให้แน่ใจว่าไฟล์นี้ถูกโหลดจริง เนื่องจากอาจมีโฟลเดอร์ node_modules อื่น
API นั้นคล้ายกับ 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 ฉันได้จัดเตรียมฟังก์ชัน util เพื่อช่วยให้คุณบรรลุเป้าหมายนั้น!
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 คุณสามารถอ้างถึง Typed Arrays
UdpPlugin . addListener ( "receiveError" , error => { console . log ( error ) } ) ;