mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-06-25 06:51:32 +00:00
chore: add chat example (#840)
This commit is contained in:
7
.github/workflows/main.yml
vendored
7
.github/workflows/main.yml
vendored
@ -65,3 +65,10 @@ jobs:
|
|||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- run: yarn
|
- run: yarn
|
||||||
- run: cd examples && yarn && npm run test -- auto-relay
|
- run: cd examples && yarn && npm run test -- auto-relay
|
||||||
|
test-chat-example:
|
||||||
|
needs: check
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- run: yarn
|
||||||
|
- run: cd examples && yarn && npm run test -- chat
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
const PeerId = require('peer-id')
|
const PeerId = require('peer-id')
|
||||||
const multiaddr = require('multiaddr')
|
const multiaddr = require('multiaddr')
|
||||||
const createLibp2p = require('./libp2p-bundle')
|
const createLibp2p = require('./libp2p')
|
||||||
const { stdinToStream, streamToConsole } = require('./stream')
|
const { stdinToStream, streamToConsole } = require('./stream')
|
||||||
|
|
||||||
async function run() {
|
async function run() {
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
/* eslint-disable no-console */
|
/* eslint-disable no-console */
|
||||||
|
|
||||||
const PeerId = require('peer-id')
|
const PeerId = require('peer-id')
|
||||||
const createLibp2p = require('./libp2p-bundle.js')
|
const createLibp2p = require('./libp2p.js')
|
||||||
const { stdinToStream, streamToConsole } = require('./stream')
|
const { stdinToStream, streamToConsole } = require('./stream')
|
||||||
|
|
||||||
async function run() {
|
async function run() {
|
||||||
|
77
examples/chat/test.js
Normal file
77
examples/chat/test.js
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
const path = require('path')
|
||||||
|
const execa = require('execa')
|
||||||
|
const pDefer = require('p-defer')
|
||||||
|
const uint8ArrayToString = require('uint8arrays/to-string')
|
||||||
|
|
||||||
|
function startProcess(name) {
|
||||||
|
return execa('node', [path.join(__dirname, name)], {
|
||||||
|
cwd: path.resolve(__dirname),
|
||||||
|
all: true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
async function test () {
|
||||||
|
const message = 'test message'
|
||||||
|
let listenerOutput = ''
|
||||||
|
let dialerOutput = ''
|
||||||
|
|
||||||
|
let isListening = false
|
||||||
|
let messageSent = false
|
||||||
|
const listenerReady = pDefer()
|
||||||
|
const dialerReady = pDefer()
|
||||||
|
const messageReceived = pDefer()
|
||||||
|
|
||||||
|
// Step 1 process
|
||||||
|
process.stdout.write('node listener.js\n')
|
||||||
|
const listenerProc = startProcess('src/listener.js')
|
||||||
|
listenerProc.all.on('data', async (data) => {
|
||||||
|
process.stdout.write(data)
|
||||||
|
|
||||||
|
listenerOutput += uint8ArrayToString(data)
|
||||||
|
|
||||||
|
if (!isListening && listenerOutput.includes('Listener ready, listening on')) {
|
||||||
|
listenerReady.resolve()
|
||||||
|
isListening = true
|
||||||
|
} else if (isListening && listenerOutput.includes(message)) {
|
||||||
|
messageReceived.resolve()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
await listenerReady.promise
|
||||||
|
process.stdout.write('==================================================================\n')
|
||||||
|
|
||||||
|
// Step 2 process
|
||||||
|
process.stdout.write('node dialer.js\n')
|
||||||
|
const dialerProc = startProcess('src/dialer.js')
|
||||||
|
dialerProc.all.on('data', async (data) => {
|
||||||
|
process.stdout.write(data)
|
||||||
|
dialerOutput += uint8ArrayToString(data)
|
||||||
|
|
||||||
|
if (!messageSent && dialerOutput.includes('Type a message and see what happens')) {
|
||||||
|
dialerReady.resolve()
|
||||||
|
dialerProc.stdin.write(message)
|
||||||
|
dialerProc.stdin.write('\n')
|
||||||
|
messageSent = true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
await dialerReady.promise
|
||||||
|
process.stdout.write('==================================================================\n')
|
||||||
|
await messageReceived.promise
|
||||||
|
process.stdout.write('chat message received\n')
|
||||||
|
|
||||||
|
listenerProc.kill()
|
||||||
|
dialerProc.kill()
|
||||||
|
await Promise.all([
|
||||||
|
listenerProc,
|
||||||
|
dialerProc
|
||||||
|
]).catch((err) => {
|
||||||
|
if (err.signal !== 'SIGTERM') {
|
||||||
|
throw err
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = test
|
Reference in New Issue
Block a user