npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ltg-udp

v0.1.4

Published

udp plugin

Downloads

4

Readme

Capacitor UDP

UDP Plugin for Capacitor inspired from cordova-plugin-chrome-apps-sockets-udp! Support both IPv6 and IPv4, multicast and broadcast!

For debugging, check out the Udper app developed using this plugin! https://play.google.com/store/apps/details?id=xyz.chenzhongkai.udper&hl=en_US

With capacitor, it is possible to write following code:

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 {
        //........
    }
}

Isn't it amazing!

Install

$ npm install capacitor-udp

For android development, don't forget to add the plugin class in the MainActivity!

TypeScript Special Mention!!!

declare module '@capacitor/core'

sometimes fail to work as expected. I guess the dirty solution like changing the core-plugin-definitions.ts might be the most trust-worthy solution.

For instance,

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;
    };
}

Usage

import { Plugins } from "@capacitor/core";
const { UdpPlugin } = Plugins;
import {UdpPluginUtils} from "capacitor-udp"; // if you want support for converting between ArrayBuffer and String

For intellisense or typescript, you might need to edit the file in @capacitor/core/dist/esm/core-plugin-definitions.ts. Make sure that this file is actually loaded, since there might be other node_modules folders.

API Reference

The api is to some extent similar to Chrome UDP API , but with the taste of capacitor!

Events:

Create

Create a socket for udp, and you can create more than one differentiated by the socket id.

UdpPlugin.create({properties: { name: "yourSocketName", bufferSize: 2048 }} ).then(res=>{socketId = res.socketId});

Update

Update the socket info including socket name and buffer size.

UdpPlugin.update( {socketId: yourSocketId, properties: { name: "socketname", bufferSize: 2048 }} )

Bind

You need to bind a socket before sending and receiving data.

UdpPlugin.bind({ socketId: yourSocketId, port: 5000})

Send

Capacitor doesn't support Arraybuffer for now, so I need to convert ArrayBuffer to base64 string. I have provided a util function to help you achieve that!

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

Close

Close one socket

UdpPlugin.close({ socketId: yourSocketId }) 

Close All Sockets

UdpPlugin.closeAllSockets() 

Set Broadcast

After enabling broadcasting, you can send data with target address 255.255.255.255.

UdpPlugin.setBroadcast({socketId: yourSocketId,enabled: enableBroadcastOrNot}) 

Get Sockets

Obtain all the sockets available.

UdpPlugin.getSockets().then(res=>{
    //res contains sockets...
})

Join Group

Join a particular group address. For IPv4, it's like "238.12.12.12". For IPv6, it's like "ff02::08".

UdpPlugin.joinGroup({socketId: yourSocketId, address: multicastAddress})

Leave Group

UdpPlugin.leaveGroup({socketId: yourSocketId, address: multicastAddress})

Get Joined Groups

UdpPlugin.getJoinedGroups({ socketId: yourSocketId }).then(res=>{
    // res contains your group addresses
})

Set Paused

Pause receiving data.

UdpPlugin.setPaused({socketId: yourSocketId,paused: pauseOrNot})

Set Multicast Loopback Mode

UdpPlugin.setMulticastLoopbackMode({socketId: yourSocketId, enabled: enabledOrNot})

Receive Event

UdpPlugin.addListener("receive", data => {
    yourArrayBuffer = UdpPluginUtils.stringToBuffer(data)
}});

For understanding ArrayBuffer, you can refer to Typed Arrays

Receive Error Event

UdpPlugin.addListener("receiveError", error => {console.log(error)});