# Socket.io Requests

# IN DEVELOPMENT - DO NOT USE!

## _Better requests functionality for Socket.io - Server & Client._

Socket.io Requests is a package for extending the socket instance of Socket.io for better Acknowledgements (Request - Response) functionality.
It creates 2 simple methods for the `socket` instance.

## Features

- Send requests
- Listen to requests and respond
- Set timeout for the request

## Installation

Use [NPM](https://www.npmjs.com/package/socket.io-requests) to install.

```sh
npm i socket.io-requests
```

## Configure:

#### Configure on server

```javascript index.js
const { Server } = require("socket.io");

const io = new Server({
  /* options */
});

const SioR = require("socket.io-requests");

io.on("connection", (socket) => {
  SioR(socket);
});
```

#### Configure on client

```javascript index.js
const socket = io();
require("socket.io-requests")(socket);
```

## Usage:

#### Send request

```javascript index.js
socket.on("connect", () => {
  setTimeout(() => {
    socket
      .sendRequest("request-channel-name", "data of the request")
      .then((res) => {
        console.log("res:", res);
      })
      .catch((err) => {
        console.log("err:", err);
      });
  }, 1000);
});
```

#### Listen to request and send response

```javascript index.js
socket.onRequest("request-channel-name", (data, respond) => {
  const response = {
    hello: "world!",
  };
  respond(response);
});
```

#### Send request with custom timeout

- _Timeout is in ms_.
- _Default: 30000_.

```javascript index.js
socket
  .sendRequest("request-channel-name", "data of the request", 5000)
  .then((res) => {
    console.log("res:", res);
  })
  .catch((err) => {
    console.log("err:", err);
  });
```

## License

[MIT](https://choosealicense.com/licenses/mit/)
**Free Software, Enjoy!**
