from flask import Flask, render_tem
from flask import Flask, render_tem
import uuid
app = Flask(__name__)
@app.route('/create_room', methods=['POST'])
def create_room():
room_id = str(uuid.uuid4())
rooms[room_id] = []
return jsonify({'room_id': room_id})
@app.route('/join_room/<room_id>', methods=['POST'])
def join_room(room_id):
if room_id in rooms:
user_id = str(uuid.uuid4())
rooms[room_id].append(user_id)
return jsonify({'user_id': user_id})
return jsonify({'error': 'Room not found'}), 404
@app.route('/get_room/<room_id>', methods=['GET'])
def get_room(room_id):
if room_id in rooms:
return jsonify({'users': rooms[room_id]})
return jsonify({'error': 'Room not found'}), 404
if __name__ == '__main__':
app.run(debug=True)
npx create-react-app video-call-app
cd video-call-app
npm start
import React, { useState, useRef, useEffect } from 'react';
import io from 'socket.io-client';
useEffect(() => {
if (userId) {
const socket = io.connect('/');
socket.emit('join', { roomId, userId });
await peerConnection.setRemoteDescription(new
RTCSessionDescription(data.offer));
const answer = await peerConnection.createAnswer();
await peerConnection.setLocalDescription(answer);
return (
<div>
<button onClick={createRoom}>Create Room</button>
<input type="text" placeholder="Room ID" value={roomId} onChange={(e) =>
setRoomId(e.target.value)} />
<button onClick={() => joinRoom(roomId)}>Join Room</button>
<video ref={videoRef} autoPlay></video>
</div>
);
};
socketio = SocketIO(app)
@socketio.on('join')
def handle_join(data):
room_id = data['roomId']
user_id = data['userId']
join_room(room_id)
emit('user_joined', {'userId': user_id}, room=room_id)
@socketio.on('offer')
def handle_offer(data):
room_id = data['roomId']
emit('offer', data, room=room_id)
@socketio.on('answer')
def handle_answer(data):
room_id = data['roomId']
emit('answer', data, room=room_id)
@socketio.on('candidate')
def handle_candidate(data):
room_id = data['roomId']
emit('candidate', data, room=room_id)
if __name__ == '__main__':
socketio.run(app, debug=True)