# react-native-grpc-service

## Getting started

`$ npm install react-native-grpc-service --save`

### Mostly automatic installation

`$ react-native link react-native-grpc-service`

### Manual installation

#### iOS

1. In XCode, in the project navigator, right click `Libraries` ➜ `Add Files to [your project's name]`
2. Go to `node_modules` ➜ `react-native-grpc-service` and add `RNGrpcService.xcodeproj`
3. In XCode, in the project navigator, select your project. Add `libRNGrpcService.a` to your project's `Build Phases` ➜ `Link Binary With Libraries`
4. Run your project (`Cmd+R`)<

#### Android

1. Open up `android/app/src/main/java/[...]/MainActivity.java`

- Add `import com.reactlibrary.RNGrpcServicePackage;` to the imports at the top of the file
- Add `new RNGrpcServicePackage()` to the list returned by the `getPackages()` method

2. Append the following lines to `android/settings.gradle`:
   ```
   include ':react-native-grpc-service'
   project(':react-native-grpc-service').projectDir = new File(rootProject.projectDir, 	'../node_modules/react-native-grpc-service/android')
   ```
3. Insert the following lines inside the dependencies block in `android/app/build.gradle`:
   ```
     compile project(':react-native-grpc-service')
   ```

## Usage

React Native Grpc Service can be configured by creating a react-native-grpc-service.json at the root of the project. Depending on the type of a package, the set of valid properties is different.

`react-native-grpc-service.json` entry:

```json
{
  "protoDirectory": "../server/proto",
  "protoFile": "app.proto"
}
```

`app.proto` entry:

```protobuf
service TodoService {
  rpc Create (CreateRequest) returns (CreateResponse) {}
}

message CreateRequest {
  string name = 1;
}

message CreateResponse {
  Todo data = 1;
}

message Todo {
  string id = 1;
  string name = 2;
}
```

`GrpcService.ts` entry:

```typescript
import RNGrpcService from 'react-native-grpc-service';
export default new RNGrpcService('localhost:8080');
```

`App.tsx` entry:

```typescript
import React from 'react';
import GrpcService from './GrpcService';

export default class App extends React.Component {
  componentDidMount() {
    GrpcService.TodoService.Create({ name: 'test' }).then(response => ...)
  }
}
```

## Roadmap

Android features

- [ ] Request support
- [ ] Bidirectional stream support
- [ ] Client stream support
- [ ] Server stream support

iOS features

- [ ] Bidirectional stream support
- [ ] Client stream support
- [ ] Server stream support
