react-native-udp/README.md

133 lines
3.1 KiB
Markdown

# UDP in React Native
node's [dgram](https://nodejs.org/api/dgram.html) API in React Native
This module is used by [Tradle](https://github.com/tradle)
## Install
* Create a new react-native project. [Check react-native getting started](http://facebook.github.io/react-native/docs/getting-started.html#content)
* In your project dir:
```
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`
```gradle
...
include ':react-native-udp'
project(':react-native-udp').projectDir = new File(settingsDir, '../node_modules/react-native-udp/android')
```
* `android/app/build.gradle`
```gradle
dependencies {
...
compile project(':react-native-udp')
}
```
* register module (in MainActivity.java)
```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_
```json
{
"browser": {
"dgram": "react-native-udp"
}
}
```
### JS
_see/run [index.js](examples/rctsockets) for a complete example, but basically it's just like dgram_
```js
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:
```js
global.Buffer = global.Buffer || require('buffer').Buffer
```
### TODO
add select tests from node's tests for dgram
## Contributors
[Mark Vayngrib](https://github.com/mvayngrib)
[Ellen Katsnelson](https://github.com/pgmemk)
[Tradle, Inc.](https://github.com/tradle/about/wiki)
[Andy Prock](https://github.com/aprock)
PR's welcome!