session cookies
This commit is contained in:
parent
7b4789dd2a
commit
34c4e82330
81
main.js
81
main.js
@ -68,6 +68,39 @@ logged_in = false;
|
|||||||
// connection stuff:
|
// connection stuff:
|
||||||
|
|
||||||
var connection = null;
|
var connection = null;
|
||||||
|
var session_id = null;
|
||||||
|
|
||||||
|
|
||||||
|
// cookies:
|
||||||
|
function get_cookie(cname) {
|
||||||
|
var name = cname + "=";
|
||||||
|
var ca = document.cookie.split(';');
|
||||||
|
for(var i = 0; i < ca.length; i++) {
|
||||||
|
var c = ca[i];
|
||||||
|
while (c.charAt(0) == ' ') {
|
||||||
|
c = c.substring(1);
|
||||||
|
}
|
||||||
|
if (c.indexOf(name) == 0) {
|
||||||
|
return c.substring(name.length, c.length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
function set_cookie(cname, cvalue, exdays) {
|
||||||
|
var d = new Date();
|
||||||
|
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
|
||||||
|
var expires = "expires="+d.toUTCString();
|
||||||
|
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_cookie(cname) {
|
||||||
|
var tmp = get_cookie(cname);
|
||||||
|
if (tmp != "") {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -150,16 +183,8 @@ login_callback = function()
|
|||||||
end_local_game();
|
end_local_game();
|
||||||
l_username.innerHTML = "logged in as: " + connection.player.get_name();
|
l_username.innerHTML = "logged in as: " + connection.player.get_name();
|
||||||
|
|
||||||
}
|
set_cookie("sessionid", connection.session_id, 30);
|
||||||
|
|
||||||
login = function(){
|
|
||||||
|
|
||||||
if (connection != null)
|
|
||||||
{
|
|
||||||
connection.close();
|
|
||||||
}
|
|
||||||
connection = new WebsocketConnection(server_url, server_port, grid, l_status, match_slot_container, match_control, login_callback);
|
|
||||||
connection.connect(i_register_username.value, i_register_pw.value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
logout = function()
|
logout = function()
|
||||||
@ -169,6 +194,12 @@ logout = function()
|
|||||||
{
|
{
|
||||||
|
|
||||||
connection.close();
|
connection.close();
|
||||||
|
if (check_cookie("sessionid"))
|
||||||
|
{
|
||||||
|
// delete session:
|
||||||
|
session_id = get_cookie("sessionid");
|
||||||
|
set_cookie("sessionid", session_id, -100);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -179,6 +210,36 @@ logout = function()
|
|||||||
end_local_game();
|
end_local_game();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reconnect = function()
|
||||||
|
{
|
||||||
|
if (check_cookie("sessionid"))
|
||||||
|
{
|
||||||
|
session_id = get_cookie("sessionid");
|
||||||
|
if (connection != null)
|
||||||
|
{
|
||||||
|
connection.close();
|
||||||
|
}
|
||||||
|
connection = new WebsocketConnection(server_url, server_port, grid, l_status, match_slot_container, match_control, login_callback, on_connection_error);
|
||||||
|
connection.reconnect(session_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
on_connection_error = function()
|
||||||
|
{
|
||||||
|
connection = null;
|
||||||
|
logout();
|
||||||
|
}
|
||||||
|
|
||||||
|
login = function(){
|
||||||
|
|
||||||
|
if (connection != null)
|
||||||
|
{
|
||||||
|
connection.close();
|
||||||
|
}
|
||||||
|
connection = new WebsocketConnection(server_url, server_port, grid, l_status, match_slot_container, match_control, login_callback, on_connection_error);
|
||||||
|
connection.connect(i_register_username.value, i_register_pw.value);
|
||||||
|
}
|
||||||
|
|
||||||
search_match = function()
|
search_match = function()
|
||||||
{
|
{
|
||||||
if (connection != null)
|
if (connection != null)
|
||||||
@ -215,6 +276,8 @@ b_logout.addEventListener("click", logout);
|
|||||||
b_match_search.addEventListener("click", search_match);
|
b_match_search.addEventListener("click", search_match);
|
||||||
b_match_invite.addEventListener("click", invite_player);
|
b_match_invite.addEventListener("click", invite_player);
|
||||||
|
|
||||||
|
reconnect();
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
var websocket_connection = new WebsocketConnection('127.0.0.1', 5556);
|
var websocket_connection = new WebsocketConnection('127.0.0.1', 5556);
|
||||||
|
@ -1,2 +1,6 @@
|
|||||||
var server_url = "the-cake-is-a-lie.net";
|
var server_protocol = "ws://"
|
||||||
var server_port = "5556";
|
var server_url = "127.0.0.1";
|
||||||
|
var server_port = "5556";
|
||||||
|
|
||||||
|
var home = "https://the-cake-is-a-lie.net/website/ultimate_tictactoe/";
|
||||||
|
var rel_home = "/website/ultimate_tictactoe";
|
24
sw.js
24
sw.js
@ -32,4 +32,28 @@ self.addEventListener('install', function(e) {
|
|||||||
return response || fetch(event.request);
|
return response || fetch(event.request);
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
self.addEventListener('notificationclick', function(event) {
|
||||||
|
event.waitUntil(async function() {
|
||||||
|
const allClients = await clients.matchAll({
|
||||||
|
includeUncontrolled: true
|
||||||
|
});
|
||||||
|
|
||||||
|
var instance = None;
|
||||||
|
|
||||||
|
|
||||||
|
// Let's see if we already have a window open:
|
||||||
|
for (const client of allClients) {
|
||||||
|
client.focus();
|
||||||
|
instance = client;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we didn't find an existing window,
|
||||||
|
// open a new one:
|
||||||
|
if (!instance) {
|
||||||
|
instance = await clients.openWindow(rel_home);
|
||||||
|
}
|
||||||
|
}());
|
||||||
});
|
});
|
@ -1,6 +1,6 @@
|
|||||||
class WebsocketConnection
|
class WebsocketConnection
|
||||||
{
|
{
|
||||||
constructor(ip, port, grid, status_label, matches_container, control_container, login_callback_func)
|
constructor(ip, port, grid, status_label, matches_container, control_container, login_callback_func, error_callback_func)
|
||||||
{
|
{
|
||||||
this.ip = ip;
|
this.ip = ip;
|
||||||
this.port = port;
|
this.port = port;
|
||||||
@ -23,8 +23,9 @@ class WebsocketConnection
|
|||||||
this.login_callback_func = login_callback_func;
|
this.login_callback_func = login_callback_func;
|
||||||
|
|
||||||
this.openmatches = {};
|
this.openmatches = {};
|
||||||
|
this.error_callback_func = error_callback_func;
|
||||||
|
|
||||||
this.
|
this.closed_by_user = false;
|
||||||
|
|
||||||
matches_container.hide();
|
matches_container.hide();
|
||||||
|
|
||||||
@ -57,10 +58,22 @@ class WebsocketConnection
|
|||||||
this.login(username, pw)
|
this.login(username, pw)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
on_reopen(session_id)
|
||||||
|
{
|
||||||
|
this.connected = true;
|
||||||
|
this.relogin(session_id);
|
||||||
|
}
|
||||||
|
|
||||||
on_close()
|
on_close()
|
||||||
{
|
{
|
||||||
this.registered = false;
|
this.registered = false;
|
||||||
this.connected = false;
|
this.connected = false;
|
||||||
|
if (!this.closed_by_user)
|
||||||
|
{
|
||||||
|
this.status_label.innerHTML = "connection to server closed";
|
||||||
|
this.error_callback_func();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
on_error()
|
on_error()
|
||||||
@ -68,6 +81,11 @@ class WebsocketConnection
|
|||||||
console.log("error in websocket connection");
|
console.log("error in websocket connection");
|
||||||
this.registered = false;
|
this.registered = false;
|
||||||
this.connected = false;
|
this.connected = false;
|
||||||
|
if (!this.closed_by_user)
|
||||||
|
{
|
||||||
|
this.status_label.innerHTML = "connection to server lost";
|
||||||
|
this.error_callback_func();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -90,9 +108,8 @@ class WebsocketConnection
|
|||||||
this.on_register_response(msg.data);
|
this.on_register_response(msg.data);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "temp_session_response":
|
case "reconnect_response":
|
||||||
console.log(json_msg)
|
this.on_reconnect_response(msg.data);
|
||||||
this.on_temp_session_response(msg.data);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "match_update":
|
case "match_update":
|
||||||
@ -118,7 +135,13 @@ class WebsocketConnection
|
|||||||
this.openmatches[this.active_match].on_user_close();
|
this.openmatches[this.active_match].on_user_close();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.current_end_button != null)
|
||||||
|
{
|
||||||
|
this.control_container.container.deleteChild(this.current_end_button);
|
||||||
|
this.current_end_button = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -149,7 +172,6 @@ class WebsocketConnection
|
|||||||
if (id in this.openmatches)
|
if (id in this.openmatches)
|
||||||
{
|
{
|
||||||
this.openmatches[id].update_match_state(match_state)
|
this.openmatches[id].update_match_state(match_state)
|
||||||
console.log("update!!!");
|
|
||||||
if (this.active_match == id)
|
if (this.active_match == id)
|
||||||
{
|
{
|
||||||
this.openmatches[id].open_match();
|
this.openmatches[id].open_match();
|
||||||
@ -179,9 +201,17 @@ class WebsocketConnection
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
on_temp_session_response(data)
|
on_reconnect_response(data)
|
||||||
{
|
{
|
||||||
console.log("not supported yet");
|
if (data.success)
|
||||||
|
{
|
||||||
|
this.registered = true;
|
||||||
|
this.session_id = data.id;
|
||||||
|
this.player.set_name(data.user);
|
||||||
|
this.login_callback_func();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.status_label.innerHTML = data.msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
on_match_request_response(data)
|
on_match_request_response(data)
|
||||||
@ -199,13 +229,22 @@ class WebsocketConnection
|
|||||||
|
|
||||||
connect(username, pw)
|
connect(username, pw)
|
||||||
{
|
{
|
||||||
this.socket = new WebSocket("wss://" + this.ip + ":" + this.port);
|
this.socket = new WebSocket(server_protocol + this.ip + ":" + this.port);
|
||||||
this.socket.onmessage = (e => this.on_message(e));
|
this.socket.onmessage = (e => this.on_message(e));
|
||||||
this.socket.onopen = (() => this.on_open(username, pw));
|
this.socket.onopen = (() => this.on_open(username, pw));
|
||||||
this.socket.onerror = (() => this.on_error());
|
this.socket.onerror = (() => this.on_error());
|
||||||
this.socket.onclose = (() => this.on_close());
|
this.socket.onclose = (() => this.on_close());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reconnect(session_id)
|
||||||
|
{
|
||||||
|
this.socket = new WebSocket(server_protocol + this.ip + ":" + this.port);
|
||||||
|
this.socket.onmessage = (e => this.on_message(e));
|
||||||
|
this.socket.onopen = (() => this.on_reopen(session_id));
|
||||||
|
this.socket.onerror = (() => this.on_error());
|
||||||
|
this.socket.onclose = (() => this.on_close());
|
||||||
|
}
|
||||||
|
|
||||||
send_move(sub_x, sub_y, x, y, match_id)
|
send_move(sub_x, sub_y, x, y, match_id)
|
||||||
{
|
{
|
||||||
var msg_object = {
|
var msg_object = {
|
||||||
@ -261,6 +300,19 @@ class WebsocketConnection
|
|||||||
this.socket.send(JSON.stringify(msg_object));
|
this.socket.send(JSON.stringify(msg_object));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
relogin(session_id)
|
||||||
|
{
|
||||||
|
// register for game queue
|
||||||
|
var msg_object = {
|
||||||
|
type: "reconnect",
|
||||||
|
data: {
|
||||||
|
id: session_id
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
this.socket.send(JSON.stringify(msg_object));
|
||||||
|
}
|
||||||
|
|
||||||
send_disconnect()
|
send_disconnect()
|
||||||
{
|
{
|
||||||
if (!this.is_connected)
|
if (!this.is_connected)
|
||||||
@ -283,6 +335,8 @@ class WebsocketConnection
|
|||||||
{
|
{
|
||||||
this.openmatches[key].remove_match();
|
this.openmatches[key].remove_match();
|
||||||
}
|
}
|
||||||
|
this.status_label.innerHTML = "logged out";
|
||||||
|
this.closed_by_user = true;
|
||||||
this.socket.close();
|
this.socket.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user