142 lines
3.9 KiB
JavaScript
142 lines
3.9 KiB
JavaScript
const { Client } = require("../Client.js");
|
||
let {randomUUID} = require("crypto");
|
||
let {addService,addListener} = require("../WebSocket.js");
|
||
const { Room } = require("./Room.js");
|
||
|
||
/*
|
||
Peer to peer veri aktarımı
|
||
|
||
- Kişiden kişiye direkt veri aktarımı
|
||
- Kişiler arası tünelleme / Kişiler arası özel protokol
|
||
- Oda katılımcıları içerisinde veri aktarımı
|
||
- Oda katılımcıları arasında belli kişilere veri aktarımı
|
||
|
||
*/
|
||
|
||
addService(({
|
||
client,
|
||
end,
|
||
global,
|
||
message,
|
||
next,
|
||
response,
|
||
messageId
|
||
}) => {
|
||
let {type} = message;
|
||
switch(type)
|
||
{
|
||
case "pack/to":{
|
||
let {to,pack,handshake} = message;
|
||
|
||
if(!client.packReadable()){
|
||
handshake && end({
|
||
type: 'fail'
|
||
})
|
||
}
|
||
|
||
if(Client.clients.has(to))
|
||
{
|
||
let otherPeer = Client.clients.get(to);
|
||
if(otherPeer.requiredPair && !otherPeer.pairs.has(to))
|
||
{
|
||
return handshake && end({
|
||
type: 'fail'
|
||
})
|
||
}
|
||
|
||
if(!otherPeer.packWriteable()){
|
||
handshake && end({
|
||
type: 'fail'
|
||
})
|
||
}
|
||
otherPeer.send([{
|
||
from: client.id,
|
||
pack: pack
|
||
}, 'pack']);
|
||
handshake && end({
|
||
type: 'success'
|
||
})
|
||
}else{
|
||
handshake && end({
|
||
type: 'fail'
|
||
})
|
||
}
|
||
break;
|
||
}
|
||
case "request/to":{
|
||
let {to,pack} = message;
|
||
if(Client.clients.has(to))
|
||
{
|
||
let otherPeer = Client.clients.get(to);
|
||
if(otherPeer.requiredPair && !otherPeer.pairs.has(to))
|
||
{
|
||
return;
|
||
}
|
||
otherPeer.send([{
|
||
from: client.id,
|
||
pack: pack,
|
||
id:messageId
|
||
}, 'request']);
|
||
}else console.error("request/to error not finded Peer");
|
||
break;
|
||
}
|
||
case "response/to":{
|
||
let {to,pack, id} = message;
|
||
if(Client.clients.has(to))
|
||
{
|
||
let otherPeer = Client.clients.get(to);
|
||
if(otherPeer.requiredPair && !otherPeer.pairs.has(to))
|
||
{
|
||
return;
|
||
}
|
||
otherPeer.send([{
|
||
from: client.id,
|
||
pack: pack
|
||
}, id]);
|
||
}else console.error("response/to error not finded Peer");
|
||
break;
|
||
}
|
||
case "pack/room":{
|
||
let {to,pack, handshake,wom} = message;
|
||
|
||
|
||
if(!client.packReadable()){
|
||
handshake && end({
|
||
type: 'fail'
|
||
})
|
||
}
|
||
|
||
if(Room.rooms.has(to))
|
||
{
|
||
if(!client.rooms.has(to))
|
||
{
|
||
return handshake && end({
|
||
type: 'fail'
|
||
})
|
||
};
|
||
Room.rooms.get(to).send(
|
||
[
|
||
{
|
||
from: to,
|
||
pack: pack,
|
||
sender: client.id
|
||
}, 'pack/room'
|
||
],
|
||
wom ? client.id : void 0,
|
||
client => client.packWriteable()
|
||
);
|
||
handshake && end({
|
||
type: 'success'
|
||
})
|
||
}else{
|
||
handshake && end({
|
||
type: 'fail'
|
||
})
|
||
}
|
||
break;
|
||
}
|
||
default:{
|
||
next();
|
||
}
|
||
};
|
||
}); |