Pass signaling server URL when running a relay node

This commit is contained in:
Prathamesh Musale 2022-12-27 18:27:22 +05:30
parent fe781fb8f4
commit ebfa34cda5
8 changed files with 63 additions and 15 deletions

View File

@ -17,7 +17,7 @@ A basic CLI to pass messages between peers using `stdin`/`stdout`
yarn build
```
* Run a local signalling server (skip if an already running signalling server is available):
* (Optional) Run a local signalling server:
```bash
# In packages/peer
@ -28,9 +28,11 @@ A basic CLI to pass messages between peers using `stdin`/`stdout`
```bash
# In packages/peer
yarn relay-node
yarn relay-node --signal-server [SIGNAL_SERVER_URL]
```
* `signal-server`: multiaddr of a signalling server (default: local signalling server multiaddr)
* Start the node:
```bash

View File

@ -13,7 +13,7 @@ interface Arguments {
async function main (): Promise<void> {
const argv: Arguments = _getArgv();
if (!argv.signalServer) {
console.log('Using default signalling server URL');
console.log('Using the default signalling server URL');
}
const peer = new Peer(true);

View File

@ -1 +1,2 @@
REACT_APP_SIGNAL_SERVER=/ip4/127.0.0.1/tcp/13579/ws/p2p-webrtc-star/
REACT_APP_RELAY_NODE=

View File

@ -4,13 +4,13 @@ This project was bootstrapped with [Create React App](https://github.com/faceboo
## Instructions
* Install dependencies
* Install dependencies:
```bash
yarn install
```
* Build the peer package
* Build the peer package:
```bash
# From repo root
@ -19,14 +19,30 @@ This project was bootstrapped with [Create React App](https://github.com/faceboo
yarn build
```
* Run the signalling server
* (Optional) Run a local signalling server:
```bash
# In packages/peer
yarn signal-server
```
* Start the react app in development mode
* (Optional) Run a local relay node:
```bash
# In packages/peer
yarn relay-node --signal-server [SIGNAL_SERVER_URL]
```
* `signal-server`: multiaddr of a signalling server (default: local signalling server multiaddr)
* Set the signalling server and relay node multiaddrs in the [env](./.env) file:
```
REACT_APP_SIGNAL_SERVER=/ip4/127.0.0.1/tcp/13579/ws/p2p-webrtc-star/
REACT_APP_RELAY_NODE=/ip4/127.0.0.1/tcp/13579/wss/p2p-webrtc-star/p2p/12D3KooWRzH3ZRFP6RDbs2EKA8jSrD4Y6VYtLnCRMj3mYCiMHCJP
```
* Start the react app in development mode:
```bash
# In packages/peer-test-app

View File

@ -10,17 +10,17 @@ declare global {
function App() {
const [peer, setPeer] = useState<Peer>()
useEffect(() => {
(async () => {
if (peer) {
await peer.init(process.env.REACT_APP_SIGNAL_SERVER)
await peer.init(process.env.REACT_APP_SIGNAL_SERVER, process.env.REACT_APP_RELAY_NODE)
console.log(`Peer ID is ${peer.peerId!.toString()}`);
peer.subscribeMessage((peerId, message) => {
console.log(`${peerId.toString()} > ${message}`)
})
window.broadcast = (message: string) => {
peer.broadcastMessage(message)
}

View File

@ -16,5 +16,6 @@
"@typescript-eslint"
],
"rules": {
"@typescript-eslint/no-explicit-any": "off"
}
}

View File

@ -19,7 +19,7 @@ import { mplex } from '@libp2p/mplex';
import type { Stream as P2PStream, Connection } from '@libp2p/interface-connection';
import type { PeerInfo } from '@libp2p/interface-peer-info';
import { PeerId } from '@libp2p/interface-peer-id';
import { multiaddr } from '@multiformats/multiaddr';
import { multiaddr, Multiaddr } from '@multiformats/multiaddr';
export const PROTOCOL = '/chat/1.0.0';
export const DEFAULT_SIGNAL_SERVER_URL = '/ip4/127.0.0.1/tcp/13579/wss/p2p-webrtc-star';
@ -107,11 +107,13 @@ export class Peer {
// Wait for connection and relay to be bind
this._node.peerStore.addEventListener('change:multiaddrs', (evt) => {
assert(this._node);
const { peerId } = evt.detail;
const { peerId, multiaddrs } = evt.detail;
// Updated self multiaddrs?
// Log updated self multiaddrs
if (peerId.equals(this._node.peerId)) {
console.log('Updated self multiaddrs', this._node.getMultiaddrs().map(addr => addr.toString()));
} else {
console.log('Updated other node\'s multiaddrs', multiaddrs.map((addr: Multiaddr) => addr.toString()));
}
});
}

View File

@ -1,5 +1,7 @@
import { createLibp2p } from 'libp2p';
import wrtc from 'wrtc';
import { hideBin } from 'yargs/helpers';
import yargs from 'yargs';
import { noise } from '@chainsafe/libp2p-noise';
import { mplex } from '@libp2p/mplex';
@ -7,12 +9,21 @@ import { webRTCStar, WebRTCStarTuple } from '@libp2p/webrtc-star';
import { DEFAULT_SIGNAL_SERVER_URL } from './index.js';
interface Arguments {
signalServer: string;
}
async function main (): Promise<void> {
const argv: Arguments = _getArgv();
if (!argv.signalServer) {
console.log('Using the default signalling server URL');
}
const wrtcStar: WebRTCStarTuple = webRTCStar({ wrtc });
const node = await createLibp2p({
addresses: {
listen: [
DEFAULT_SIGNAL_SERVER_URL
argv.signalServer || DEFAULT_SIGNAL_SERVER_URL
]
},
transports: [
@ -36,6 +47,21 @@ async function main (): Promise<void> {
node.getMultiaddrs().forEach((ma) => console.log(ma.toString()));
}
function _getArgv (): any {
return yargs(hideBin(process.argv)).parserConfiguration({
'parse-numbers': false
}).options({
signalServer: {
type: 'string',
describe: 'Signalling server URL'
},
relayNode: {
type: 'string',
describe: 'Relay node URL'
}
}).argv;
}
main().catch(err => {
console.log(err);
});