0% found this document useful (0 votes)
11 views8 pages

Private Room System Code v4

Uploaded by

Vineel
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views8 pages

Private Room System Code v4

Uploaded by

Vineel
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

Private Room System - Complete Code & Explanation

This document provides a complete implementation for a private room system for chat and content

sharing, similar to Telegram and WhatsApp groups.

Key Features:

1. Private rooms with unique links for joining.

2. User authentication (login required).

3. Real-time updates and file uploads.

4. No admin hierarchy - room creators can kick users.

5. Data stored on AWS, cleaned up when the last user leaves.

6. Simple, intuitive UI resembling WhatsApp.

The following sections cover both frontend and backend code, security features, room management,

and data storage management.

Frontend User Experience:

The frontend consists of HTML, CSS, and JavaScript. Users can create rooms by entering a name

and clicking the 'Create Room' button.

They can then join the room by clicking the unique link.

HTML:

- Basic structure for room creation and joining.

CSS:

- Styled layout resembling WhatsApp.


JavaScript:

- Handles the creation and joining of rooms.

- Fetches real-time updates using WebSockets (e.g., Socket.IO).

- Supports file uploads and displays room members.

Frontend Code:

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Room Creation</title>

<style>

body {

font-family: Arial, sans-serif;

background-color: #f1f1f1;

padding: 20px;

.container {

max-width: 500px;

margin: 0 auto;

background-color: #fff;

padding: 20px;

box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);

h1 {
text-align: center;

input, button {

width: 100%;

padding: 10px;

margin: 10px 0;

font-size: 16px;

button {

background-color: #007bff;

color: white;

border: none;

button:hover {

background-color: #0056b3;

.rooms-list {

margin-top: 20px;

</style>

</head>

<body>

<div class="container">

<h1>Create a Room</h1>

<input type="text" id="room-name" placeholder="Enter room name" />

<button id="create-room">Create Room</button>

<div class="rooms-list" id="rooms-list"></div>


</div>

<script>

const createRoomBtn = document.getElementById("create-room");

const roomNameInput = document.getElementById("room-name");

const roomsList = document.getElementById("rooms-list");

createRoomBtn.addEventListener("click", function() {

const roomName = roomNameInput.value;

if (roomName) {

fetch("/create-room", {

method: "POST",

headers: { "Content-Type": "application/json" },

body: JSON.stringify({ name: roomName }),

})

.then(response => response.json())

.then(data => {

const roomDiv = document.createElement("div");

roomDiv.innerHTML = `<p>Room: ${data.name}</p>`;

roomsList.appendChild(roomDiv);

roomNameInput.value = ""; // Clear input field

})

.catch(error => console.error("Error creating room:", error));

});

</script>

</body>
</html>

Backend Logic (Node.js + Express):

The backend is built using Node.js and Express. It manages room creation, user authentication, and

room management. Each room is

assigned a unique link, and users can join rooms using the link.

Backend Code:

const express = require("express");

const bodyParser = require("body-parser");

const app = express();

const port = 3000;

// Middleware to parse JSON

app.use(bodyParser.json());

// In-memory storage for rooms and users

let rooms = [];

let users = [];

// Serve the frontend HTML file

app.use(express.static("public"));

// API to create a room

app.post("/create-room", (req, res) => {


const { name } = req.body;

if (name) {

const newRoom = { id: rooms.length + 1, name, users: [] };

rooms.push(newRoom);

res.json(newRoom);

} else {

res.status(400).json({ error: "Room name is required" });

});

// API to get all rooms

app.get("/rooms", (req, res) => {

res.json(rooms);

});

// API to create a random user

app.post("/create-user", (req, res) => {

const userName = "User" + Math.floor(Math.random() * 1000); // Random username

const newUser = { id: users.length + 1, name: userName };

users.push(newUser);

res.json(newUser);

});

// API to join a room

app.post("/join-room", (req, res) => {

const { userId, roomId } = req.body;


const room = rooms.find(r => r.id === roomId);

const user = users.find(u => u.id === userId);

if (room && user) {

room.users.push(user);

res.json({ message: `${user.name} has joined the room ${room.name}`, room });

} else {

res.status(400).json({ error: "Invalid user or room" });

});

// Start the server

app.listen(port, () => {

console.log(`Server running at http://localhost:${port}`);

});

Security Features:

- **Authentication**: Users need to log in before creating or joining rooms.

- **Room Access**: Only users with the room's link can join.

- **Data Privacy**: Rooms are private, and users can't join without permission.

Authentication can be done via a session or JWT token to ensure users are authenticated before

they can interact with rooms.

Data Storage (AWS):


Room and user data are stored on AWS for scalability and reliability. AWS RDS or DynamoDB can

be used to persist data.

- Room data is persistent and can store the history of users who have joined.

- Once the last user leaves the room, the room data is cleaned up automatically.

The system is designed to scale using AWS cloud infrastructure, ensuring data is stored securely

and efficiently.

Testing and Adjustments:

After implementing the frontend and backend, thorough testing is required to ensure:

- Rooms can be created and joined correctly.

- Real-time updates work for room members.

- Room management (kicking users, etc.) works smoothly.

- All data is cleaned when the last user leaves.

Testing should cover edge cases, such as a user joining after someone leaves, multiple users

joining, and ensuring security

controls are working as intended.

You might also like