IPPressure
This commit is contained in:
parent
cc2bcab52e
commit
d50f9250e8
|
@ -17,6 +17,10 @@ function Client()
|
||||||
this.rooms = new Set();
|
this.rooms = new Set();
|
||||||
this.pairs = new Set();
|
this.pairs = new Set();
|
||||||
this.requiredPair = false;
|
this.requiredPair = false;
|
||||||
|
|
||||||
|
this.APNumber = 0;
|
||||||
|
this.APShortCode = 0;
|
||||||
|
this.APIPAddress = 0;
|
||||||
};
|
};
|
||||||
/**
|
/**
|
||||||
* @type {Map<string, Client>}
|
* @type {Map<string, Client>}
|
||||||
|
|
|
@ -0,0 +1,301 @@
|
||||||
|
const { Client } = require("../Client");
|
||||||
|
let {addService, addListener} = require("../WebSocket.js");
|
||||||
|
let {
|
||||||
|
randomBytes
|
||||||
|
} = require("node:crypto");
|
||||||
|
|
||||||
|
class APNumber{
|
||||||
|
/**
|
||||||
|
* @type {Map<Number, Client>}
|
||||||
|
*/
|
||||||
|
static busyNumbers = new Map();
|
||||||
|
/**
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
static lock()
|
||||||
|
{
|
||||||
|
let c = 24;
|
||||||
|
while(true){
|
||||||
|
if(!APNumber.busyNumbers.has(c))
|
||||||
|
{
|
||||||
|
APNumber.busyNumbers.set(c,true);
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {number} num
|
||||||
|
*/
|
||||||
|
static release(num)
|
||||||
|
{
|
||||||
|
APNumber.busyNumbers.delete(num);
|
||||||
|
}
|
||||||
|
static whois(num){
|
||||||
|
return APNumber.busyNumbers.get(num)?.id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class APShortCode{
|
||||||
|
/**
|
||||||
|
* @type {Map<string, Client>}
|
||||||
|
*/
|
||||||
|
static busyCodes = new Map();
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {Client} client
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
static lock(client){
|
||||||
|
let firstLetter = new ShortCodeLetter();
|
||||||
|
let secondLetter = new ShortCodeLetter();
|
||||||
|
let thirdLetter = new ShortCodeLetter();
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
let code = [firstLetter.code,secondLetter.code,thirdLetter.code].join('');
|
||||||
|
if(APShortCode.busyCodes.has(code) == false)
|
||||||
|
{
|
||||||
|
APShortCode.busyCodes.set(code, client);
|
||||||
|
return code.join('');
|
||||||
|
}
|
||||||
|
if(!thirdLetter.end())
|
||||||
|
{
|
||||||
|
thirdLetter.next()
|
||||||
|
}else{
|
||||||
|
thirdLetter.reset()
|
||||||
|
if(!secondLetter.end())
|
||||||
|
{
|
||||||
|
secondLetter.next();
|
||||||
|
}else{
|
||||||
|
secondLetter.reset();
|
||||||
|
if(!firstLetter.end())
|
||||||
|
{
|
||||||
|
firstLetter.next();
|
||||||
|
}else{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static release(code){
|
||||||
|
APShortCode.busyCodes.delete(code);
|
||||||
|
}
|
||||||
|
static whois(num){
|
||||||
|
return APShortCode.busyCodes.get(num)?.id;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
class ShortCodeLetter{
|
||||||
|
chars = 'ABCDEFGHIKLMNOPRSTVXYZ'.split('');
|
||||||
|
now = 0;
|
||||||
|
code = 'A';
|
||||||
|
next(){
|
||||||
|
this.now++
|
||||||
|
this.code = this.chars.at(this.now);
|
||||||
|
return this.code;
|
||||||
|
}
|
||||||
|
reset(){
|
||||||
|
this.now = 0;
|
||||||
|
this.code = 'A';
|
||||||
|
}
|
||||||
|
end(){
|
||||||
|
return !this.chars.at(this.now + 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class APIPAddress{
|
||||||
|
/**
|
||||||
|
* @type {Map<[number,number,number,number], Client>}
|
||||||
|
*/
|
||||||
|
static busyIP = new Map();
|
||||||
|
/**
|
||||||
|
* @param {Client} client
|
||||||
|
*/
|
||||||
|
static lock(client){
|
||||||
|
let A = 10;
|
||||||
|
let B = 0;
|
||||||
|
let C = 0;
|
||||||
|
let D = 1;
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
let code = [A,B,C,D].join('.');
|
||||||
|
if(APIPAddress.busyIP.has(code) == false)
|
||||||
|
{
|
||||||
|
APIPAddress.busyIP.set(code, client);
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
if(D != 255)
|
||||||
|
{
|
||||||
|
D++;
|
||||||
|
continue;
|
||||||
|
}else{
|
||||||
|
D = 0;
|
||||||
|
}
|
||||||
|
if(C != 255)
|
||||||
|
{
|
||||||
|
C++;
|
||||||
|
continue;
|
||||||
|
}else{
|
||||||
|
C = 0;
|
||||||
|
}
|
||||||
|
if(B != 255)
|
||||||
|
{
|
||||||
|
B++;
|
||||||
|
continue;
|
||||||
|
}else{
|
||||||
|
B = 0;
|
||||||
|
}
|
||||||
|
if(A != 255)
|
||||||
|
{
|
||||||
|
A++;
|
||||||
|
continue;
|
||||||
|
}else{
|
||||||
|
A = 0;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static release(code){
|
||||||
|
APIPAddress.busyCodes.delete(code);
|
||||||
|
}
|
||||||
|
static whois(num){
|
||||||
|
return APIPAddress.busyIP.get(num)?.id;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.APNumber = APNumber;
|
||||||
|
exports.APShortCode = APShortCode;
|
||||||
|
exports.APIPAddress = APIPAddress;
|
||||||
|
|
||||||
|
|
||||||
|
addService(({
|
||||||
|
client,
|
||||||
|
message,
|
||||||
|
end,
|
||||||
|
next
|
||||||
|
})=>{
|
||||||
|
let {type,whois} = message;
|
||||||
|
switch(type)
|
||||||
|
{
|
||||||
|
case "alloc/APIPAddress":{
|
||||||
|
let value = APIPAddress.lock(client);
|
||||||
|
end({
|
||||||
|
status : "sucess",
|
||||||
|
ip : value
|
||||||
|
})
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "alloc/APNumber":{
|
||||||
|
let value = APNumber.lock(client);
|
||||||
|
end({
|
||||||
|
status : "sucess",
|
||||||
|
number : value
|
||||||
|
})
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "alloc/APShortCode":{
|
||||||
|
let value = APShortCode.lock(client);
|
||||||
|
end({
|
||||||
|
status : "sucess",
|
||||||
|
code : value
|
||||||
|
})
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "realloc/APIPAddress":{
|
||||||
|
APIPAddress.release(client.APIPAddress);
|
||||||
|
let value = APIPAddress.lock(client);
|
||||||
|
end({
|
||||||
|
status : "sucess",
|
||||||
|
ip : value
|
||||||
|
})
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "realloc/APNumber":{
|
||||||
|
APNumber.release(client.APNumber);
|
||||||
|
let value = APNumber.lock(client);
|
||||||
|
end({
|
||||||
|
status : "sucess",
|
||||||
|
number : value
|
||||||
|
})
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "realloc/APShortCode":{
|
||||||
|
APShortCode.release(client.APShortCode);
|
||||||
|
let value = APShortCode.lock(client);
|
||||||
|
end({
|
||||||
|
status : "sucess",
|
||||||
|
code : value
|
||||||
|
})
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "release/APIPAddress":{
|
||||||
|
APIPAddress.release(client.APIPAddress);
|
||||||
|
end({
|
||||||
|
status : "sucess"
|
||||||
|
})
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "release/APNumber":{
|
||||||
|
APNumber.release(client.APNumber);
|
||||||
|
end({
|
||||||
|
status : "sucess"
|
||||||
|
})
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "release/APShortCode":{
|
||||||
|
APShortCode.release(client.APShortCode);
|
||||||
|
end({
|
||||||
|
status : "sucess"
|
||||||
|
})
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "whois/APIPAddress":{
|
||||||
|
let socketId = APIPAddress.whois(whois);
|
||||||
|
if(socketId)
|
||||||
|
{
|
||||||
|
end({
|
||||||
|
status : "sucess",
|
||||||
|
socket : socketId
|
||||||
|
})
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "whois/APNumber":{
|
||||||
|
let socketId = APNumber.whois(whois);
|
||||||
|
if(socketId)
|
||||||
|
{
|
||||||
|
end({
|
||||||
|
status : "sucess",
|
||||||
|
socket : socketId
|
||||||
|
})
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "whois/APShortCode":{
|
||||||
|
let socketId = APShortCode.whois(whois);
|
||||||
|
if(socketId)
|
||||||
|
{
|
||||||
|
end({
|
||||||
|
status : "sucess",
|
||||||
|
socket : socketId
|
||||||
|
})
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
addListener('disconnect',(global, client)=>{
|
||||||
|
if(client.APIPAddress != 0)
|
||||||
|
{
|
||||||
|
APIPAddress.release(client.APIPAddress);
|
||||||
|
}
|
||||||
|
if(client.APNumber != 0)
|
||||||
|
{
|
||||||
|
APNumber.release(client.APNumber);
|
||||||
|
}
|
||||||
|
if(client.APShortCode != 0)
|
||||||
|
{
|
||||||
|
APShortCode.release(client.APShortCode);
|
||||||
|
}
|
||||||
|
});
|
|
@ -84,4 +84,4 @@ export default class Peer extends EventTarget
|
||||||
this.mwse.peers.delete(this.socketId as string);
|
this.mwse.peers.delete(this.socketId as string);
|
||||||
this.mwse.pairs.delete(this.socketId as string);
|
this.mwse.pairs.delete(this.socketId as string);
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue