-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsimple-sender.js
More file actions
78 lines (65 loc) · 1.98 KB
/
Copy pathsimple-sender.js
File metadata and controls
78 lines (65 loc) · 1.98 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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import net from 'node:net'
import readline from 'node:readline/promises'
import process from 'node:process'
const PORT = 4000
let username = ''
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
const socket = net.createConnection({ host: '127.0.0.1', port: PORT })
.on('connect', async () => {
await authUsername()
// Listen for 'line' event (when user presses Enter)
rl.on('line', (line) => {
const message = line.trim();
if (message.toLowerCase() === 'exit') {
rl.close();
} else if (message) {
console.log(`[${username}]: ${message}`); // Simulate sending message
socket.write(`_message_${message}`, 'utf-8')
}
promptForMessage(); // Prompt for next message
});
})
.on('data', async (data) => {
const decodedData = data.toString('utf-8')
if (decodedData.includes('_auth_') && decodedData.includes('is already connected')) {
console.log(decodedData.replace('_auth_', ''))
await authUsername()
return
}
if (decodedData.includes('_auth_') && decodedData.includes('Welcome')) {
console.log(decodedData.replace('_auth_', ''))
promptForMessage()
return;
}
console.log(decodedData)
promptForMessage()
})
.on('connectionAttemptFailed', () => {
console.log('connection attempt to server failed');
})
.on('error', console.error)
.on('close', () => {
console.log('connection to server was closed');
rl.close()
})
rl.on('close', () => {
console.log('Chat session ended. Goodbye!')
process.exit(0)
});
// Function to prompt for username
async function askUsername() {
username = (await rl.question('Enter your username: ')).trim()
if (!username) {
askUsername();
}
}
async function authUsername() {
await askUsername()
socket.write(`_username_${username}`, 'utf-8')
return username
}
// Function to prompt for messages
function promptForMessage() {
rl.setPrompt(`${username} > `);
rl.prompt();
}