NodeJS Socket Video Chat Room, связанный динамическим URL, только для 2 человек - PullRequest
0 голосов
/ 07 ноября 2019

Как создать приложение для видео-чата с сокетом, которое выполняет следующие действия:

-Server.js имеет массив с именем ids

-Установочный знак в app.get для «получения»URL-адрес пользователя и разделить путь после имени хоста (hostname / *)

-Если выделенный URL-адрес не существует в идентификаторах, генерируется случайная строка, которая помещается в массив идентификаторов

-Созданиеновый видео-чат и отправляет туда этого пользователя

-Этот новый видео-чат может быть подключен только еще одним пользователем с указанным идентификатором в URL (hostname / id)

-Когда оба пользователя отключаются,id удаляется из массива, а чат также удаляется

Я попытался сгенерировать новый html-файл с помощью fs (путем копирования и переименования), но не могу перенаправить пользователя на новый файл. Я могу перенаправлять только на существующие страницы из моего собственного домена или доменов других людей, но не во вновь созданный HTML-файл. Я получаю «внутреннюю ошибку сервера», когда пытаюсь это сделать. Может быть, удалить новый файл, как только оба отключены? Fs делает свою работу в создании файла HTML, но я не могу перенаправить его сразу после его создания.

(Да, есть ejs, но я надеюсь разрешить пользователям подключаться с помощью URL-адресов. URL-адреса должны быть случайными.)

Вот коды.

const express = require('express')
const app = express()
const http = require('http').Server(app)
const io = require('socket.io')(http)
const port = process.env.PORT || 3000
const nanoid = require('nanoid')
const path = require('path');
const fs = require('fs-extra');
var randomID = nanoid();
var ids= [];

app.use("/styles",  express.static(__dirname + '/public/css'));
app.use("/scripts", express.static(__dirname + '/public/js'));
//otherwise, css and client js will not run

app.get('/*',function(req,res){
  var origin = req.url.slice(-21);
  if(ids.includes(origin)===false){
    ids.push(randomID);
    fs.copySync('public/index.html', "public/"+randomID+".html");
    //It works if I redirect to internal and external existing pages
    //var destination = '<script>window.location.href=' + '"' +"https://www.google.com.my/imghp?hl=en&tab=wi&ogbl"+ '";</script>';
    //var destination = '<script>window.location.href=' + '"' +"/-cVHe8n64LGFxOzh9YNcH.html"+ '";</script>';
    var destination = '<script>window.location.href=' + '"' +"/"+ randomId+'.html";</script>';
    //but the server says internal server error
    console.log(destination);
    console.log(urls);
    res.send(destination);
  }
});

let clients = 0
//Only two devices can be in the same page at the same time
io.on('connection', function (socket) {
    socket.on("NewClient", function () {
        if (clients < 2) {
            if (clients == 1) {
                this.emit('CreatePeer');
            }
        }
        else
            this.emit('SessionActive')
        clients++;
    })
    socket.on('Offer', SendOffer)
    socket.on('Answer', SendAnswer)
    socket.on('disconnect', Disconnect)
})

function Disconnect() {
    if (clients > 0) {
        if (clients <= 2)
            this.broadcast.emit("Disconnect");
        clients--
    }
    else {
      //delete the file once both are gone
      urls.splice(urls.indexOf(randomID), 1 );
      console.log(urls);
      fs.removeSync('public/index.html', "public/"+randomID+".html");
    }

}

function SendOffer(offer) {
    this.broadcast.emit("BackOffer", offer)
}

function SendAnswer(data) {
    this.broadcast.emit("BackAnswer", data)
}

http.listen(port, () => console.log(`Active on ${port} port`))

Я серьезно потерян.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...