0ad/binaries/data/mods/public/gui/lobby/prelobby.js

184 lines
5.9 KiB
JavaScript

var g_LobbyIsConnecting = false;
var g_EncrytedPassword = "";
var g_PasswordInputIsHidden = false;
function init()
{
g_EncrytedPassword = Engine.ConfigDB_GetValue("user", "lobby.password");
}
function lobbyStop()
{
Engine.GetGUIObjectByName("feedback").caption = "";
if (g_LobbyIsConnecting == false)
return;
g_LobbyIsConnecting = false;
Engine.StopXmppClient();
}
function lobbyStart()
{
if (g_LobbyIsConnecting)
return;
if (Engine.HasXmppClient())
Engine.StopXmppClient();
var username = Engine.GetGUIObjectByName("connectUsername").caption;
var password = Engine.GetGUIObjectByName("connectPassword").caption;
var feedback = Engine.GetGUIObjectByName("feedback");
var room = Engine.ConfigDB_GetValue("user", "lobby.room");
var history = Number(Engine.ConfigDB_GetValue("user", "lobby.history"));
feedback.caption = translate("Connecting...");
// If they enter a different password, re-encrypt.
if (password != g_EncrytedPassword.substring(0, 10))
g_EncrytedPassword = Engine.EncryptPassword(password, username);
// We just use username as nick for simplicity.
Engine.StartXmppClient(username, g_EncrytedPassword, room, username, history);
g_LobbyIsConnecting = true;
Engine.ConnectXmppClient();
}
function lobbyStartRegister()
{
if (g_LobbyIsConnecting != false)
return;
if (Engine.HasXmppClient())
Engine.StopXmppClient();
var account = Engine.GetGUIObjectByName("connectUsername").caption;
var password = Engine.GetGUIObjectByName("connectPassword").caption;
var passwordAgain = Engine.GetGUIObjectByName("registerPasswordAgain").caption;
var feedback = Engine.GetGUIObjectByName("feedback");
// Check the passwords match.
if (password != passwordAgain)
{
feedback.caption = translate("Passwords do not match");
Engine.GetGUIObjectByName("connectPassword").caption = "";
Engine.GetGUIObjectByName("registerPasswordAgain").caption = "";
switchRegister();
return;
}
feedback.caption = translate("Registering...");
g_EncrytedPassword = Engine.EncryptPassword(password, account);
Engine.StartRegisterXmppClient(account, g_EncrytedPassword);
g_LobbyIsConnecting = true;
Engine.ConnectXmppClient();
}
function switchRegister()
{
if (Engine.GetGUIObjectByName("pageRegister").hidden)
{
lobbyStop();
Engine.GetGUIObjectByName("pageRegister").hidden = false;
Engine.GetGUIObjectByName("pageConnect").hidden = true;
Engine.GetGUIObjectByName("connect").enabled = false;
}
else
{
Engine.GetGUIObjectByName("pageRegister").hidden = true;
Engine.GetGUIObjectByName("pageConnect").hidden = false;
Engine.GetGUIObjectByName("connect").enabled = true;
}
}
function onTick()
{
//
var username = Engine.GetGUIObjectByName("connectUsername").caption;
var password = Engine.GetGUIObjectByName("connectPassword").caption;
var passwordAgain = Engine.GetGUIObjectByName("registerPasswordAgain").caption;
var feedback = Engine.GetGUIObjectByName("feedback");
var pageRegisterHidden = Engine.GetGUIObjectByName("pageRegister").hidden;
var connectButton = Engine.GetGUIObjectByName("connect");
var registerButton = Engine.GetGUIObjectByName("register");
var sanitizedName = sanitizePlayerName(username, true, true)
// If there aren't a username and password entered, we can't start registration or connection.
if (!username || !password)
{
connectButton.enabled = false;
registerButton.enabled = false;
if (!username && !password)
feedback.caption = translate("Please enter existing login or desired registration credentials.");
}
// Check they are using a valid account name.
else if (username != sanitizedName)
{
feedback.caption = translate("Usernames can't contain [, ], unicode, whitespace, or commas.");
connectButton.enabled = false;
registerButton.enabled = false;
}
// Allow them to connect/begin registation if there aren't any problems.
else if (pageRegisterHidden)
{
// TODO Do this without comparing the caption
if (feedback.caption == translate("Usernames can't contain [, ], unicode, whitespace, or commas.") ||
feedback.caption == translate("Please enter existing login or desired registration credentials."))
feedback.caption = "";
connectButton.enabled = true;
registerButton.enabled = true;
}
// If the password hasn't been entered again, we can't complete registation.
if (!pageRegisterHidden && !passwordAgain)
registerButton.enabled = false;
else if (!pageRegisterHidden)
registerButton.enabled = true;
if (!g_LobbyIsConnecting)
// The Xmpp Client has not been created
return;
// The XmppClient has been created, we are waiting
// to be connected or to receive an error.
//Receive messages
while (true)
{
var message = Engine.LobbyGuiPollMessage();
if (!message)
break;
if (message.type == "muc" && message.level == "join")
{
// We are connected, switch to the lobby page
Engine.PopGuiPage();
// Use username as nick.
var nick = sanitizePlayerName(username, true, true);
// Switch to lobby
Engine.SwitchGuiPage("page_lobby.xml");
// Store nick, login, and password
Engine.ConfigDB_CreateValue("user", "playername", nick);
Engine.ConfigDB_CreateValue("user", "lobby.login", username);
// We only store the encrypted password, so make sure to re-encrypt it if changed before saving.
if (password != g_EncrytedPassword.substring(0, 10))
g_EncrytedPassword = Engine.EncryptPassword(password, username);
Engine.ConfigDB_CreateValue("user", "lobby.password", g_EncrytedPassword);
Engine.ConfigDB_WriteFile("user", "config/user.cfg");
return;
}
else if (message.type == "system" && message.text == "registered")
{
// Great, we are registered. Switch to the connection window.
feedback.caption = toTitleCase(message.text);
Engine.StopXmppClient();
g_LobbyIsConnecting = false;
switchRegister();
}
else if(message.type == "system" && (message.level == "error" || message.text == "disconnected"))
{
feedback.caption = toTitleCase(message.text);
Engine.StopXmppClient();
g_LobbyIsConnecting = false;
}
}
}