2015-05-10 14:50:44 +00:00
|
|
|
# UDP in React Native
|
|
|
|
|
|
|
|
node's [dgram](https://nodejs.org/api/dgram.html) API in React Native
|
|
|
|
|
2015-05-10 14:58:08 +00:00
|
|
|
This module is used by [Tradle](https://github.com/tradle)
|
2015-05-10 14:50:44 +00:00
|
|
|
|
|
|
|
## Install
|
|
|
|
|
|
|
|
* Create a new react-native project. [Check react-native getting started](http://facebook.github.io/react-native/docs/getting-started.html#content)
|
|
|
|
|
2015-05-11 17:51:52 +00:00
|
|
|
* In your project dir:
|
2015-05-10 14:50:44 +00:00
|
|
|
```
|
|
|
|
npm install --save react-native-udp
|
|
|
|
```
|
|
|
|
|
2015-09-24 23:10:24 +00:00
|
|
|
### `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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|
2015-05-10 14:50:44 +00:00
|
|
|
|
|
|
|
Buckle up, Dorothy
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
|
|
### package.json
|
|
|
|
|
|
|
|
_only if you want to write require('dgram') in your javascript_
|
|
|
|
|
|
|
|
```json
|
|
|
|
{
|
|
|
|
"browser": {
|
|
|
|
"dgram": "react-native-udp"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
### JS
|
|
|
|
|
2015-09-24 23:10:24 +00:00
|
|
|
_see/run index.js for a complete example, but basically it's just like dgram_
|
2015-05-10 14:50:44 +00:00
|
|
|
|
2015-05-10 14:58:41 +00:00
|
|
|
```js
|
2015-05-10 14:50:44 +00:00
|
|
|
var dgram = require('dgram')
|
|
|
|
// OR, if not shimming via package.json "browser" field:
|
2015-09-24 23:10:24 +00:00
|
|
|
// var dgram = require('UdpSockets')
|
2015-05-10 14:50:44 +00:00
|
|
|
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
|
2015-09-24 23:10:24 +00:00
|
|
|
|
2015-05-10 14:50:44 +00:00
|
|
|
console.log('message was sent')
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
socket.on('message', function(msg, rinfo) {
|
|
|
|
console.log('message was received', msg)
|
|
|
|
})
|
2015-05-10 15:03:52 +00:00
|
|
|
```
|
2015-05-10 14:50:44 +00:00
|
|
|
|
|
|
|
### Note
|
|
|
|
|
2015-05-10 15:03:52 +00:00
|
|
|
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:
|
2015-05-10 14:50:44 +00:00
|
|
|
|
|
|
|
```js
|
|
|
|
global.Buffer = global.Buffer || require('buffer').Buffer
|
|
|
|
```
|
|
|
|
|
2015-05-10 14:58:08 +00:00
|
|
|
### TODO
|
|
|
|
|
|
|
|
add select tests from node's tests for dgram
|
|
|
|
|
2015-05-10 14:50:44 +00:00
|
|
|
## Contributors
|
|
|
|
|
2015-05-10 15:03:52 +00:00
|
|
|
[Mark Vayngrib](https://github.com/mvayngrib)
|
|
|
|
[Ellen Katsnelson](https://github.com/pgmemk)
|
2015-05-10 14:58:08 +00:00
|
|
|
[Tradle, Inc.](https://github.com/tradle/about/wiki)
|
|
|
|
|
2015-09-24 23:10:24 +00:00
|
|
|
[Andy Prock](https://github.com/aprock)
|
|
|
|
|
2015-05-11 17:51:52 +00:00
|
|
|
PR's welcome!
|