Cordova-plugin-chrome-apps-sockets-udp からインスピレーションを得た Capacitor 用の 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-settings.ts 内のファイルを編集する必要がある場合があります。他のnode_modulesフォルダーが存在する可能性があるため、このファイルが実際にロードされていることを確認してください。
API は Chrome UDP API にある程度似ていますが、コンデンサーの味がします。
イベント:
udp 用のソケットを作成すると、ソケット ID によって区別された複数のソケットを作成できます。
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 } )
Capacitor は今のところ 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
ソケットを 1 つ閉じます
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 ) } ) ;