Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Chat P2P avec WebRTC</title>
- </head>
- <body>
- Votre ID: <span id="my-id"></span><br>
- <ul id="online-users"></ul>
- Ajouter un ID: <input type="text" id="new-id">
- <button onclick="addId()">Ajouter</button><br>
- Connecter à l'ID: <select id="connect-id"></select>
- <button onclick="connectTo()">Connecter</button><br>
- <textarea id="messages" rows="10" cols="30" readonly></textarea><br>
- <input type="text" id="message">
- <button onclick="sendMessage()">Envoyer</button>
- <button id="share-screen" onclick="shareScreen()">Partager écran</button>
- <button onclick="requestScreenShare()">Demander le partage d'écran</button>
- <br>
- <label><input type="checkbox" id="show-my-share"> Afficher mon partage</label><br>
- <video id="my-shared-screen" controls style="display: none;"></video>
- <video id="shared-screen" controls style="display: none;"></video>
- <br>
- <button id="toggleMicrophoneBtn" onclick="toggleMicrophone()">Activer le micro</button>
- <a id="downloadLink" style="display: none;"></a>
- <div id="file-section" style="display: none;">
- Sélectionner un fichier: <input type="file" id="file-selector">
- <span id="file-display">Aucun fichier n’a été sélectionné</span>
- <button onclick="sendFile()">Envoyer fichier</button>
- </div>
- <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
- <script src="https://cdn.jsdelivr.net/npm/peerjs@1.3.2/dist/peerjs.min.js"></script>
- <script>
- let peer = new Peer();
- let conn = null;
- let myUsername = "VotreNom";
- let friendUsername = "Ami";
- let screenStream = null;
- let onlineUsers = [];
- peer.on('open', function (id) {
- $("#my-id").text(id);
- onlineUsers.push(id);
- displayOnlineUsers();
- });
- peer.on('connection', function (connection) {
- conn = connection;
- conn.on('data', handleData);
- });
- function handleData(data) {
- if (data.message) {
- $("#messages").val($("#messages").val() + conn.peer + ": " + data.message + "\n");
- addIdToSelect(conn.peer);
- } else if (data.type === 'requestScreenShare') {
- shareScreen();
- } else if (data.type === 'screenShared') {
- requestSharedScreenStream();
- }
- }
- function requestSharedScreenStream() {
- let peerIdToConnect = $("#connect-id").val();
- mediaConn = peer.call(peerIdToConnect, null);
- mediaConn.on('stream', function(remoteStream) {
- displayVideoStream('shared-screen', remoteStream);
- });
- }
- function connectTo() {
- let peerIdToConnect = $("#connect-id").val();
- conn = peer.connect(peerIdToConnect);
- conn.on('data', handleData);
- }
- function requestScreenShare() {
- if (conn) {
- conn.send({ type: 'requestScreenShare' });
- }
- }
- document.getElementById('message').addEventListener('keydown', function(event) {
- if (event.key === 'Enter' && !event.shiftKey) {
- event.preventDefault(); // Empêche le saut de ligne
- sendMessage(); // Appelle la fonction pour envoyer le message
- }
- });
- function sendMessage() {
- const messageData = {
- type: 'chatMessage',
- message: $("#message").val()
- };
- // Vérifiez si le message contient le mot secret
- if (messageData.message === "!More") {
- document.getElementById('file-section').style.display = 'block';
- $("#message").val(''); // Videz le champ de saisie
- return; // Ne pas envoyer le message secret aux autres
- }
- conn.send(messageData);
- $("#messages").val($("#messages").val() + myUsername + ": " + messageData.message + "\n");
- $("#message").val('');
- }
- function displayOnlineUsers() {
- $('#online-users').empty();
- onlineUsers.forEach(id => {
- $('#online-users').append(`<li>${id}</li>`);
- });
- }
- function addId() {
- const newId = $("#new-id").val().trim();
- addIdToSelect(newId);
- }
- function addIdToSelect(id) {
- if (id && id !== $("#my-id").text() && !$("#connect-id option[value='" + id + "']").length) {
- $("#connect-id").append(`<option value="${id}">${id}</option>`);
- $("#new-id").val('');
- }
- }
- let mediaConn = null;
- async function shareScreen() {
- try {
- screenStream = await navigator.mediaDevices.getDisplayMedia({ video: true, audio: true });
- const audioStream = await navigator.mediaDevices.getUserMedia({ audio: true });
- let tracks = [...screenStream.getTracks(), ...audioStream.getAudioTracks()];
- screenStream = new MediaStream(tracks);
- if ($("#show-my-share").is(":checked")) {
- displayVideoStream('my-shared-screen', screenStream);
- }
- sendScreenStreamToPeer();
- } catch (err) {
- console.error("Erreur lors du partage d'écran:", err);
- }
- }
- function sendScreenStreamToPeer() {
- let peerIdToConnect = $("#connect-id").val();
- mediaConn = peer.call(peerIdToConnect, screenStream);
- }
- function displayVideoStream(videoId, stream) {
- let video = document.getElementById(videoId);
- video.srcObject = stream;
- video.play();
- video.style.display = "block";
- }
- $("#show-my-share").change(function(){
- const myVideo = document.getElementById("my-shared-screen");
- if (this.checked) {
- if (screenStream) {
- displayVideoStream('my-shared-screen', screenStream);
- }
- } else {
- myVideo.style.display = "none";
- }
- });
- peer.on('call', function (incomingCall) {
- if (screenStream) {
- incomingCall.answer(screenStream);
- } else {
- incomingCall.answer(null);
- }
- incomingCall.on('stream', function (remoteStream) {
- displayVideoStream('shared-screen', remoteStream);
- });
- });
- let isMicrophoneMuted = true;
- function toggleMicrophone() {
- if (isMicrophoneMuted) {
- unmuteMicrophone();
- document.getElementById("toggleMicrophoneBtn").innerText = "Désactiver le micro";
- } else {
- muteMicrophone();
- document.getElementById("toggleMicrophoneBtn").innerText = "Activer le micro";
- }
- isMicrophoneMuted = !isMicrophoneMuted;
- }
- let currentAudioStream;
- function muteMicrophone() {
- if (currentAudioStream) {
- const audioTracks = currentAudioStream.getAudioTracks();
- audioTracks.forEach(track => track.enabled = false); // Mettre en pause
- }
- }
- async function unmuteMicrophone() {
- try {
- if (!currentAudioStream) {
- currentAudioStream = await navigator.mediaDevices.getUserMedia({ audio: true });
- } else {
- const audioTracks = currentAudioStream.getAudioTracks();
- audioTracks.forEach(track => track.enabled = true); // Réactiver
- }
- } catch (err) {
- console.error("Erreur lors de l'activation du micro:", err);
- }
- }
- </script>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement