var processing = {
overlay: null, spinner: null, description: null,
processingImage: null, errorImage: null,
initOverlay: function() {
processing.overlay = loadFXML("dialog/overlay/processing/processing.fxml");
// Lookup nodes
processing.spinner = processing.overlay.lookup("#spinner");
processing.description = processing.overlay.lookup("#description");
// Set images
processing.processingImage = new javafx.scene.image.Image(
Launcher.getResourceURL("dialog/overlay/processing/spinner.gif").toString());
processing.errorImage = new javafx.scene.image.Image(
Launcher.getResourceURL("dialog/overlay/processing/error.png").toString());
},
resetOverlay: function() {
processing.spinner.setImage(processing.processingImage);
processing.description.getStyleClass().remove("error");
processing.description.setText("...");
},
setError: function(e) {
LogHelper.error(e);
processing.description.textProperty().unbind();
processing.spinner.setImage(processing.errorImage);
processing.description.getStyleClass().add("error");
processing.description.setText(e.toString());
},
setTaskProperties: function(task, callback, errorCallback, hide) {
processing.description.textProperty().bind(task.messageProperty());
task.setOnFailed(function(event) {
processing.description.textProperty().unbind();
processing.setError(task.getException());
if (hide) {
overlay.hide(2500, errorCallback);
} else if (errorCallback !== null) {
errorCallback();
}
});
task.setOnSucceeded(function(event) {
processing.description.textProperty().unbind();
if (callback !== null) {
callback(task.getValue());
}
});
}
};
function offlineLauncherRequest() {
if (settings.lastSign === null || settings.lastProfiles.isEmpty()) {
Request.requestError("Запуск в оффлайн-режиме невозможен");
return;
}
// Verify launcher signature
SecurityHelper.verifySign(LauncherRequest.BINARY_PATH,
settings.lastSign, Launcher.getConfig().publicKey);
// Return last sign and profiles
return {
sign: settings.lastSign,
profiles: settings.lastProfiles
};
}
function offlineAuthRequest(login) {
return function() {
if (!VerifyHelper.isValidUsername(login)) {
Request.requestError("Имя пользователя некорректно");
return;
}
// Return offline profile and random access token
return {
pp: PlayerProfile.newOfflineProfile(login),
accessToken: SecurityHelper.randomStringToken()
}
};
}
/* Export functions */
function makeLauncherRequest(callback) {
var task = settings.offline ? newTask(offlineLauncherRequest) :
newRequestTask(new LauncherRequest());
// Set task properties and start
processing.setTaskProperties(task, callback, function() {
if (settings.offline) {
return;
}
// Repeat request, but in offline mode
settings.offline = true;
overlay.swap(2500, processing.overlay, function() makeLauncherRequest(callback));
}, false);
task.updateMessage("Обновление списка серверов");
startTask(task);
}
function makeAuthRequest(login, rsaPassword, callback) {
var task = rsaPassword === null ? newTask(offlineAuthRequest(login)) :
newRequestTask(new AuthRequest(login, rsaPassword));
processing.setTaskProperties(task, callback, null, true);
task.updateMessage("Авторизация на сервере");
startTask(task);
}
function launchClient(jvmDir, jvmHDir, clientHDir, profile, params, callback) {
var task = newTask(function() ClientLauncher.launch(jvmDir, jvmHDir,
clientHDir, profile, params, LogHelper.isDebugEnabled()));
processing.setTaskProperties(task, callback, null, true);
task.updateMessage("Запуск выбранного клиента");
startTask(task);
}