Author: loonycyborg
Date: Thu Jul 7 01:32:13 2011
New Revision: 50190
URL: http://svn.gna.org/viewcvs/wesnoth?rev=50190&view=rev
Log:
Fully switched the addon manager to the new network subsystem.
Modified:
trunk/src/addon/manager.cpp
trunk/src/gui/dialogs/network_transmission.cpp
trunk/src/network_asio.cpp
trunk/src/network_asio.hpp
Modified: trunk/src/addon/manager.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/addon/manager.cpp?rev=50190&r1=50189&r2=50190&view=diff
==============================================================================
--- trunk/src/addon/manager.cpp (original)
+++ trunk/src/addon/manager.cpp Thu Jul 7 01:32:13 2011
@@ -474,24 +474,24 @@
}
}
- void upload_addon_to_server(game_display& disp, const std::string&
addon, network::connection sock)
+ void upload_addon_to_server(game_display& disp, const std::string&
addon, network_asio::connection& connection)
{
- config request_terms;
- request_terms.add_child("request_terms");
- network::send_data(request_terms, sock);
- config data;
- sock = network::receive_data(data,sock,5000);
- if(!sock) {
- gui2::show_error_message(disp.video(), _("Connection
timed out"));
- return;
- } else if (const config &c = data.child("error")) {
+ config request;
+ request.add_child("request_terms");
+ config response;
+ connection.transfer(request, response);
+ gui2::tnetwork_transmission request_terms_dialog(connection,
_("Requesting terms"), "");
+ bool result = request_terms_dialog.show(disp.video());
+ if(!result) return;
+
+ if (const config &c = response.child("error")) {
std::string error_message = _("The server responded
with an error: \"$error|\"");
utils::string_map symbols;
symbols["error"] = c["message"].str();
error_message =
utils::interpolate_variables_into_string(error_message, &symbols);
gui2::show_error_message(disp.video(), error_message);
return;
- } else if (const config &c = data.child("message")) {
+ } else if (const config &c = response.child("message")) {
if(gui2::show_message(disp.video()
,_("Terms")
@@ -522,24 +522,25 @@
config addon_data;
archive_addon(addon,addon_data);
- data.clear();
- data.add_child("upload",cfg).add_child("data",addon_data);
+ request.clear();
+ response.clear();
+ request.add_child("upload",cfg).add_child("data",addon_data);
LOG_NET << "uploading add-on...\n";
- network::send_data(data, sock);
-
- sock = dialogs::network_send_dialog(disp,_("Sending
add-on"),data,sock);
- if(!sock) {
- return;
- } else if (const config &c = data.child("error")) {
+ connection.transfer(request, response);
+ gui2::tnetwork_transmission upload_dialog(connection,
_("Sending add-on"), "");
+ result = upload_dialog.show(disp.video());
+ if(!result) return;
+
+ if (const config &c = response.child("error")) {
gui2::show_error_message(disp.video(), _("The server
responded with an error: \"") +
c["message"].str() + '"');
- } else if (const config &c = data.child("message")) {
+ } else if (const config &c = response.child("message")) {
gui2::show_transient_message(disp.video(),
_("Response"), c["message"]);
}
}
- void delete_remote_addon(game_display& disp, const std::string& addon,
network::connection sock)
+ void delete_remote_addon(game_display& disp, const std::string& addon,
network_asio::connection& connection)
{
config cfg;
get_addon_info(addon,cfg);
@@ -548,18 +549,18 @@
msg["name"] = addon;
msg["passphrase"] = cfg["passphrase"];
- config data;
- data.add_child("delete",msg);
-
- network::send_data(data, sock);
-
- sock = network::receive_data(data,sock,5000);
- if(!sock) {
- gui2::show_error_message(disp.video(), _("Connection
timed out"));
- } else if (const config &c = data.child("error")) {
+ config request, response;
+ request.add_child("delete",msg);
+
+ connection.transfer(request, response);
+ gui2::tnetwork_transmission network_connect(connection,
_("Requesting the addon to be deleted"), "");
+ bool result = network_connect.show(disp.video());
+ if(!result) return;
+
+ if (const config &c = response.child("error")) {
gui2::show_error_message(disp.video(), _("The server
responded with an error: \"") +
c["message"].str() + '"');
- } else if (const config &c = data.child("message")) {
+ } else if (const config &c = response.child("message")) {
gui2::show_transient_message(disp.video(),
_("Response"), c["message"]);
}
}
@@ -568,14 +569,12 @@
const std::string& addon_id, const std::string&
addon_title,
const std::string& addon_type_str, const
std::string& addon_uploads_str,
const std::string& addon_version_str,
- const network::manager& /*net_manager*/,
- const network::connection& sock, bool* do_refresh,
+ network_asio::connection& connection, bool*
do_refresh,
bool show_result = true)
{
// Proceed to download and install
config request;
request.add_child("request_campaign")["name"] = addon_id;
- network::send_data(request, sock);
utils::string_map syms;
syms["addon_title"] = addon_title;
@@ -584,8 +583,11 @@
// WML structure where the add-on archive, or any error
messages, are stored.
config cfg;
- network::connection res = dialogs::network_receive_dialog(disp,
download_dlg_title, cfg, sock);
- if(!res) {
+
+ connection.transfer(request, cfg);
+ gui2::tnetwork_transmission network_connect(connection,
download_dlg_title, _("Downloading..."));
+ bool result = network_connect.show(disp.video());
+ if(!result) {
return false;
}
@@ -688,8 +690,8 @@
*/
bool addon_dependencies_met(game_display &disp, config const&
addons_tree,
const std::string &addon_id,
- const network::manager& net_manager,
- const network::connection& sock, bool* do_refresh)
+ network_asio::connection& connection,
+ bool* do_refresh)
{
const config &selected_campaign =
addons_tree.find_child("campaign", "name", addon_id);
assert(selected_campaign);
@@ -819,12 +821,12 @@
for(size_t i = 0; i < addons.size() && i <
remote_matches_cfgs.size(); ++i)
{
if (!install_addon(disp, addons[i],
titles[i],
- types[i], uploads[i],
versions[i], net_manager, sock,
+ types[i], uploads[i],
versions[i], connection,
do_refresh, false)) {
result=false;
failed_titles.push_back(titles[i]);
} else {
- if
(!addon_dependencies_met(disp, addons_tree, addons[i], net_manager, sock,
do_refresh)) {
+ if
(!addon_dependencies_met(disp, addons_tree, addons[i], connection, do_refresh))
{
const std::string
err_title = _("Installation of a dependency failed");
const std::string
err_message =
_("While the
add-on has been installed, a dependency is missing. Try to update the installed
add-ons.");
@@ -856,7 +858,7 @@
}
void addons_update_dlg(game_display &disp, config const& addons_tree,
const config::const_child_itors &remote_addons_list,
- const network::manager& net_manager, const
network::connection& sock,
+ network_asio::connection& connection,
bool* do_refresh)
{
std::vector<const config *> remote_matches_cfgs;
@@ -1030,12 +1032,12 @@
for(size_t i = 0; i < addons.size() && i <
remote_matches_cfgs.size(); ++i)
{
if (!install_addon(disp, addons[i], titles[i],
- types[i], uploads[i],
newversions[i], net_manager, sock,
+ types[i], uploads[i],
newversions[i], connection,
do_refresh, false)) {
result=false;
failed_titles.push_back(titles[i]);
} else {
- if (!addon_dependencies_met(disp,
addons_tree, addons[i], net_manager, sock, do_refresh)) {
+ if (!addon_dependencies_met(disp,
addons_tree, addons[i], connection, do_refresh)) {
const std::string err_title =
_("Installation of some dependency failed");
const std::string err_message =
_("While the add-on has
been installed, some dependency is missing. Try to update the installed
add-ons.");
@@ -1047,12 +1049,12 @@
} else {
const size_t i = static_cast<size_t>(index);
if (!install_addon(disp, addons[i], titles[i],
- types[i], uploads[i],
newversions[i], net_manager, sock,
+ types[i], uploads[i],
newversions[i], connection,
do_refresh, false)) {
result=false;
failed_titles.push_back(titles[i]);
} else {
- if (!addon_dependencies_met(disp, addons_tree,
addons[i], net_manager, sock, do_refresh)) {
+ if (!addon_dependencies_met(disp, addons_tree,
addons[i], connection, do_refresh)) {
const std::string err_title =
_("Installation of some dependency failed");
const std::string err_message =
_("While the add-on has been
installed, some dependency is missing. Try to update the installed add-ons.");
@@ -1118,50 +1120,31 @@
}
const std::string old_host = preferences::campaign_server();
- const int remote_port =
lexical_cast_default<int>(address_components.back(),
-
default_campaignd_port);
- std::string remote_host = address_components.front();
+ const std::string remote_port =
+ address_components.size() == 2 ? address_components[1]
: lexical_cast<std::string>(default_campaignd_port);
+ std::string remote_host = address_components[0];
preferences::set_campaign_server(remote_address);
try {
- if(gui2::new_widgets) {
- network_asio::connection
connection(remote_host, lexical_cast<std::string>(remote_port));
- gui2::tnetwork_transmission
network_connect(connection, _("Requesting list of add-ons"),
_("Connecting..."));
- bool result =
network_connect.show(disp.video());
- if(!result)
- return;
- config cfg, response;
- cfg.add_child("request_campaign_list");
- connection.transfer(cfg, response);
-
network_connect.set_subtitle(_("Downloading..."));
- result = network_connect.show(disp.video());
- if(!result)
- return;
- }
- const network::manager net_manager;
- const network::connection sock =
- dialogs::network_connect_dialog(disp,
_("Connecting to add-ons server..."),
- remote_host,
remote_port);
- if(!sock) {
- gui2::show_error_message(disp.video(), _("Could
not connect to host."));
- preferences::set_campaign_server(old_host);
+ network_asio::connection connection(remote_host,
lexical_cast<std::string>(remote_port));
+ gui2::tnetwork_transmission network_connect(connection,
_("Requesting list of add-ons"), _("Connecting..."));
+ bool result = network_connect.show(disp.video());
+ if(!result)
return;
- }
-
- config cfg;
- cfg.add_child("request_campaign_list");
- network::send_data(cfg, sock);
- network::connection res =
dialogs::network_receive_dialog(disp, _("Requesting list of add-ons"), cfg,
sock);
- if(!res) {
+ config request, response;
+ request.add_child("request_campaign_list");
+ connection.transfer(request, response);
+ network_connect.set_subtitle(_("Downloading..."));
+ result = network_connect.show(disp.video());
+ if(!result)
return;
- }
-
- if (config const &error = cfg.child("error")) {
+
+ if (config const &error = response.child("error")) {
gui2::show_error_message(disp.video(),
error["message"]);
return;
}
- config const &addons_tree = cfg.child("campaigns");
+ config const &addons_tree = response.child("campaigns");
if (!addons_tree) {
gui2::show_error_message(disp.video(), _("An
error occurred while communicating with the server."));
return;
@@ -1169,7 +1152,7 @@
const config::const_child_itors &addon_cfgs =
addons_tree.child_range("campaign");
if(update_mode) {
- addons_update_dlg(disp, addons_tree,
addon_cfgs, net_manager, sock, do_refresh);
+ addons_update_dlg(disp, addons_tree,
addon_cfgs, connection, do_refresh);
return;
}
@@ -1339,14 +1322,14 @@
// Handle deletion option
if(index >= int(addons.size() +
publish_options.size())) {
const std::string& addon = delete_options[index
- int(addons.size() + publish_options.size())];
- delete_remote_addon(disp, addon, sock);
+ delete_remote_addon(disp, addon, connection);
return;
}
// Handle publish option
if(index >= int(addons.size())) {
const std::string& addon =
publish_options[index - int(addons.size())];
- upload_addon_to_server(disp, addon, sock);
+ upload_addon_to_server(disp, addon, connection);
return;
}
@@ -1354,8 +1337,8 @@
{
// Handle download
install_addon(disp, addons[index],
titles[index], types[index],
- uploads[index],
versions[index], net_manager, sock, do_refresh);
- if (!addon_dependencies_met(disp, addons_tree,
addons[index], net_manager, sock, do_refresh)) {
+ uploads[index],
versions[index], connection, do_refresh);
+ if (!addon_dependencies_met(disp, addons_tree,
addons[index], connection, do_refresh)) {
const std::string err_title =
_("Installation of some dependency failed");
const std::string err_message =
_("While the add-on has been
installed, some dependency is missing. Try to update the installed add-ons.");
Modified: trunk/src/gui/dialogs/network_transmission.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/gui/dialogs/network_transmission.cpp?rev=50190&r1=50189&r2=50190&view=diff
==============================================================================
--- trunk/src/gui/dialogs/network_transmission.cpp (original)
+++ trunk/src/gui/dialogs/network_transmission.cpp Thu Jul 7 01:32:13 2011
@@ -87,6 +87,7 @@
void tnetwork_transmission::post_show(twindow& /*window*/)
{
pump_monitor.window_.reset();
+ connection_.cancel();
}
} // namespace gui2
Modified: trunk/src/network_asio.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/network_asio.cpp?rev=50190&r1=50189&r2=50190&view=diff
==============================================================================
--- trunk/src/network_asio.cpp (original)
+++ trunk/src/network_asio.cpp Thu Jul 7 01:32:13 2011
@@ -129,6 +129,8 @@
std::size_t bytes_transferred
)
{
+ if(ec == boost::asio::error::operation_aborted)
+ return 0;
if(ec)
throw error(ec);
bytes_read_ = bytes_transferred;
@@ -158,6 +160,8 @@
std::cout << "Read " << bytes_transferred << " bytes.\n";
bytes_to_read_ = 0;
done_ = true;
+ if(ec == boost::asio::error::operation_aborted)
+ return;
if(ec && ec != boost::asio::error::eof)
throw error(ec);
std::istream is(&read_buf_);
Modified: trunk/src/network_asio.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/network_asio.hpp?rev=50190&r1=50189&r2=50190&view=diff
==============================================================================
--- trunk/src/network_asio.hpp (original)
+++ trunk/src/network_asio.hpp Thu Jul 7 01:32:13 2011
@@ -105,6 +105,8 @@
*/
void run() { io_service_.run(); }
+ void cancel() { socket_.cancel(); }
+
/** True if connected and no high-level operation is in progress */
bool done() const { return done_; }
_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits