sqwoob
This commit is contained in:
parent
301243bfcb
commit
7258056e1c
4 changed files with 133 additions and 26 deletions
|
@ -240,12 +240,12 @@ void Pool<T,U>::Stack::StackThread() {
|
||||||
|
|
||||||
while(this->is_running) {
|
while(this->is_running) {
|
||||||
for(auto client = this->clients.begin();
|
for(auto client = this->clients.begin();
|
||||||
client != this->clients.end();
|
client != this->clients.end() && this->clients.size() > 0;
|
||||||
++client)
|
++client)
|
||||||
{
|
{
|
||||||
if(!this->is_running)
|
if(!this->is_running)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
this->clients_mtx.lock();
|
this->clients_mtx.lock();
|
||||||
if(!this->pool->ProcessClient
|
if(!this->pool->ProcessClient
|
||||||
(*client, &this->pool->context, &this->queries))
|
(*client, &this->pool->context, &this->queries))
|
||||||
|
|
|
@ -12,6 +12,9 @@
|
||||||
</div>
|
</div>
|
||||||
<div id="login" class="hidden section">
|
<div id="login" class="hidden section">
|
||||||
<h1>Log In</h1>
|
<h1>Log In</h1>
|
||||||
|
<div class="error">
|
||||||
|
test error test test error test test error test test error test test error test test error test test error test test error test test error test
|
||||||
|
</div>
|
||||||
<label>
|
<label>
|
||||||
Username: <br/>
|
Username: <br/>
|
||||||
<input type="text" id="login-user" />
|
<input type="text" id="login-user" />
|
||||||
|
@ -21,17 +24,18 @@
|
||||||
<input type="password" id="login-pwd" />
|
<input type="password" id="login-pwd" />
|
||||||
</label>
|
</label>
|
||||||
<input type="button" value="Log In" />
|
<input type="button" value="Log In" />
|
||||||
<input type="button" value="Register" />
|
<input type="button" value="Register" onclick="show_section('register');" />
|
||||||
</div>
|
</div>
|
||||||
<div id="register" class="hidden section">
|
<div id="register" class="hidden section">
|
||||||
<h1>Register</h1>
|
<h1>Register</h1>
|
||||||
|
<div class="hidden error"></div>
|
||||||
<label>
|
<label>
|
||||||
Username: <br/>
|
Username: <br/>
|
||||||
<input type="text" id="reg-user" />
|
<input type="text" id="reg-user" />
|
||||||
</label>
|
</label>
|
||||||
<label>
|
<label>
|
||||||
Email: <br/>
|
Email: <br/>
|
||||||
<input type="password" id="reg-email" />
|
<input type="test" id="reg-email" />
|
||||||
</label>
|
</label>
|
||||||
<label>
|
<label>
|
||||||
Password: <br/>
|
Password: <br/>
|
||||||
|
@ -41,6 +45,8 @@
|
||||||
Confirm Password: <br/>
|
Confirm Password: <br/>
|
||||||
<input type="password" id="reg-conf-pwd" />
|
<input type="password" id="reg-conf-pwd" />
|
||||||
</label>
|
</label>
|
||||||
|
<input type="button" value="Register" />
|
||||||
|
<input type="button" value="Cancel" onclick="show_section('login')" />
|
||||||
</div>
|
</div>
|
||||||
<div id="client" class="hidden section">
|
<div id="client" class="hidden section">
|
||||||
<iframe id="client_iframe"></iframe>
|
<iframe id="client_iframe"></iframe>
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
let unloading = false;
|
||||||
let sections = {};
|
let sections = {};
|
||||||
let ws;
|
let ws;
|
||||||
|
|
||||||
|
@ -15,27 +16,107 @@ const kMasterToClient = {
|
||||||
"ServerList": 2
|
"ServerList": 2
|
||||||
};
|
};
|
||||||
|
|
||||||
function show_section(name) {
|
let receive_callbacks = {};
|
||||||
for(let i in sections) {
|
|
||||||
if(!sections.hasOwnProperty(i))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if(i === name)
|
function attempt_login() {
|
||||||
|
let section = document.getElementById("login");
|
||||||
|
let error = section.getElementsByClassName("error");
|
||||||
|
let buttons = filter(
|
||||||
|
to_array(section.getElementsByTagName("input")),
|
||||||
|
x => (x.type === "button" || x.type === "submit")
|
||||||
|
);
|
||||||
|
|
||||||
|
for(let i in buttons)
|
||||||
|
buttons[i].disabled = true;
|
||||||
|
|
||||||
|
receive_callbacks[kMasterToClient.LoginResponse] = (pck) => {
|
||||||
|
|
||||||
|
|
||||||
|
for(let i in buttons)
|
||||||
|
buttons[i].disabled = false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function show_section(id) {
|
||||||
|
clear_inputs();
|
||||||
|
clear_errors();
|
||||||
|
|
||||||
|
for(let i in sections) {
|
||||||
|
if(i === id)
|
||||||
sections[i].classList.remove("hidden");
|
sections[i].classList.remove("hidden");
|
||||||
else
|
else
|
||||||
sections[i].classList.add("hidden");
|
sections[i].classList.add("hidden");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function clear_inputs() {
|
||||||
|
let types = ["text", "password"];
|
||||||
|
let inputs = document.getElementsByTagName("input");
|
||||||
|
|
||||||
|
for_each(inputs, x => {
|
||||||
|
if(types.indexOf(x.type) !== -1)
|
||||||
|
x.value = "";
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function clear_errors() {
|
||||||
|
let errors = document.getElementsByClassName("error");
|
||||||
|
for_each(errors, x => {
|
||||||
|
x.classList.add("hidden");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function pack(id, regions) {
|
function pack(id, regions) {
|
||||||
if(!Array.isArray(regions))
|
if(!Array.isArray(regions))
|
||||||
throw Error("PACK MUST BE GIVEN ARRAY OF STRINGS AND UINT8ARRAYS");
|
throw Error("REGIONS ARGUMENT MALFORMED");
|
||||||
|
if(regions.length > 255)
|
||||||
|
throw Error("REGIONS ARGUMENT MALFORMED");
|
||||||
|
|
||||||
let pck = null;
|
let pck;
|
||||||
let size = 8;
|
let size = 8;
|
||||||
|
let head_size = size;
|
||||||
for(let i in regions) {
|
for(let i in regions) {
|
||||||
if(typeof regions[i] === "string")
|
if(typeof regions[i] === "string")
|
||||||
|
regions[i] = regions[i].toByteArray();
|
||||||
|
else if(!(regions[i] instanceof Uint8Array))
|
||||||
|
throw Error("REGIONS ARGUMENT MALFORMED");
|
||||||
|
let length = regions[i].length;
|
||||||
|
|
||||||
|
size += length;
|
||||||
|
if(length < 254)
|
||||||
|
++head_size;
|
||||||
|
else if(length < 65536)
|
||||||
|
head_size += 3;
|
||||||
|
else
|
||||||
|
head_size += 5;
|
||||||
|
}
|
||||||
|
size += head_size;
|
||||||
|
|
||||||
|
pck = new Uint8Array(size);
|
||||||
|
pck.set(MAHOU, 0);
|
||||||
|
pck.set(size.packUint32(), 2);
|
||||||
|
pck[6] = regions.length;
|
||||||
|
pck[7] = Math.min(id, 255);
|
||||||
|
|
||||||
|
let head_ptr = 8;
|
||||||
|
let body_ptr = head_size;
|
||||||
|
for(let i in regions) {
|
||||||
|
let length = regions[i].length;
|
||||||
|
if(length < 254) {
|
||||||
|
pck[head_ptr] = length;
|
||||||
|
head_ptr++;
|
||||||
|
} else if(length < 65536) {
|
||||||
|
pck[head_ptr] = 254;
|
||||||
|
pck.set(length.packUint16(), head_ptr + 1);
|
||||||
|
head_ptr += 3;
|
||||||
|
} else {
|
||||||
|
pck[head_ptr] = 255;
|
||||||
|
pck.set(length.packUint32(), head_ptr + 1);
|
||||||
|
head_ptr += 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
pck.set(regions[i], body_ptr);
|
||||||
|
body_ptr += length;
|
||||||
}
|
}
|
||||||
|
|
||||||
return pck;
|
return pck;
|
||||||
|
@ -90,15 +171,8 @@ function parse(data) {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
switch(packet.id) {
|
switch(packet.id) {
|
||||||
case kMasterToClient.LoginResponse:
|
default:
|
||||||
|
receive_callbacks[packet.id](packet);
|
||||||
break;
|
|
||||||
case kMasterToClient.RegisterResponse:
|
|
||||||
|
|
||||||
break;
|
|
||||||
case kMasterToClient.ServerList:
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,7 +181,7 @@ function conn_open() {
|
||||||
ws.binaryType = "arraybuffer";
|
ws.binaryType = "arraybuffer";
|
||||||
|
|
||||||
ws.onopen = function (e) {
|
ws.onopen = function (e) {
|
||||||
|
show_section("login");
|
||||||
};
|
};
|
||||||
|
|
||||||
ws.onmessage = function(e) {
|
ws.onmessage = function(e) {
|
||||||
|
@ -115,7 +189,8 @@ function conn_open() {
|
||||||
};
|
};
|
||||||
|
|
||||||
ws.onclose = function (e) {
|
ws.onclose = function (e) {
|
||||||
conn_retry();
|
if(!unloading)
|
||||||
|
conn_retry();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,19 +202,23 @@ function conn_retry() {
|
||||||
|
|
||||||
let loading = document.getElementById("loading");
|
let loading = document.getElementById("loading");
|
||||||
loading.innerHTML = "Connection lost.<br/>Retrying...";
|
loading.innerHTML = "Connection lost.<br/>Retrying...";
|
||||||
loading.classList.remove("hidden");
|
show_section("loading");
|
||||||
|
|
||||||
conn_open();
|
conn_open();
|
||||||
}
|
}
|
||||||
|
|
||||||
window.onload = function() {
|
window.onload = function() {
|
||||||
let raw_sections = document.body.getElementsByClassName("section");
|
for_each(document.body.getElementsByClassName("section"), x => {
|
||||||
for(let i in raw_sections)
|
sections[x.id] = x;
|
||||||
sections[raw_sections[i].id] = raw_sections[i];
|
});
|
||||||
|
|
||||||
conn_open();
|
conn_open();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
window.onbeforeunload = function() {
|
||||||
|
unloading = true;
|
||||||
|
};
|
||||||
|
|
||||||
/****************************/
|
/****************************/
|
||||||
/*** NECESSARY BULLSHIT ***/
|
/*** NECESSARY BULLSHIT ***/
|
||||||
/****************************/
|
/****************************/
|
||||||
|
@ -486,3 +565,17 @@ let utf8 = {
|
||||||
utf8.encode = utf8encode;
|
utf8.encode = utf8encode;
|
||||||
utf8.decode = utf8encode;
|
utf8.decode = utf8encode;
|
||||||
})();
|
})();
|
||||||
|
|
||||||
|
/*** I REALLY CAN'T FUCKING BELIEVE I HAVE TO ADD THESE ***/
|
||||||
|
|
||||||
|
function for_each(x, f) {
|
||||||
|
Array.prototype.forEach.call(x, f);
|
||||||
|
}
|
||||||
|
|
||||||
|
function filter(x, f) {
|
||||||
|
return Array.prototype.filter.call(x, f);
|
||||||
|
}
|
||||||
|
|
||||||
|
function to_array(x) {
|
||||||
|
return Array.prototype.slice.call(x);
|
||||||
|
}
|
|
@ -19,4 +19,12 @@ body {
|
||||||
|
|
||||||
#login label, #register label {
|
#login label, #register label {
|
||||||
display: block;
|
display: block;
|
||||||
|
margin: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section > .error {
|
||||||
|
margin: 15px auto;
|
||||||
|
color: #d00;
|
||||||
|
font-size: 1.1em;
|
||||||
|
max-width: 250px;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue