-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathchat.js
More file actions
51 lines (42 loc) · 1.03 KB
/
chat.js
File metadata and controls
51 lines (42 loc) · 1.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// @ts-check
const readline = require('readline');
const { Server } = require('@josephuspaye/pipe-emitter');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
function ask(prompt) {
return new Promise((resolve) => {
rl.question(prompt, (answer) => {
resolve(answer);
});
});
}
let questionPromise;
async function startChat() {
if (questionPromise) {
questionPromise.cancel();
}
while (true) {
const answer = await ask('[native] ');
server.emit('message', { from: 'native', text: answer });
}
}
const server = new Server('chrome-native-bridge-chat', {
onError(err) {
console.log('\nserver error', err);
},
onConnect() {
console.log('\nconnected to host\n');
startChat();
},
onDisconnect() {
console.log('\ndisconnected from host');
process.exit();
},
});
server.on('message', (message) => {
console.log(`\n[${message.from}] ${message.text}`);
process.stdout.write('[native] ');
});
console.log('waiting for host to connect...');