Merge branch 'perfectnogation' into stable
This commit is contained in:
commit
212e0151fa
|
@ -45,9 +45,7 @@ app.get("/console",(request, response)=>{
|
||||||
response.sendFile(resolve("./console/index.html"))
|
response.sendFile(resolve("./console/index.html"))
|
||||||
});
|
});
|
||||||
app.get("/console/lib.js",(request, response)=>{
|
app.get("/console/lib.js",(request, response)=>{
|
||||||
setTimeout(()=> {
|
response.sendFile(resolve("./console/lib.js"))
|
||||||
response.sendFile(resolve("./console/lib.js"))
|
|
||||||
}, Math.random() * 5_000 | 0)
|
|
||||||
});
|
});
|
||||||
app.use("/stream",express.static(resolve("./public")));
|
app.use("/stream",express.static(resolve("./public")));
|
||||||
app.use("/console/",express.static(resolve("./console")));
|
app.use("/console/",express.static(resolve("./console")));
|
||||||
|
|
|
@ -608,7 +608,18 @@ function generatepipe()
|
||||||
},
|
},
|
||||||
async writeln(...args){
|
async writeln(...args){
|
||||||
term.writeln(args.map(e => e.toString()).join(' '))
|
term.writeln(args.map(e => e.toString()).join(' '))
|
||||||
}
|
},
|
||||||
|
COLOR_RESET,
|
||||||
|
COLOR_TEXT,
|
||||||
|
COLOR_BACKGROUND,
|
||||||
|
CURSOR_MOVE,
|
||||||
|
CURSOR_MOVE_UP,
|
||||||
|
CURSOR_MOVE_DOWN,
|
||||||
|
CURSOR_MOVE_RIGHT,
|
||||||
|
CURSOR_MOVE_LEFT,
|
||||||
|
CLEAR_SCREEN,
|
||||||
|
CLEAR_LINE,
|
||||||
|
CLEAR_STYLING
|
||||||
},
|
},
|
||||||
stderr: {
|
stderr: {
|
||||||
async write(...args){
|
async write(...args){
|
||||||
|
@ -892,7 +903,8 @@ class SystemLoad{
|
||||||
(new Function(script))();
|
(new Function(script))();
|
||||||
this.stdout.writeln(`Process success`);
|
this.stdout.writeln(`Process success`);
|
||||||
await wait(100);
|
await wait(100);
|
||||||
}catch{
|
}catch(error){
|
||||||
|
debugger;
|
||||||
this.stderr.writeln(`Process error`);
|
this.stderr.writeln(`Process error`);
|
||||||
await wait(100);
|
await wait(100);
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,5 +9,15 @@
|
||||||
"jsecho",
|
"jsecho",
|
||||||
"set"
|
"set"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"rtc": {
|
||||||
|
"endpoints": [
|
||||||
|
"./rtc/mwse-socket.js",
|
||||||
|
"./rtc/mwse-close.js"
|
||||||
|
],
|
||||||
|
"commands": [
|
||||||
|
"mwse-socket",
|
||||||
|
"mwse-close"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
class MWSECloser{
|
||||||
|
stdin = null;
|
||||||
|
stdout = null;
|
||||||
|
stderr = null;
|
||||||
|
|
||||||
|
endpoint = null;
|
||||||
|
static mwse = null;
|
||||||
|
|
||||||
|
constructor(pipe){
|
||||||
|
this.stdin = pipe.stdin;
|
||||||
|
this.stdout = pipe.stdout;
|
||||||
|
this.stderr = pipe.stderr;
|
||||||
|
}
|
||||||
|
greenText(text){
|
||||||
|
this.stdout.writeln(`${this.stdout.COLOR_TEXT(0,255,0)}${text}${this.stdout.COLOR_RESET()}`);
|
||||||
|
}
|
||||||
|
redText(text){
|
||||||
|
this.stdout.writeln(`${this.stdout.COLOR_TEXT(255,0,0)}${text}${this.stdout.COLOR_RESET()}`);
|
||||||
|
}
|
||||||
|
async main(args)
|
||||||
|
{
|
||||||
|
let mwseConnector = CommandNamespace.namespaces.get('mwse-socket');
|
||||||
|
if(mwseConnector == null){
|
||||||
|
this.stderr.writeln(`mwse-socket yok`);
|
||||||
|
return this.exit();
|
||||||
|
}
|
||||||
|
if(mwseConnector.mwse == null){
|
||||||
|
this.stderr.writeln(`Açık bir soket bulunamadı`);
|
||||||
|
return this.exit();
|
||||||
|
}
|
||||||
|
if(mwseConnector.mwse.server?.disconnect == null){
|
||||||
|
this.stderr.writeln(`MWSE bağlayıcısında hata oluştu`);
|
||||||
|
return this.exit();
|
||||||
|
}
|
||||||
|
mwseConnector.mwse.server.disconnect();
|
||||||
|
this.greenText("MWSE socketi başarılı bir şekilde kapatıldı");
|
||||||
|
this.redText(`\n\n${mwseConnector.mwse.server.endpoint.host} sunucusuyla MWSE bağlantısı kesildi\n\n`);
|
||||||
|
return this.exit();
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
CommandNamespace.namespaces.set('mwse-close', MWSECloser);
|
|
@ -0,0 +1,93 @@
|
||||||
|
class MWSECloser{
|
||||||
|
stdin = null;
|
||||||
|
stdout = null;
|
||||||
|
stderr = null;
|
||||||
|
|
||||||
|
endpoint = null;
|
||||||
|
static mwse = null;
|
||||||
|
|
||||||
|
constructor(pipe){
|
||||||
|
this.stdin = pipe.stdin;
|
||||||
|
this.stdout = pipe.stdout;
|
||||||
|
this.stderr = pipe.stderr;
|
||||||
|
}
|
||||||
|
greenText(text){
|
||||||
|
this.stdout.writeln(`${this.stdout.COLOR_TEXT(0,255,0)}${text}${this.stdout.COLOR_RESET()}`);
|
||||||
|
}
|
||||||
|
async main(args)
|
||||||
|
{
|
||||||
|
this.stdout.write("Endpoint: ");
|
||||||
|
let answer = await this.stdin.readline();
|
||||||
|
let url;
|
||||||
|
|
||||||
|
try{
|
||||||
|
url = new URL(answer)
|
||||||
|
}catch{
|
||||||
|
this.stderr.writeln('Bilinmeyen path yapısı');
|
||||||
|
return this.exit();
|
||||||
|
};
|
||||||
|
|
||||||
|
this.greenText('Path doğrulandı');
|
||||||
|
|
||||||
|
if(url.protocol.toLowerCase() != 'wss:' && url.protocol.toLowerCase() != 'ws:'){
|
||||||
|
this.stderr.writeln('Bilinmeyen protokol');
|
||||||
|
return this.exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.greenText('Şema doğrulandı');
|
||||||
|
|
||||||
|
this.endpoint = url;
|
||||||
|
|
||||||
|
try{
|
||||||
|
await this.scriptImport();
|
||||||
|
}catch{
|
||||||
|
this.stderr.writeln('MWSE bağlayıcısı indirilemedi');
|
||||||
|
return this.exit();
|
||||||
|
};
|
||||||
|
|
||||||
|
this.greenText(`${url.host} üzerinden bağlanılıyor : ${url.href}`);
|
||||||
|
let mwse;
|
||||||
|
try{
|
||||||
|
mwse = new MWSE({
|
||||||
|
endpoint: url.href
|
||||||
|
});
|
||||||
|
|
||||||
|
await new Promise(ok => {
|
||||||
|
mwse.scope(async ()=>{
|
||||||
|
this.greenText(`\n\nMWSE üzerinden ${url.host} makinesine bağlısınız\n\n`);
|
||||||
|
ok();
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
MWSECloser.mwse = mwse;
|
||||||
|
}catch{
|
||||||
|
this.stderr.writeln(`${url.host} makinesine bağlanırken bir sorun oluştu`);
|
||||||
|
return this.exit();
|
||||||
|
}finally{
|
||||||
|
this.exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
async scriptImport()
|
||||||
|
{
|
||||||
|
let t = new URL("script",this.endpoint);
|
||||||
|
if(t.protocol == 'wss:'){
|
||||||
|
t.protocol = 'https:';
|
||||||
|
}else{
|
||||||
|
t.protocol = 'http:';
|
||||||
|
}
|
||||||
|
let script = document.createElement("script");
|
||||||
|
await new Promise((ok,rej) => {
|
||||||
|
script.onload = () => ok();
|
||||||
|
script.onerror = () => rej();
|
||||||
|
script.setAttribute("src",t.href);
|
||||||
|
document.head.appendChild(script);
|
||||||
|
});
|
||||||
|
if(window.MWSE === void 0){
|
||||||
|
this.stderr.writeln('MWSE bağlayıcısı indirilemedi');
|
||||||
|
return this.exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
CommandNamespace.namespaces.set('mwse-socket', MWSECloser);
|
|
@ -0,0 +1,208 @@
|
||||||
|
function HostListItem()
|
||||||
|
{
|
||||||
|
let item = $(`
|
||||||
|
<tr>
|
||||||
|
<td class="text-nowrap">
|
||||||
|
<button class="btn btn-outline-primary btn-sm action-download">
|
||||||
|
İndir
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-outline-danger btn-sm action-remove">
|
||||||
|
Kaldır
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
<td class="text-nowrap">
|
||||||
|
<button class="btn btn-outline-secondary btn-sm action-sha1">
|
||||||
|
Hesapla
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
<td class="text-nowrap">
|
||||||
|
<span class="action-filename">DCIM_AMG_25TEM2025.png</span>
|
||||||
|
<br>
|
||||||
|
<span class="text-muted">
|
||||||
|
(Sizin cihazda)
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
<td class="text-nowrap">
|
||||||
|
<div class="progress" style="height:30px">
|
||||||
|
<div class="progress-bar" role="progressbar" aria-valuenow="20" aria-valuemin="0" aria-valuemax="100"></div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
`);
|
||||||
|
return {
|
||||||
|
download: item.find(".action-download"),
|
||||||
|
hide: item.find(".action-hide"),
|
||||||
|
remove: item.find(".action-remove"),
|
||||||
|
sha1: item.find(".action-sha1"),
|
||||||
|
filename: item.find(".action-filename"),
|
||||||
|
progress: item.find(".progress"),
|
||||||
|
container: item
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function RemoteListItem()
|
||||||
|
{
|
||||||
|
let item = $(`
|
||||||
|
<tr>
|
||||||
|
<td class="text-nowrap">
|
||||||
|
<button class="btn btn-outline-primary btn-sm action-download">
|
||||||
|
İndir
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-outline-secondary btn-sm action-hide">
|
||||||
|
Gizle
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
<td class="text-nowrap">
|
||||||
|
<button class="btn btn-outline-secondary btn-sm action-sha1">
|
||||||
|
Hesapla
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
<td class="text-nowrap">
|
||||||
|
<span class="action-filename">DCIM.mp4</span>
|
||||||
|
<br>
|
||||||
|
<span class="text-muted">
|
||||||
|
(Karşı cihazda)
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
<td class="text-nowrap">
|
||||||
|
<div class="progress" style="height:30px">
|
||||||
|
<div class="progress-bar" role="progressbar" aria-valuenow="20" aria-valuemin="0" aria-valuemax="100"></div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
`);
|
||||||
|
return {
|
||||||
|
download: item.find(".action-download"),
|
||||||
|
hide: item.find(".action-hide"),
|
||||||
|
remove: item.find(".action-remove"),
|
||||||
|
sha1: item.find(".action-sha1"),
|
||||||
|
filename: item.find(".action-filename"),
|
||||||
|
progress: item.find(".progress"),
|
||||||
|
container: item
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function EmptyListItem()
|
||||||
|
{
|
||||||
|
return $(`
|
||||||
|
<tr>
|
||||||
|
<td class="text-center text-muted" colspan="4">
|
||||||
|
Gönderilecek veya alınacak dosya bulunmuyor
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
`)
|
||||||
|
}
|
||||||
|
|
||||||
|
function formatBytes(a,b=2){if(!+a)return"0 Bytes";const c=0>b?0:b,d=Math.floor(Math.log(a)/Math.log(1024));return`${parseFloat((a/Math.pow(1024,d)).toFixed(c))} ${["Bytes","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"][d]}`}
|
||||||
|
|
||||||
|
|
||||||
|
const endpoint = `wss://ws.saqut.com/socket/webserver/${("000000"+(Math.random() * 512 | 0)).slice(-6)}.sock`;
|
||||||
|
|
||||||
|
let mwse = new MWSE({
|
||||||
|
endpoint,
|
||||||
|
autoReconnect: true,
|
||||||
|
autoReconnectTimeout: 60_000
|
||||||
|
});
|
||||||
|
|
||||||
|
mwse.scope(Connect);
|
||||||
|
|
||||||
|
let room;
|
||||||
|
let ip;
|
||||||
|
|
||||||
|
async function Connect()
|
||||||
|
{
|
||||||
|
await genRoom();
|
||||||
|
$(".network-id").text(ip);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function genRoom()
|
||||||
|
{
|
||||||
|
do{
|
||||||
|
let vip = ip = [
|
||||||
|
(Math.random() * 16 | 0) + 10,
|
||||||
|
(Math.random() * 8 | 0),
|
||||||
|
(Math.random() * 4 | 0),
|
||||||
|
(Math.random() * 254 | 0) + 1
|
||||||
|
].join('.');
|
||||||
|
room = mwse.room({
|
||||||
|
name: `WEB3-Smash [${vip}] RO CONNECT:2`,
|
||||||
|
description: "Web3 Smash saQut Server Application",
|
||||||
|
joinType: "free",
|
||||||
|
notifyActionJoined: true,
|
||||||
|
notifyActionEjected: true,
|
||||||
|
ifexistsJoin: false
|
||||||
|
});
|
||||||
|
try{
|
||||||
|
await room.createRoom();
|
||||||
|
break;
|
||||||
|
}catch{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}while(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
class FileDescriptor {
|
||||||
|
static hostfiles = new Map();
|
||||||
|
static remotefiles = new Map();
|
||||||
|
static hostindex = 0;
|
||||||
|
static remoteindex = 0;
|
||||||
|
|
||||||
|
file = null;
|
||||||
|
listItem = null;
|
||||||
|
|
||||||
|
constructor(isHost, item,file){
|
||||||
|
this.file = file;
|
||||||
|
this.listItem = item;
|
||||||
|
$("#thelist").append(item.container);
|
||||||
|
if(isHost)
|
||||||
|
{
|
||||||
|
FileDescriptor.hostfiles.set(
|
||||||
|
++FileDescriptor.hostindex,
|
||||||
|
this
|
||||||
|
);
|
||||||
|
}else{
|
||||||
|
FileDescriptor.remotefiles.set(
|
||||||
|
++FileDescriptor.remoteindex,
|
||||||
|
this
|
||||||
|
);
|
||||||
|
}
|
||||||
|
this.init();
|
||||||
|
}
|
||||||
|
init(){
|
||||||
|
this.listItem.filename.html(
|
||||||
|
this.file.name + " <span class='text-muted'>" + formatBytes(this.file.size) + "</span>"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$("#files").on('change',function(){
|
||||||
|
for (const file of this.files) {
|
||||||
|
$("#thelist .empty").remove();
|
||||||
|
new FileDescriptor(
|
||||||
|
true,
|
||||||
|
HostListItem(),
|
||||||
|
file
|
||||||
|
)
|
||||||
|
};
|
||||||
|
$("#files").val('');
|
||||||
|
});
|
||||||
|
|
||||||
|
$(".joinroom").on("chnage",function(){
|
||||||
|
|
||||||
|
let ip = $("#remoteadress").val();
|
||||||
|
|
||||||
|
if(!/^\d+\.\d+\.\d+$/.test(ip)){
|
||||||
|
return alert(" ")
|
||||||
|
}
|
||||||
|
|
||||||
|
$("#thelist .empty").remove();
|
||||||
|
|
||||||
|
room = mwse.room({
|
||||||
|
name: `WEB3-Smash [${vip}] RO CONNECT:2`,
|
||||||
|
description: "Web3 Smash saQut Server Application",
|
||||||
|
joinType: "free",
|
||||||
|
notifyActionJoined: true,
|
||||||
|
notifyActionEjected: true,
|
||||||
|
ifexistsJoin: false
|
||||||
|
});
|
||||||
|
})
|
|
@ -0,0 +1,64 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Dosya Transfer Sistem</title>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.7/css/bootstrap.min.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container" style="max-width: 1200px">
|
||||||
|
|
||||||
|
<h2 class="text-center mb-2 mt-5">Dosya Transfer Sistemi</h2>
|
||||||
|
<h1 class="text-center mb-5 mt-3 text-bold fw-bold">
|
||||||
|
<span>Ağ Adresiniz</span>
|
||||||
|
<span class="text-danger network-id">
|
||||||
|
#.#.#.#
|
||||||
|
</span>
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<div class="mx-auto d-flex flex-row mb-5" style="max-width: 800px;gap:20px">
|
||||||
|
<div class="flex-fill">
|
||||||
|
<input
|
||||||
|
type="file"
|
||||||
|
id="files"
|
||||||
|
multiple
|
||||||
|
class="form-control"
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
<div class="flex-fill d-flex" style="gap:5px">
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
class="form-control"
|
||||||
|
placeholder="Farklı bir ağa katıl"
|
||||||
|
id="remoteadress"
|
||||||
|
>
|
||||||
|
<button class="btn btn-outline-success joinroom">
|
||||||
|
Katıl
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<table class="table table-bordered table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="text-nowrap" width="1%">İşlem</th>
|
||||||
|
<th class="text-nowrap" width="1%">SHA-1</th>
|
||||||
|
<th class="text-nowrap" width="49%">Dosya İsmi</th>
|
||||||
|
<th class="text-nowrap" width="50%">İşlem</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody id="thelist">
|
||||||
|
<tr class="empty">
|
||||||
|
<td class="text-center text-muted" colspan="4">
|
||||||
|
Gönderilecek veya alınacak dosya bulunmuyor
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<script src="https://ws.saqut.com/script"></script>
|
||||||
|
<script src="m.h.2.8.8.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in New Issue