react-native-udp/README.md

3.1 KiB

UDP in React Native

node's dgram API in React Native

This module is used by Tradle

Install

npm install --save react-native-udp

iOS

  • Drag UdpSockets.xcodeproj from node_modules/react-native-udp/ios into your XCode project.

  • Click on the project in XCode, go to Build Phases, then Link Binary With Libraries and add libUdpSockets.a

Android

  • android/settings.gradle
...
include ':react-native-udp'
project(':react-native-udp').projectDir = new File(settingsDir, '../node_modules/react-native-udp/android')
  • android/app/build.gradle
dependencies {
	...
	compile project(':react-native-udp')
}
  • register module (in MainActivity.java)
...

import com.tradle.react.*; // <--- import

public class MainActivity extends Activity implements DefaultHardwareBackBtnHandler {
	...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mReactRootView = new ReactRootView(this);

        mReactInstanceManager = ReactInstanceManager.builder()
                .setApplication(getApplication())
                .setBundleAssetName("index.android.bundle")
                .setJSMainModuleName("index.android")
                .addPackage(new MainReactPackage())
                .addPackage(new UdpSocketsModule())           // <- add here
                .setUseDeveloperSupport(BuildConfig.DEBUG)
                .setInitialLifecycleState(LifecycleState.RESUMED)
                .build();

        mReactRootView.startReactApplication(mReactInstanceManager, "YourProject", null);

        setContentView(mReactRootView);
    }
}

Buckle up, Dorothy

Usage

package.json

only if you want to write require('dgram') in your javascript

{
  "browser": {
    "dgram": "react-native-udp"
  }
}

JS

see/run index.js for a complete example, but basically it's just like dgram

var dgram = require('dgram')
// OR, if not shimming via package.json "browser" field:
// var dgram = require('react-native-udp')
var socket = dgram.createSocket('udp4')
socket.bind(12345)
socket.once('listening', function() {
  var buf = toByteArray('excellent!')
  socket.send(buf, 0, buf.length, remotePort, remoteHost, function(err) {
    if (err) throw err

    console.log('message was sent')
  })
})

socket.on('message', function(msg, rinfo) {
  console.log('message was received', msg)
})

Note

If you want to send and receive node Buffer objects, you'll have to "npm install buffer" and set it as a global for UdpSockets to pick it up:

global.Buffer = global.Buffer || require('buffer').Buffer

TODO

add select tests from node's tests for dgram

Contributors

Mark Vayngrib
Ellen Katsnelson
Tradle, Inc.

Andy Prock

PR's welcome!