somedamnhelp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/client.js +49 -0
- package/package.json +24 -0
- package/server.js +64 -0
package/bin/client.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const { io } = require("socket.io-client");
|
|
4
|
+
const readline = require("readline");
|
|
5
|
+
const SERVER_URL = process.env.CHAT_SERVER_URL || "https://386c2435-ca60-4d15-9824-1cf32a80def6-00-lzgyi1j6rgdp.pike.replit.dev:3000/";
|
|
6
|
+
|
|
7
|
+
const socket = io(SERVER_URL);
|
|
8
|
+
|
|
9
|
+
const rl = readline.createInterface({
|
|
10
|
+
input: process.stdin,
|
|
11
|
+
output: process.stdout
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
let currentRoom = null;
|
|
15
|
+
|
|
16
|
+
socket.on("connect", () => {
|
|
17
|
+
console.log("Connected to server");
|
|
18
|
+
socket.emit("get_rooms");
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
socket.on("rooms_list", (rooms) => {
|
|
22
|
+
console.log("\nAvailable rooms:");
|
|
23
|
+
if (rooms.length === 0) {
|
|
24
|
+
console.log(" (none)");
|
|
25
|
+
} else {
|
|
26
|
+
rooms.forEach(r => console.log(` - ${r}`));
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
rl.question("\nEnter room number to join/create: ", (room) => {
|
|
30
|
+
socket.emit("join_room", room);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
socket.on("joined_room", (room) => {
|
|
35
|
+
currentRoom = room;
|
|
36
|
+
console.log(`\nJoined room ${room}`);
|
|
37
|
+
rl.prompt();
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
socket.on("room_message", (data) => {
|
|
41
|
+
console.log(`\n[${data.sender}]: ${data.text}`);
|
|
42
|
+
rl.prompt();
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
rl.on("line", (line) => {
|
|
46
|
+
if (!currentRoom) return;
|
|
47
|
+
socket.emit("room_message", line);
|
|
48
|
+
rl.prompt();
|
|
49
|
+
});
|
package/package.json
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "somedamnhelp",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A simple chat CLI using Socket.IO",
|
|
5
|
+
"main": "server.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"chat": "./bin/chat.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"start": "node server.js",
|
|
11
|
+
"dev": "node server.js"
|
|
12
|
+
},
|
|
13
|
+
"keywords": ["chat", "cli", "socket.io"],
|
|
14
|
+
"author": "Your Name",
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"socket.io": "^4.6.0",
|
|
18
|
+
"socket.io-client": "^4.6.0",
|
|
19
|
+
"express": "^4.18.2"
|
|
20
|
+
},
|
|
21
|
+
"engines": {
|
|
22
|
+
"node": ">=14.0.0"
|
|
23
|
+
}
|
|
24
|
+
}
|
package/server.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
const express = require('express');
|
|
2
|
+
const { createServer } = require('http');
|
|
3
|
+
const { Server } = require('socket.io');
|
|
4
|
+
|
|
5
|
+
const app = express();
|
|
6
|
+
const httpServer = createServer(app);
|
|
7
|
+
const io = new Server(httpServer, {
|
|
8
|
+
cors: {
|
|
9
|
+
origin: "*",
|
|
10
|
+
methods: ["GET", "POST"]
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
const rooms = new Map();
|
|
15
|
+
|
|
16
|
+
io.on('connection', (socket) => {
|
|
17
|
+
console.log('Connected:', socket.id);
|
|
18
|
+
|
|
19
|
+
socket.on('get_rooms', () => {
|
|
20
|
+
socket.emit('rooms_list', Array.from(rooms.keys()));
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
socket.on('join_room', (roomId) => {
|
|
24
|
+
roomId = roomId.trim();
|
|
25
|
+
if (socket.currentRoom) {
|
|
26
|
+
const oldRoom = socket.currentRoom;
|
|
27
|
+
socket.leave(oldRoom);
|
|
28
|
+
rooms.set(oldRoom, rooms.get(oldRoom) - 1);
|
|
29
|
+
if (rooms.get(oldRoom) === 0) {
|
|
30
|
+
rooms.delete(oldRoom);
|
|
31
|
+
console.log(`Room ${oldRoom} deleted`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
socket.join(roomId);
|
|
35
|
+
socket.currentRoom = roomId;
|
|
36
|
+
rooms.set(roomId, (rooms.get(roomId) || 0) + 1);
|
|
37
|
+
console.log(`Socket ${socket.id} joined room ${roomId}`);
|
|
38
|
+
socket.emit('joined_room', roomId);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
socket.on('room_message', (msg) => {
|
|
42
|
+
if (!socket.currentRoom) return;
|
|
43
|
+
io.to(socket.currentRoom).emit('room_message', {
|
|
44
|
+
sender: socket.id.slice(0, 4),
|
|
45
|
+
text: msg
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
socket.on('disconnect', () => {
|
|
50
|
+
const roomId = socket.currentRoom;
|
|
51
|
+
if (!roomId) return;
|
|
52
|
+
rooms.set(roomId, rooms.get(roomId) - 1);
|
|
53
|
+
if (rooms.get(roomId) === 0) {
|
|
54
|
+
rooms.delete(roomId);
|
|
55
|
+
console.log(`Room ${roomId} deleted`);
|
|
56
|
+
}
|
|
57
|
+
console.log('Disconnected:', socket.id);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
const PORT = process.env.PORT || 3000;
|
|
62
|
+
httpServer.listen(PORT, () => {
|
|
63
|
+
console.log(`Server running on port ${PORT}`);
|
|
64
|
+
});
|