Compare commits
2 Commits
Author | SHA1 | Date |
---|---|---|
|
603397132d | |
|
30d96a0093 |
|
@ -6,16 +6,25 @@ let compression = require("compression");
|
|||
let {resolve} = require("path");
|
||||
let auth = require("express-basic-auth");
|
||||
|
||||
const { termoutput } = require("./config");
|
||||
const {
|
||||
termoutput,
|
||||
HTTP_PORT,
|
||||
NETWORK_MASK,
|
||||
HTTP_AUTH,
|
||||
HTTP_AUTH_USERNAME,
|
||||
HTTP_AUTH_USERPASSWORD
|
||||
} = require("./config");
|
||||
|
||||
let server = http.createServer();
|
||||
const stats = require("./stats");
|
||||
let app = express();
|
||||
server.addListener("request", app);
|
||||
|
||||
app.use(compression({
|
||||
level: 9
|
||||
}));
|
||||
|
||||
server.listen(7707,'0.0.0.0',() => {
|
||||
server.listen(HTTP_PORT,NETWORK_MASK,() => {
|
||||
termoutput && console.log("HTTP Service Running...");
|
||||
});
|
||||
server.addListener("error",(err)=> {
|
||||
|
@ -25,7 +34,7 @@ exports.http = server;
|
|||
|
||||
let authorize = auth({
|
||||
users:{
|
||||
saqut: "yum81633"
|
||||
[HTTP_AUTH_USERNAME]: HTTP_AUTH_USERPASSWORD
|
||||
},
|
||||
challenge: true
|
||||
});
|
||||
|
@ -39,17 +48,20 @@ app.get("/test",(request, response)=>{
|
|||
app.get("/index.js.map",(request, response)=>{
|
||||
response.sendFile(resolve("./script/index.js.map"))
|
||||
});
|
||||
app.get("/stream",(request, response)=>{
|
||||
response.sendFile(resolve("./public/index.html"))
|
||||
});
|
||||
app.use("/stream",express.static(resolve("./public")));
|
||||
if(HTTP_AUTH)
|
||||
{
|
||||
app.get("/stream",(request, response)=>{
|
||||
response.sendFile(resolve("./public/index.html"))
|
||||
});
|
||||
app.use("/stream",express.static(resolve("./public")));
|
||||
app.get("/",authorize,(request, response)=>{
|
||||
response.sendFile(resolve("./script/index.html"))
|
||||
});
|
||||
app.post("/stats",authorize,(request, response)=>{
|
||||
response.json(stats.others);
|
||||
});
|
||||
}
|
||||
|
||||
app.get("/",authorize,(request, response)=>{
|
||||
response.sendFile(resolve("./script/index.html"))
|
||||
});
|
||||
app.post("/stats",authorize,(request, response)=>{
|
||||
response.json(stats.others);
|
||||
});
|
||||
app.get("*",(request, response)=>{
|
||||
response.sendFile(resolve("./script/status.xml"))
|
||||
});
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
process.on('message',data => {
|
||||
const { Client } = require("./Client.js");
|
||||
const { Client } = require("./Services/Client");
|
||||
const { Room } = require("./Services/Room");
|
||||
switch(data.type)
|
||||
{
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
const { Client } = require("../Client.js");
|
||||
const { Client } = require("./Client.js");
|
||||
const { CLIENT_UPDATE_PROP } = require("../IPC.js");
|
||||
let {addService, addListener} = require("../WebSocket.js");
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
const { CLIENT_SEND_MESSAGE, CLIENT_UPDATE_PROP } = require("./IPC");
|
||||
const stats = require("./stats");
|
||||
const { CLIENT_SEND_MESSAGE, CLIENT_UPDATE_PROP } = require("../IPC");
|
||||
const stats = require("../stats");
|
||||
function Client()
|
||||
{
|
||||
/**
|
|
@ -1,4 +1,4 @@
|
|||
const { Client } = require("../Client.js");
|
||||
const { Client } = require("./Client.js");
|
||||
let {randomUUID} = require("crypto");
|
||||
let {addService,addListener} = require("../WebSocket.js");
|
||||
const { Room } = require("./Room.js");
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
const { Client } = require("../Client");
|
||||
const { Client } = require("./Client");
|
||||
let {addService, addListener} = require("../WebSocket.js");
|
||||
|
||||
class APNumber{
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
const { Client } = require("../Client.js");
|
||||
const { Client } = require("./Client.js");
|
||||
let {randomUUID,createHash} = require("crypto");
|
||||
const joi = require("joi");
|
||||
let {addService,addListener} = require("../WebSocket.js");
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
let websocket = require("websocket");
|
||||
let {http} = require("./HTTPServer");
|
||||
let {randomUUID} = require("crypto");
|
||||
const { Client } = require("./Client.js");
|
||||
const { Client } = require("./Services/Client");
|
||||
const { termoutput } = require("./config");
|
||||
const { CLIENT_CREATED, CLIENT_DESTROY } = require("./IPC");
|
||||
const stats = require("./stats");
|
||||
|
|
|
@ -1 +1,15 @@
|
|||
exports.termoutput = false;
|
||||
const {resolve} = require("node:path");
|
||||
|
||||
exports.termoutput = false;
|
||||
|
||||
exports.HTTP_PORT = 7707;
|
||||
exports.NETWORK_MASK = '0.0.0.0'; //---> Sadece local için "127.0.0.1" heryerde çalışması için "0.0.0.0"
|
||||
|
||||
exports.HTTP_AUTH = true;
|
||||
exports.HTTP_AUTH_USERNAME = 'saqut';
|
||||
exports.HTTP_AUTH_USERPASSWORD = 'yum81633';
|
||||
|
||||
exports.LOADBALANCE_CPU = false; // ---> Cpu number (2,3,4...) for load balancer process or false for single thread (no load balancer and multiprocess)
|
||||
|
||||
exports.IPALLOCATION_DB = resolve(__dirname,"../database/ipallocation.db");
|
||||
exports.IPALLOCATION_STORE_TYPE = "memory" // or file
|
|
@ -6,6 +6,7 @@ require("./Services/Auth.js");
|
|||
require("./Services/Room.js");
|
||||
require("./Services/DataTransfer.js");
|
||||
require("./Services/IPPressure.js");
|
||||
require("./module/IPAllocation.js");
|
||||
|
||||
process.on('unhandledRejection',()=>{
|
||||
|
||||
|
|
|
@ -0,0 +1,224 @@
|
|||
const knex = require("knex");
|
||||
const { IPALLOCATION_DB } = require("../config");
|
||||
const crypto = require("node:crypto");
|
||||
const moment = require("moment");
|
||||
|
||||
let IPDB = knex({
|
||||
client: "sqlite3",
|
||||
connection: exports.IPALLOCATION_STORE_TYPE == "memory" ? ":memory:" : IPALLOCATION_DB,
|
||||
useNullAsDefault: true
|
||||
});
|
||||
|
||||
let flovitNumber = [
|
||||
[
|
||||
8,
|
||||
12,
|
||||
24,
|
||||
48,
|
||||
52,
|
||||
56
|
||||
],
|
||||
[
|
||||
7,
|
||||
10,
|
||||
13,
|
||||
16,
|
||||
19,
|
||||
22,
|
||||
25,
|
||||
28,
|
||||
31,
|
||||
34,
|
||||
37,
|
||||
40,
|
||||
43,
|
||||
46,
|
||||
49,
|
||||
52,
|
||||
55,
|
||||
58,
|
||||
61,
|
||||
64,
|
||||
67,
|
||||
70,
|
||||
73,
|
||||
76,
|
||||
79,
|
||||
82
|
||||
]
|
||||
];
|
||||
|
||||
async function read(filter)
|
||||
{
|
||||
return await IPDB.table("iptable").where(filter).first();
|
||||
}
|
||||
async function has(filter)
|
||||
{
|
||||
return (
|
||||
await IPDB.table("iptable").where(filter).count('* as key').first()
|
||||
).key != 0;
|
||||
}
|
||||
async function flushAll()
|
||||
{
|
||||
await IPDB.table("iptable").delete();
|
||||
}
|
||||
async function write(value,filter)
|
||||
{
|
||||
await IPDB.table("iptable").where(filter).update(value);
|
||||
}
|
||||
async function create(value)
|
||||
{
|
||||
await IPDB.table("iptable").insert(value);
|
||||
}
|
||||
async function remove(...filterArgs)
|
||||
{
|
||||
await IPDB.table("iptable").where(...filterArgs).delete();
|
||||
}
|
||||
|
||||
async function migrate()
|
||||
{
|
||||
if(!await IPDB.schema.hasTable("iptable"))
|
||||
{
|
||||
await IPDB.schema.createTable("iptable",function(table){
|
||||
table.bigInteger("ipaddress").unsigned().primary();
|
||||
table.text("owner").unique();
|
||||
table.string("type", 50).defaultTo("client");
|
||||
table.dateTime("created").defaultTo(IPDB.fn.now());
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
function iptobin(a,b,c,d)
|
||||
{
|
||||
const bin =
|
||||
((a | 0) << 24) |
|
||||
((b | 0) << 16) |
|
||||
((c | 0) << 8) |
|
||||
(d | 0);
|
||||
return bin;
|
||||
}
|
||||
function bintoip(bin)
|
||||
{
|
||||
if(typeof bin == "string")
|
||||
{
|
||||
bin = bin | 0;
|
||||
}
|
||||
const octet1 = (bin >>> 24) & 0xff;
|
||||
const octet2 = (bin >>> 16) & 0xff;
|
||||
const octet3 = (bin >>> 8) & 0xff;
|
||||
const octet4 = bin & 0xff;
|
||||
return [octet1,octet2,octet3,octet4];
|
||||
}
|
||||
function randomMaskINIT()
|
||||
{
|
||||
if(typeof bin == "string")
|
||||
{
|
||||
bin = bin.split('.').map(e => e | 0);
|
||||
}
|
||||
let globalmask = crypto.randomInt(flovitNumber[0].length);
|
||||
let macromask = crypto.randomInt(flovitNumber[1].length);
|
||||
|
||||
return [
|
||||
flovitNumber[0][globalmask],
|
||||
flovitNumber[1][macromask],
|
||||
0,
|
||||
0
|
||||
]
|
||||
}
|
||||
async function init()
|
||||
{
|
||||
await migrate();
|
||||
await flushAll();
|
||||
await create({
|
||||
ipaddress: 0, // globalmask & macromask
|
||||
owner: randomMaskINIT().join('.'),
|
||||
type: "system",
|
||||
created: moment().format()
|
||||
});
|
||||
hook()
|
||||
}
|
||||
init.inited = false;
|
||||
|
||||
async function getip(owner, type)
|
||||
{
|
||||
let call = await read({
|
||||
owner,
|
||||
type
|
||||
});
|
||||
return !call ? false : {
|
||||
ipaddress: call.ipaddress,
|
||||
date: call.created
|
||||
};
|
||||
}
|
||||
async function setip(owner, type, ip)
|
||||
{
|
||||
await getip(owner, type) ?
|
||||
await write({
|
||||
ipaddress: ip
|
||||
},{
|
||||
owner,
|
||||
type
|
||||
})
|
||||
:
|
||||
await create({
|
||||
ipaddress: ip,
|
||||
owner,
|
||||
type
|
||||
});
|
||||
}
|
||||
|
||||
async function allocateIP(owner, type, changeOverlord)
|
||||
{
|
||||
let [a,b,c,d] = [ ,,, ];
|
||||
if(changeOverlord)
|
||||
{
|
||||
[a,b,c,d] = randomMaskINIT();
|
||||
}else{
|
||||
let ipinfo = await read({
|
||||
ipaddress: 0,
|
||||
type: "system"
|
||||
});
|
||||
[a,b,c,d] = ipinfo.owner.split('.').map(e => e | 0);
|
||||
}
|
||||
|
||||
while(1)
|
||||
{
|
||||
if(d != 255)
|
||||
{
|
||||
d++;
|
||||
}else if(c != 255){
|
||||
c++;
|
||||
}else if(b != 255){
|
||||
b++;
|
||||
}else if(a != 255){
|
||||
a++;
|
||||
}else{
|
||||
[a,b,c,d] = randomMaskINIT();
|
||||
}
|
||||
let query = {
|
||||
ipaddress: iptobin(a,b,c,d)
|
||||
};
|
||||
let result = await has(query);
|
||||
if(result == false)
|
||||
{
|
||||
await create({
|
||||
ipaddress: iptobin(a,b,c,d),
|
||||
owner,
|
||||
type
|
||||
});
|
||||
await write({
|
||||
owner: [a,b,c,d].join('.')
|
||||
},{
|
||||
type: "system",
|
||||
ipaddress: 0
|
||||
});
|
||||
break;
|
||||
}else{
|
||||
console.log("Checking",[a,b,c,d].join('.'))
|
||||
}
|
||||
}
|
||||
return[a,b,c,d].join('.')
|
||||
}
|
||||
|
||||
process.nextTick(init);
|
Binary file not shown.
|
@ -17,21 +17,6 @@ export default class MWSE extends EventTarget {
|
|||
public peers : Map<string, Peer> = new Map();
|
||||
public virtualPressure : IPPressure;
|
||||
public me! : Peer;
|
||||
/*public static compress(message:string, callback:(e:any) => any)
|
||||
{
|
||||
let u : any= [];
|
||||
let C = new Gzip({
|
||||
level: 9,
|
||||
mem: 12
|
||||
},(stream,isLast) => {
|
||||
u.push(stream);
|
||||
if(isLast)
|
||||
{
|
||||
callback(u);
|
||||
}
|
||||
});
|
||||
C.push(new TextEncoder().encode(message), true);
|
||||
}*/
|
||||
constructor(options: IConnection){
|
||||
super();
|
||||
this.server = new Connection(options);
|
||||
|
|
13
index.js
13
index.js
|
@ -2,6 +2,7 @@
|
|||
const cluster = require("cluster");
|
||||
const os = require("os");
|
||||
let {randomUUID} = require("crypto");
|
||||
const { LOADBALANCE_CPU } = require('./Source/config');
|
||||
|
||||
/**
|
||||
* Use Round Robin algorithm for cluster process load balancer
|
||||
|
@ -10,6 +11,16 @@ let {randomUUID} = require("crypto");
|
|||
|
||||
async function main()
|
||||
{
|
||||
if(!LOADBALANCE_CPU)
|
||||
{
|
||||
console.log("Slave Process PID:", process.pid);
|
||||
// Emit from slave
|
||||
process.send = new Function();
|
||||
// Compile source code and run
|
||||
require("./Source/index");
|
||||
// stay here
|
||||
return;
|
||||
}
|
||||
if(cluster.isPrimary == false)
|
||||
{
|
||||
console.log("Slave Process PID:", process.pid);
|
||||
|
@ -26,7 +37,7 @@ async function main()
|
|||
// Worker process list
|
||||
const master = new Map();
|
||||
|
||||
const coreCount = 3 //os.cpus().length;
|
||||
const coreCount = LOADBALANCE_CPU//os.cpus().length;
|
||||
for(let index = 0; index < coreCount; index++)
|
||||
{
|
||||
// Open slave process
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
"fflate": "^0.8.1",
|
||||
"joi": "^17.11.0",
|
||||
"knex": "^3.0.1",
|
||||
"moment": "^2.29.4",
|
||||
"sqlite3": "^5.1.6",
|
||||
"systemjs": "^6.14.2",
|
||||
"terminal": "^0.1.4",
|
||||
|
@ -2619,6 +2620,14 @@
|
|||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/moment": {
|
||||
"version": "2.29.4",
|
||||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
|
||||
"integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/ms": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
"fflate": "^0.8.1",
|
||||
"joi": "^17.11.0",
|
||||
"knex": "^3.0.1",
|
||||
"moment": "^2.29.4",
|
||||
"sqlite3": "^5.1.6",
|
||||
"systemjs": "^6.14.2",
|
||||
"terminal": "^0.1.4",
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
<service md5="a35aeef398a27556cf9e08aa6e25650c" checkout="true" status="verified">
|
||||
8305f8dd0b412a4b95ef71a44a2cb069890895668054436640b9dffd2b0db4d84e21788b2cf8d609eb95773b4ef3c926335bc93bdc4df971a95f4c4c68ee627402c8935aa619ad276a6994004babf0bb41a8ca9fd5d22e76ec68f662eeb449ad9cdbd37f78b52fb88101e86a54323be7cd4777fdab26ada1cbba1ff0b08b6f451aa45daadcf9ef35a0a24039f2b1d5ca88ad64057afdbfe7c2bba6033380208d8d7c6c5f822a5f8bf19b5ee4f16efe068bd914d2e6ca831af24d53fa330c5d8150eb52fdd29518c14ecbc9af7e68a6e5f7a866150ecccf2b598fd6ba78521d5fe815797a6430ea09d6b394abe630df9510046bc983d9c41e3213868aeaa9dd531220959dd6305a1c582bde1a3e01d9b4be5d09150c1f4a84aa35c995103e6c6e3b6bb5345759b2219a31d05626373653d8151130ba1abef2aa78494f736792c0a462f54ebd86d2a110ae27ad1ad413baca5c7c4a302252da1423e44647cd57399e92cc805a60ce43bbda7a74797be1ad0275c0b270be2f117bd9ccc07bee42e247d178b15ba233535bffbb1c641cdd9ca3d387985b7980e8aed9752dbe30313f8a4b911f0ac7d8fd9352e3be80cdfaa3fd20ac5771c9f918d456b88cd3155de13a3f71bbcc627e766a16a86cac17f83fde98a2e7742bee4144ad235e23c76459522a96812819585155b6fcb6a08dafb19ccf93de37cb6738c803f73b0876e583d47ea3c59d6aba7b168c8de113a8f04cb813847a79682574ee71f6d9a5987b5e3be7169bf3bd82fbda4f5899e31b55b8c257f989516bbc879e60a49a4c5370230b4f728dd9389a059b481ea61046230e1382046955dae636005db580ec4a0540ee382fbc74b78b00ec821a19778fc119b673496df2bc2f11639922141d4cbb8fe22833f6fb210801419ab1b43f77a2baf892055a41c57e529026d4784aad469a4d2b530e81780f2aaea6b37b44243fa0f5e60a99391c6cf2e8a0f263a38566bfa56f761684b754bb8fa95aed80511332bff4673d600b6a09852cba34faca550f0652241a9eb04ca9652c4a19c20d37d6772604c3bbd34c82fa913a1a95e33b811f33952f4618d3600165574e29c44f7f748c05f90105791906e5920b356c4a8ce133dc2a809f0e47aa0ca2537a09688d2b92d49fa6b1f25165b6d2905ea99d1d6d56b2c39b08167df0cf18ce0f593228abbdbba718f05de4700ffa54067cb01fa65d9e378c0bc88d5f4d7bc153db964920e3c0dab30c02e87d957c369c6492bba7b240c27541d80bf0d39cbe62c077bdf6b1fb252d470cc39f9e43a13a95c08788dd5fe4e62fa3b07be01496bc977c6e1fe62977a2a8b72197fb3ad812369e96e3dd2ad329f134aaa4baee81c2ebd1b2c39e55fd9afcc554633ffb04a827ac75f7b26e49bcc341ea062ba13f672cd0a1dfd79a093273a5187e3adb6ece0e460555dc872c49b95e5054ffb772a4301feecdb072d6087345814b4af54de55d413eee562be25741a041bbdcb2850281
|
||||
</service>
|
||||
<service md5="af214a23bf109f45d423f0fdcad927f4" checkout="true" status="verified">
|
||||
<service md5="af214a23bf109f45d423f0fdcad927f4" checkout="true" status="fail">
|
||||
fb7d736ac8ee7a3a74f952551e8856a34c05d564ee0408ca0eea47a86e833b5b30a732b9d3ca954e56231908beb9022aec02c756c3e075bd9086f9ade0381b953185b4d3ed332d5c4b454abe5d2ccbeb48b473f956d543bde4f48c1978f129da7bf481b629a8da09941e5ea66d069617f6c82ac3a685b9e6cf75d8d4faf0b2ca0b52df201372c6e2d08dbcb2b724da94c733590165282e6faefd7bb89bb5be76d452f84b50a557d4b0f45192fc562f3682aba1098818ed3ddfaf72181d66f1f7b59be2b31759b66c
|
||||
</service>
|
||||
</unit>
|
||||
|
@ -48,7 +48,7 @@
|
|||
<service md5="a35aeef398a27556cf9e08aa6e25650c" checkout="true" status="verified">
|
||||
8305f8dd0b412a4b95ef71a44a2cb069890895668054436640b9dffd2b0db4d84e21788b2cf8d609eb95773b4ef3c926335bc93bdc4df971a95f4c4c68ee627402c8935aa619ad276a6994004babf0bb41a8ca9fd5d22e76ec68f662eeb449ad9cdbd37f78b52fb88101e86a54323be7cd4777fdab26ada1cbba1ff0b08b6f451aa45daadcf9ef35a0a24039f2b1d5ca88ad64057afdbfe7c2bba6033380208d8d7c6c5f822a5f8bf19b5ee4f16efe068bd914d2e6ca831af24d53fa330c5d8150eb52fdd29518c14ecbc9af7e68a6e5f7a866150ecccf2b598fd6ba78521d5fe815797a6430ea09d6b394abe630df9510046bc983d9c41e3213868aeaa9dd531220959dd6305a1c582bde1a3e01d9b4be5d09150c1f4a84aa35c995103e6c6e3b6bb5345759b2219a31d05626373653d8151130ba1abef2aa78494f736792c0a462f54ebd86d2a110ae27ad1ad413baca5c7c4a302252da1423e44647cd57399e92cc805a60ce43bbda7a74797be1ad0275c0b270be2f117bd9ccc07bee42e247d178b15ba233535bffbb1c641cdd9ca3d387985b7980e8aed9752dbe30313f8a4b911f0ac7d8fd9352e3be80cdfaa3fd20ac5771c9f918d456b88cd3155de13a3f71bbcc627e766a16a86cac17f83fde98a2e7742bee4144ad235e23c76459522a96812819585155b6fcb6a08dafb19ccf93de37cb6738c803f73b0876e583d47ea3c59d6aba7b168c8de113a8f04cb813847a79682574ee71f6d9a5987b5e3be7169bf3bd82fbda4f5899e31b55b8c257f989516bbc879e60a49a4c5370230b4f728dd9389a059b481ea61046230e1382046955dae636005db580ec4a0540ee382fbc74b78b00ec821a19778fc119b673496df2bc2f11639922141d4cbb8fe22833f6fb210801419ab1b43f77a2baf892055a41c57e529026d4784aad469a4d2b530e81780f2aaea6b37b44243fa0f5e60a99391c6cf2e8a0f263a38566bfa56f761684b754bb8fa95aed80511332bff4673d600b6a09852cba34faca550f0652241a9eb04ca9652c4a19c20d37d6772604c3bbd34c82fa913a1a95e33b811f33952f4618d3600165574e29c44f7f748c05f90105791906e5920b356c4a8ce133dc2a809f0e47aa0ca2537a09688d2b92d49fa6b1f25165b6d2905ea99d1d6d56b2c39b08167df0cf18ce0f593228abbdbba718f05de4700ffa54067cb01fa65d9e378c0bc88d5f4d7bc153db964920e3c0dab30c02e87d957c369c6492bba7b240c27541d80bf0d39cbe62c077bdf6b1fb252d470cc39f9e43a13a95c08788dd5fe4e62fa3b07be01496bc977c6e1fe62977a2a8b72197fb3ad812369e96e3dd2ad329f134aaa4baee81c2ebd1b2c39e55fd9afcc554633ffb04a827ac75f7b26e49bcc341ea062ba13f672cd0a1dfd79a093273a5187e3adb6ece0e460555dc872c49b95e5054ffb772a4301feecdb072d6087345814b4af54de55d413eee562be25741a041bbdcb2850281
|
||||
</service>
|
||||
<service md5="af214a23bf109f45d423f0fdcad927f4" checkout="true" status="verified">
|
||||
<service md5="af214a23bf109f45d423f0fdcad927f4" checkout="true" status="fail">
|
||||
fb7d736ac8ee7a3a74f952551e8856a34c05d564ee0408ca0eea47a86e833b5b30a732b9d3ca954e56231908beb9022aec02c756c3e075bd9086f9ade0381b953185b4d3ed332d5c4b454abe5d2ccbeb48b473f956d543bde4f48c1978f129da7bf481b629a8da09941e5ea66d069617f6c82ac3a685b9e6cf75d8d4faf0b2ca0b52df201372c6e2d08dbcb2b724da94c733590165282e6faefd7bb89bb5be76d452f84b50a557d4b0f45192fc562f3682aba1098818ed3ddfaf72181d66f1f7b59be2b31759b66c
|
||||
</service>
|
||||
</unit>
|
||||
|
@ -62,19 +62,19 @@
|
|||
<service md5="2836d60b7e3a9a41f75d662d63c65197" checkout="true" status="verified">
|
||||
35b9ea4d98445d6fda595e42c921269e0699ed78a2655b169fcaffef66521e649c1818cb71fb5a2ef4c0f453786de08c9cf81cdc4f6bcb8a7af68f23d9a4b3dc4a84950a13261e929ef4aa41a53819b8fc98582250533b476e46d6d0894a0003f315a6d8612d2d46eebe367330ae4587635daa4d4b929a33de91dfdb30b1aa3b3bded0ab06741786b19564b74e3b0d86a3d056bf9662fa004d2609a62b862caea7f6448a5257689a0de69798ac8eaf6186799c1e5de7ba124493365a76ded957d0f133190608b49c940cd7db6bdcb6b98739dfe6dc44b4736ebb10a3563ac7a4c6c63177cb292f32be6be3041cd2c27fef4c9f3ec2005041f80df142941185c57114d90500c744d9442f4507e43c91bbacc4205ee8dc4dbbc0656a6bf948309c446ffc67844f8e49171672ebbf380368979e20dcd114f889936f5a6ae0fdc393d4292659ee8f00070c0b6f01781e9c9d64a1ef7dc43912de5666d2f3495d9e4f3b478621e0e7e2ade6728e2de162aaf06b000ef5c514ba8004ed28cdbb9893a2b9e024a3ffedf98b920ff94130f31775cbc6a4f7a0dd361c40a8ca0956bf7fa4047bb00ab51c8aae729cce29a5427b8f80e28fcd5163a6f070c654ef05b85671fd1c9a2a2e52e8737b3cc04d6e95e0690b5e7d711b23c45a065f66193ab6d070a23efa56654f9427ec05e4e32a79e43869db3f3b61ca5c4fed04f2926e4bdb99367b15068868d0fb232359ea3c9e9c64150b4058a592b59943a7e23b69813bf08e637cca4ea1e5e996613a1db2684386a5e5f0dcbbea04b312f69512bab31db7e9ef94b6905a79690193f7289851821d135974af3696a2e0439585a960b3d8a31568bca8de1271a14cd30ed1a7b85adf23f9d76f5b62149242296677fea61288a4b58d2e38889b2bbd9926672df36b46fd6463bf0c0f7b1db1a7312071ef8e39a5a7deea4e47b6cda985de2cc5133337633b3db6d0cb54d56795a8a76fef2edf93debc3cbea6d0b902a0c710e73fa443c4842ec1646b4934514d2700eaa48b1320f0477f992ac0849bfd1fa628fd2b85a8997c5c2128bcb8135718b62180ede1ee8d4bf375c053a5419173b6adf54ab6f5943a377f7b2b4b81807fba3460b6acd28ef6d4be2bb015d9d5ea9b3c2d22389d7c688dd871e0a9fe295389711bf19804eeb68a86204fed691fe7493db9e0d2bce3f6ae4df5debe4cd4b4c668111146dc82b638080da9fa26d47d00f37538ee2a4a2930d39d1f734537a79d0d34f6cfab7893e2ebe71ec110e82f63a7d5c246737acadf1fc75c777faaa150164fc204c7ad3261fc9563a1b5bac908905d53fb7f37060dc1c5750634b200b31fbfaf4de1fefbc687b4c808968065e9cb567f003e1bd06b77e6442a7e5d3f54ff98d12d03d3f8705fdeb9614764acd153fc15a8763e5dc95e2c19ce478b8da93744680f2bfca75e50bebabc0cbb609575bb1000141dc35da3f4b5f5141899ff9ef856b7904baf5a828d2e4f576a58e505c5c9f3e5bc0e1ecfaf4ef36a7dee842aaf155db65912cd8dfccd11b188f5da5ea10035d47f17e0996791b0aacefa38799708198e4780846c7b1cf60aa9172a3a5935338bdb71e33a20b96181e487dd5caeeeff0446bc945ac2a83c3ca0ded82939d314073711c2afce8cc2a94fc6d46e28ea5bbafcd6adb517dedc9fa99446be727718bc41122214b6b788641e785ba0bee6530c61f9a9a58c14c6a5c477fd6f2117c67b1a2d8ca20e3aaef5c2d4e1f2b525fc8516ac90654880e72b4d87916e76592691d154a89f4125db6d9635e553955797f77ec00797f130f43b6245bf97cb88c93a641c78cbc352cf4816b075c81133cff364f4120399e3beb8cb6aae362a33de38c0d14d919a1939c00d46cd7ec2368620378fa490dd7d746361df3ee49b19a848035f619b08a66271fd97cb805ec834d85355495f003e39b6284b1ff52d5fbfeca7f7676f2a780c0b649abe6574da5867b2949af7d01e33fb9ffdee
|
||||
</service>
|
||||
<service md5="ae9965260e1098a43543a9a79fa1dac4" checkout="true" status="verified">
|
||||
<service md5="ae9965260e1098a43543a9a79fa1dac4" checkout="true" status="wait-confirm">
|
||||
2fe9827b8286e6e5329cc9af2bb910f78b57ec5d073e6ef061360d7103f1c38245e04f804f431da3b51887a6e16cfee2a69534f4ab8ded57b74029beba7ccd2347b962d8f0d2d8bc93771a52ef4688fdf9759d33be9ba18b306a86fd3848b8ca8fe61abdd9ea2b9018c31554122172488166517e67276384b23239f02f4b5c4d8290dc542f0af54a66874a34bb8cd6114d7d5bce7404294f2c41ec20b85b942e5dca6e7b94fdea2e3dcd98777d0d7b631246c2222b69bd0547dc56d4c7990e0f803c32593cd218f4d655998ddd90e488a5d12aa7ef868f7641dc6a6df0bb0abfc0e76335ab682d909d117d863c90f6e21ebdb3ff8a7126bde4b14c524afe31fad20d1b000356cd25ab2276a2adf82638a5bf20304e2ad1a2f28cd7490e818fbec3566514cdeb412ce63d421738b038e40f70073d50352307de058b40d6215f6af1ce09cf6b954be69c7ef0f8030449a20faa5c2dd9b8d0f1adf911371156dc65b470fb02a092975af2f9080f689dd56cc3cd0f4c0434537e32b80cc22bd19743b1145d713422fed681b3bb9a09c5e5ec8f739631a8ffe2a49cebb2f13634b9414da48845948473616f18814447f63e018015b3d385cc592cc80c1f5a54d04029766572be94991d3e96b952961813e35fdc3f86a2d5fbfcd48a12d531be0f68ffcf48f1eb0e14623a6cfbdea026dd766fab9bbbc442468e6559d934959f0643c963c0799fcc3f98ccfa38b84cfb962a77cf5008037c81934425f0d7f4d1b7093adfc109918a7a130f1b3d5073a1517ac1c5b6dfe962917c8704e0d94d68795355f4ac341f84124bddd270c1da1a180ca101fb5f0bd4204e11461dce54d96827dcaa3e3a3889a621734268cf27ac18fe8c0df23108f3ef949fc68fd54122f3ea5fd5b2131b1ab7264006d730a7c4b90493b6858d78f5dfcf2cddbe8f1aa2b5da1de0580862ae16e01c5bce21a537ce0a8dfec8379c5152c0a3af41e09b7d35ed8920ad0f01abf1495b6e3e565cc8734ecf22a839212626f8f46cee5b90a742d43c2de2a280a2b1ffbe7e8285d8632bbf1137c28590f0420b3e75809c71f8b0e9bd8ed8995ba81003386d9c206ff5d3db014353d9565d1ac859f9335146cd3d2c8a04b4c3a1e7fa2e37a067ea2cb8fd4826010ecc5915114301fd7b2c7c72a222618c424797fe690cc9af7bc0a609c17a1dc8de4603df8ecbcc08d09bdd382b440fb29d11c822319b8572727592915fdcc1d9f7f3a025bec58834d5c55505c8013a5daf7f6e312b509500c2adc8e664c56031666124ab3f997185ae4f9286e7e6760ca8a106484fc68e50da961819fce231fca20330729b80be767c75006b1f8b796d60da0636d8fec8bd4c69671a8681f11f21f2b104ab4961c50b50f6b2b5fc59f78b674de891652d91f32ba60deaabf554158a38989438b67fb1713a14b4a2b58843a8b2df832d0969309f23ce4e07504a6be8aba05d8d79af93f41cf70fe0ef7b20ad603e4bd4c9261b0c3a007b46663c7b16ad77e8b8029d4d76fc4941205134d4cc9b7b7f9cc961ce5651afe8b308fa982cfdd57e9c21e1c65b2e906001f98f63cea267c44032c28348655541242b2092bfe8cb521bc491d376d989baa75c8f3c588089956f0736a71245c7acf0654dbaaad04803f8d8096d9a2c786a4c96ab99e4bc38119171839b718cffba4f8503d624cdfc2209597505da520878e2a10a9a7b0cd1e54ca09cf8c1ec9898735ea38e0886c940d8390d4581d205e4d9eb03d280071c6428bcee962122094af10e3784150651c5c4a583d8814c9e14810e021c659bf8cb66f82141d9a87248b20cba5cc212b2c0cd6dd085e690e549b31376babf1f3b19581956e26b1107f198975502
|
||||
</service>
|
||||
<service md5="7c72644fd27fad50a9a932107bbf9321" checkout="true" status="verified">
|
||||
<service md5="7c72644fd27fad50a9a932107bbf9321" checkout="true" status="wait-confirm">
|
||||
74f4e96bbc0f84de1f5f481c7e3257243edfcec173663557469a90ef23c067b8606774b867568db7dfe5209aada24cc96fcf93faa7a95180ffe2a20154898e82b27e27d01358c42c1857f9bdcb4a83ee1709226e2fc117c3a93cd3cb139777fc9295b4602c5d7c76f5a47d2f574009959a274f49d36e7435ed61e755768551859dfc34277df224c2dc9365112b9459e26235e7ce8619d0d1457954de93f604a200b0e9368b53aa7a3313b4f020d28625c646b6ca7bc6feadc7297b5a51f7eeb77adb016f346ca3bd2f4878a92dcef4abad57b0e5c8a10087f717e813892f55ed4e248cc6bdf0ea1edcaa1d42adbec7d2832c184d2185fdb66f0ee0043ce0a6035a151b22d81eafcf4cf9a8ce962e6ce1f6571b6df0a86dc221b770974f5bbfe960efbfb8c148f590584fbefae0b5cb95545bf69e4e5c9a39b431155649468ef093127aba424654ee0bb46d194ad17e61b022c43671dfef0eae98ec6ba6cd2924279fb592ac1d3babb61c0befddf6521efc38d4d75007499864cced0c8ee14cb5fd37b79626f636753b585ccfcf583ee92784850f0cacd3389c3546827bf3e7ef2719b25819f0208dcf7c3493edfc048a6fa3d35511e6f9c2a367cb87ad74c0f41bf853b6ba35f51fadfd5632012bde0180585dff6a7f114a2a958ce7ecbe484304dba2f138a86c4b0aad337c0047b1cb9dcd358300155d09b72d6c0ed4c53778e86fbdc7674d37a1441c1d38bf8f4c9976540090575863c41a8211c9b9450f28edd514ed8d51e3565de2fd30d6f0bf02fcfb79319ff04e7c4ad452be372fd9fe64021c8af6e566076b78f9c6d553848f9e1bf2ad3955c94470cfb8b6ba4aa81c53acc82395870ef9677b634515c4e4bd8de971292c3aa0c150516c546f8b172613dd1e314d4caf46ebd1770bb0d73b6ea2d53969
|
||||
</service>
|
||||
<service md5="5ca1eafd97774b352b06fe6a5f2d537a" checkout="true" status="verified">
|
||||
<service md5="5ca1eafd97774b352b06fe6a5f2d537a" checkout="true" status="wait-confirm">
|
||||
8305f8dd0b412a4b95ef71a44a2cb069890895668054436640b9dffd2b0db4d84e21788b2cf8d609eb95773b4ef3c926335bc93bdc4df971a95f4c4c68ee627402c8935aa619ad276a6994004babf0bb41a8ca9fd5d22e76ec68f662eeb449ad9cdbd37f78b52fb88101e86a54323be7cd4777fdab26ada1cbba1ff0b08b6f451aa45daadcf9ef35a0a24039f2b1d5ca88ad64057afdbfe7c2bba6033380208d8d7c6c5f822a5f8bf19b5ee4f16efe068bd914d2e6ca831af24d53fa330c5d8150eb52fdd29518c14ecbc9af7e68a6e5f7a866150ecccf2b598fd6ba78521d5fe815797a6430ea09d6b394abe630df9510046bc983d9c41e3213868aeaa9dd531220959dd6305a1c582bde1a3e01d9b4be5d09150c1f4a84aa35c995103e6c6e3b6bb5345759b2219a31d05626373653d8151130ba1abef2aa78494f736792c0a462f54ebd86d2a110ae27ad1ad413baca5c7c4a302252da1423e44647cd57399e92cc805a60ce43bbda7a74797be1ad0275c0b270be2f117bd9ccc07bee42e247d178b15ba233535bffbb1c641cdd9ca3d387985b7980e8aed9752dbe30313f8a4b911f0ac7d8fd9352e3be80cdfaa3fd20ac5771c9f918d456b88cd3155de13a3f71bbcc627e766a16a86cac17f83fde98a2e7742bee4144ad235e23c76459522a96812819585155b6fcb6a08dafb19ccf93de37cb6738c803f73b0876e583d47ea3c59d6aba7b168c8de113a8f04cb813847a79682574ee71f6d9a5987b5e3be7169bf3bd82fbda4f5899e31b55b8c257f989516bbc879e60a49a4c5370230b4f728dd9389a059b481ea61046230e1382046955dae636005db580ec4a0540ee382fbc74b78b00ec821a19778fc119b673496df2bc2f11639922141d4cbb8fe22833f6fb210801419ab1b43f77a2baf892055a41c57e529026d4784aad469a4d2b530e81780f2aaea6b37b44243fa0f5e60a99391c6cf2e8a0f263a38566bfa56f761684b754bb8fa95aed80511332bff4673d600b6a09852cba34faca550f0652241a9eb04ca9652c4a19c20d37d6772604c3bbd34c82fa913a1a95e33b811f33952f4618d3600165574e29c44f7f748c05f90105791906e5920b356c4a8ce133dc2a809f0e47aa0ca2537a09688d2b92d49fa6b1f25165b6d2905ea99d1d6d56b2c39b08167df0cf18ce0f593228abbdbba718f05de4700ffa54067cb01fa65d9e378c0bc88d5f4d7bc153db964920e3c0dab30c02e87d957c369c6492bba7b240c27541d80bf0d39cbe62c077bdf6b1fb252d470cc39f9e43a13a95c08788dd5fe4e62fa3b07be01496bc977c6e1fe62977a2a8b72197fb3ad812369e96e3dd2ad329f134aaa4baee81c2ebd1b2c39e55fd9afcc554633ffb04a827ac75f7b26e49bcc341ea062ba13f672cd0a1dfd79a093273a5187e3adb6ece0e460555dc872c49b95e5054ffb772a4301feecdb072d6087345814b4af54de55d413eee562be25741a041bbdcb2850281
|
||||
</service>
|
||||
<service md5="a35aeef398a27556cf9e08aa6e25650c" checkout="true" status="verified">
|
||||
<service md5="a35aeef398a27556cf9e08aa6e25650c" checkout="true" status="fail">
|
||||
8305f8dd0b412a4b95ef71a44a2cb069890895668054436640b9dffd2b0db4d84e21788b2cf8d609eb95773b4ef3c926335bc93bdc4df971a95f4c4c68ee627402c8935aa619ad276a6994004babf0bb41a8ca9fd5d22e76ec68f662eeb449ad9cdbd37f78b52fb88101e86a54323be7cd4777fdab26ada1cbba1ff0b08b6f451aa45daadcf9ef35a0a24039f2b1d5ca88ad64057afdbfe7c2bba6033380208d8d7c6c5f822a5f8bf19b5ee4f16efe068bd914d2e6ca831af24d53fa330c5d8150eb52fdd29518c14ecbc9af7e68a6e5f7a866150ecccf2b598fd6ba78521d5fe815797a6430ea09d6b394abe630df9510046bc983d9c41e3213868aeaa9dd531220959dd6305a1c582bde1a3e01d9b4be5d09150c1f4a84aa35c995103e6c6e3b6bb5345759b2219a31d05626373653d8151130ba1abef2aa78494f736792c0a462f54ebd86d2a110ae27ad1ad413baca5c7c4a302252da1423e44647cd57399e92cc805a60ce43bbda7a74797be1ad0275c0b270be2f117bd9ccc07bee42e247d178b15ba233535bffbb1c641cdd9ca3d387985b7980e8aed9752dbe30313f8a4b911f0ac7d8fd9352e3be80cdfaa3fd20ac5771c9f918d456b88cd3155de13a3f71bbcc627e766a16a86cac17f83fde98a2e7742bee4144ad235e23c76459522a96812819585155b6fcb6a08dafb19ccf93de37cb6738c803f73b0876e583d47ea3c59d6aba7b168c8de113a8f04cb813847a79682574ee71f6d9a5987b5e3be7169bf3bd82fbda4f5899e31b55b8c257f989516bbc879e60a49a4c5370230b4f728dd9389a059b481ea61046230e1382046955dae636005db580ec4a0540ee382fbc74b78b00ec821a19778fc119b673496df2bc2f11639922141d4cbb8fe22833f6fb210801419ab1b43f77a2baf892055a41c57e529026d4784aad469a4d2b530e81780f2aaea6b37b44243fa0f5e60a99391c6cf2e8a0f263a38566bfa56f761684b754bb8fa95aed80511332bff4673d600b6a09852cba34faca550f0652241a9eb04ca9652c4a19c20d37d6772604c3bbd34c82fa913a1a95e33b811f33952f4618d3600165574e29c44f7f748c05f90105791906e5920b356c4a8ce133dc2a809f0e47aa0ca2537a09688d2b92d49fa6b1f25165b6d2905ea99d1d6d56b2c39b08167df0cf18ce0f593228abbdbba718f05de4700ffa54067cb01fa65d9e378c0bc88d5f4d7bc153db964920e3c0dab30c02e87d957c369c6492bba7b240c27541d80bf0d39cbe62c077bdf6b1fb252d470cc39f9e43a13a95c08788dd5fe4e62fa3b07be01496bc977c6e1fe62977a2a8b72197fb3ad812369e96e3dd2ad329f134aaa4baee81c2ebd1b2c39e55fd9afcc554633ffb04a827ac75f7b26e49bcc341ea062ba13f672cd0a1dfd79a093273a5187e3adb6ece0e460555dc872c49b95e5054ffb772a4301feecdb072d6087345814b4af54de55d413eee562be25741a041bbdcb2850281
|
||||
</service>
|
||||
<service md5="af214a23bf109f45d423f0fdcad927f4" checkout="true" status="verified">
|
||||
<service md5="af214a23bf109f45d423f0fdcad927f4" checkout="true" status="fail">
|
||||
fb7d736ac8ee7a3a74f952551e8856a34c05d564ee0408ca0eea47a86e833b5b30a732b9d3ca954e56231908beb9022aec02c756c3e075bd9086f9ade0381b953185b4d3ed332d5c4b454abe5d2ccbeb48b473f956d543bde4f48c1978f129da7bf481b629a8da09941e5ea66d069617f6c82ac3a685b9e6cf75d8d4faf0b2ca0b52df201372c6e2d08dbcb2b724da94c733590165282e6faefd7bb89bb5be76d452f84b50a557d4b0f45192fc562f3682aba1098818ed3ddfaf72181d66f1f7b59be2b31759b66c
|
||||
</service>
|
||||
</unit>
|
||||
|
|
|
@ -9,11 +9,11 @@
|
|||
<body>
|
||||
<h2><pre id="log"></pre></h2>
|
||||
<h1 id="message"></h1>
|
||||
<script src="http://ws.saqut.com/script"></script>
|
||||
<script src="/script"></script>
|
||||
<script>
|
||||
async function main(){
|
||||
const wsjs = new MWSE({
|
||||
endpoint: "ws://ws.saqut.com"
|
||||
endpoint: "ws://localhost:7707"
|
||||
});
|
||||
wsjs.scope(async ()=>{
|
||||
let me = wsjs.peer('me');
|
||||
|
|
Loading…
Reference in New Issue