wesnoth-cvs-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Wesnoth-cvs-commits] wesnoth/src network.cpp network.hpp network_wor...


From: Jon Daniel
Subject: [Wesnoth-cvs-commits] wesnoth/src network.cpp network.hpp network_wor...
Date: Fri, 05 Aug 2005 17:53:07 -0400

CVSROOT:        /cvsroot/wesnoth
Module name:    wesnoth
Branch:         
Changes by:     Jon Daniel <address@hidden>     05/08/05 21:53:07

Modified files:
        src            : network.cpp network.hpp network_worker.cpp 
                         network_worker.hpp show_dialog.cpp 

Log message:
        * Improved socket statistics with separate send and receive stats for 
each socket

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/network.cpp.diff?tr1=1.68&tr2=1.69&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/network.hpp.diff?tr1=1.27&tr2=1.28&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/network_worker.cpp.diff?tr1=1.37&tr2=1.38&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/network_worker.hpp.diff?tr1=1.4&tr2=1.5&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/show_dialog.cpp.diff?tr1=1.135&tr2=1.136&r1=text&r2=text

Patches:
Index: wesnoth/src/network.cpp
diff -u wesnoth/src/network.cpp:1.68 wesnoth/src/network.cpp:1.69
--- wesnoth/src/network.cpp:1.68        Wed Jul 27 13:16:38 2005
+++ wesnoth/src/network.cpp     Fri Aug  5 21:53:03 2005
@@ -1,4 +1,4 @@
-/* $Id: network.cpp,v 1.68 2005/07/27 13:16:38 ott Exp $ */
+/* $Id: network.cpp,v 1.69 2005/08/05 21:53:03 j_daniel Exp $ */
 /*
    Copyright (C) 2003-5 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://www.wesnoth.org/
@@ -704,9 +704,13 @@
        return str.str();
 }
 
-std::pair<int,int> current_transfer_stats()
+statistics get_send_stats(connection handle)
 {
-       return network_worker_pool::get_current_transfer_stats();
+       return 
network_worker_pool::get_current_transfer_stats(get_socket(handle)).first;
+}
+statistics get_receive_stats(connection handle)
+{
+       return 
network_worker_pool::get_current_transfer_stats(get_socket(handle)).second;
 }
 
 } //end namespace network
Index: wesnoth/src/network.hpp
diff -u wesnoth/src/network.hpp:1.27 wesnoth/src/network.hpp:1.28
--- wesnoth/src/network.hpp:1.27        Wed Jul 20 08:22:37 2005
+++ wesnoth/src/network.hpp     Fri Aug  5 21:53:03 2005
@@ -1,4 +1,4 @@
-/* $Id: network.hpp,v 1.27 2005/07/20 08:22:37 ott Exp $ */
+/* $Id: network.hpp,v 1.28 2005/08/05 21:53:03 j_daniel Exp $ */
 /*
    Copyright (C) 2003-5 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://www.wesnoth.org/
@@ -136,9 +136,6 @@
 //function to get the remote ip address of a socket
 std::string ip_address(connection connection_num);
 
-//function to see the number of bytes being processed on the current socket
-std::pair<int,int> current_transfer_stats();
-
 struct connection_stats
 {
        connection_stats(int sent, int received, int connected_at);
@@ -158,6 +155,37 @@
        void disconnect();
 };
 
+struct statistics
+{
+       statistics() : total(0), current(0), current_max(0) {}
+       void fresh_current(size_t len)
+       {
+               current = 0;
+               current_max = len;
+       }
+       void transfer(size_t size)
+       {
+               total += size;
+               current += size;
+       }
+       bool operator==(const statistics& stats)
+       {
+               return total == stats.total && current == stats.current && 
current_max == stats.current_max;
+       }
+       bool operator!=(const statistics& stats)
+       {
+               return !operator==(stats);
+       }
+       size_t total;
+       size_t current;
+       size_t current_max;
+};
+
+//function to see the number of bytes being processed on the current socket
+statistics get_send_stats(connection handle);
+statistics get_receive_stats(connection handle);
+
 }
+
 
 #endif
Index: wesnoth/src/network_worker.cpp
diff -u wesnoth/src/network_worker.cpp:1.37 wesnoth/src/network_worker.cpp:1.38
--- wesnoth/src/network_worker.cpp:1.37 Fri Aug  5 13:13:30 2005
+++ wesnoth/src/network_worker.cpp      Fri Aug  5 21:53:03 2005
@@ -1,4 +1,4 @@
-/* $Id: network_worker.cpp,v 1.37 2005/08/05 13:13:30 j_daniel Exp $ */
+/* $Id: network_worker.cpp,v 1.38 2005/08/05 21:53:03 j_daniel Exp $ */
 /*
    Copyright (C) 2003-5 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://www.wesnoth.org/
@@ -57,7 +57,11 @@
 
 enum SOCKET_STATE { SOCKET_READY, SOCKET_LOCKED, SOCKET_ERROR, 
SOCKET_INTERRUPT };
 typedef std::map<TCPsocket,SOCKET_STATE> socket_state_map;
+typedef std::map<TCPsocket, std::pair<network::statistics,network::statistics> 
> socket_stats_map;
+
 socket_state_map sockets_locked;
+socket_stats_map transfer_stats;
+
 int socket_errors = 0;
 threading::mutex* global_mutex = NULL;
 threading::condition* cond = NULL;
@@ -67,9 +71,10 @@
 SOCKET_STATE send_buf(TCPsocket sock, std::vector<char>& buf) {
        size_t upto = 0;
        size_t size = buf.size();
-
-       current_transfer_stats.first = 0;
-       current_transfer_stats.second = static_cast<int>(size);
+       {
+               const threading::lock lock(*global_mutex);
+               transfer_stats[sock].first.fresh_current(size);
+       }
 
        while(upto < size) {
                {
@@ -84,8 +89,11 @@
                if(res < 0 || res != bytes_to_send && errno != EAGAIN)
                        return SOCKET_ERROR;
 
-               current_transfer_stats.first += res;
                upto += res;
+               {
+                       const threading::lock lock(*global_mutex);
+                       transfer_stats[sock].first.transfer(res);
+               }
        }
        return SOCKET_READY;
 }
@@ -124,8 +132,10 @@
        char* beg = &buf[0];
        const char* const end = beg + len;
 
-       current_transfer_stats.first = 0;
-       current_transfer_stats.second = len;
+       {
+               const threading::lock lock(*global_mutex);
+               transfer_stats[sock].second.fresh_current(len);
+       }
 
        while(beg != end) {
                {
@@ -145,17 +155,18 @@
                        SDLNet_FreeSocketSet(set);
                        return SOCKET_ERROR;
                }
-               // receive one byte at a time
-               const int len = SDLNet_TCP_Recv(sock,beg, 1);
-               if(len <= 0) {
+
+               if(SDLNet_TCP_Recv(sock, beg, 1) <= 0) {
                        SDLNet_TCP_DelSocket(set, sock);
                        SDLNet_FreeSocketSet(set);
                        return SOCKET_ERROR;
                }
-
-               beg += len;
-
-               current_transfer_stats.first = beg - &buf[0];
+               ++beg;
+               {
+                       const threading::lock lock(*global_mutex);
+                       ++transfer_stats[sock].second.total;
+                       ++transfer_stats[sock].second.current;
+               }
        }
        SDLNet_TCP_DelSocket(set, sock);
        SDLNet_FreeSocketSet(set);
@@ -294,6 +305,7 @@
                cond = NULL;
 
                sockets_locked.clear();
+               transfer_stats.clear();
 
                LOG_NW << "exiting manager::~manager()\n";
        }
@@ -426,9 +438,10 @@
        return 0;
 }
 
-std::pair<int,int> get_current_transfer_stats()
+std::pair<network::statistics,network::statistics> 
get_current_transfer_stats(TCPsocket sock)
 {
-       return current_transfer_stats;
+       const threading::lock lock(*global_mutex);
+       return transfer_stats[sock];
 }
 
 }
Index: wesnoth/src/network_worker.hpp
diff -u wesnoth/src/network_worker.hpp:1.4 wesnoth/src/network_worker.hpp:1.5
--- wesnoth/src/network_worker.hpp:1.4  Wed Jul 20 08:22:37 2005
+++ wesnoth/src/network_worker.hpp      Fri Aug  5 21:53:03 2005
@@ -1,4 +1,4 @@
-/* $Id: network_worker.hpp,v 1.4 2005/07/20 08:22:37 ott Exp $ */
+/* $Id: network_worker.hpp,v 1.5 2005/08/05 21:53:03 j_daniel Exp $ */
 /*
    Copyright (C) 2003-5 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://www.wesnoth.org/
@@ -19,6 +19,11 @@
 
 #include "SDL_net.h"
 
+namespace network
+{
+       struct statistics;
+}
+
 namespace network_worker_pool
 {
 
@@ -44,7 +49,7 @@
 void close_socket(TCPsocket sock);
 TCPsocket detect_error();
 
-std::pair<int,int> get_current_transfer_stats();
+std::pair<network::statistics,network::statistics> 
get_current_transfer_stats(TCPsocket sock);
 
 }
 
Index: wesnoth/src/show_dialog.cpp
diff -u wesnoth/src/show_dialog.cpp:1.135 wesnoth/src/show_dialog.cpp:1.136
--- wesnoth/src/show_dialog.cpp:1.135   Sat Jul  2 21:37:19 2005
+++ wesnoth/src/show_dialog.cpp Fri Aug  5 21:53:03 2005
@@ -1,4 +1,4 @@
-/* $Id: show_dialog.cpp,v 1.135 2005/07/02 21:37:19 ott Exp $ */
+/* $Id: show_dialog.cpp,v 1.136 2005/08/05 21:53:03 j_daniel Exp $ */
 /*
    Copyright (C) 2003 by David White <address@hidden>
    Part of the Battle for Wesnoth Project http://www.wesnoth.org/
@@ -870,18 +870,18 @@
        events::raise_draw_event();
        disp.flip();
 
-       std::pair<int,int> old_stats = network::current_transfer_stats();
+       network::statistics old_stats = 
network::get_receive_stats(connection_num);
 
        cfg.clear();
        for(;;) {
                const network::connection res = 
network::receive_data(cfg,connection_num,100);
 
-               const std::pair<int,int> stats = 
network::current_transfer_stats();
-               if(stats.first != -1 && stats.second != 0 && stats != 
old_stats) {
+               network::statistics stats = 
network::get_receive_stats(connection_num);
+               if(stats.current_max != 0 && stats != old_stats) {
                        old_stats = stats;
-                       
progress.set_progress_percent((stats.first*100)/stats.second);
+                       
progress.set_progress_percent((stats.current*100)/stats.current_max);
                        std::ostringstream stream;
-                       stream << stats.first/1024 << "/" << stats.second/1024 
<< _("KB");
+                       stream << stats.current/1024 << "/" << 
stats.current_max/1024 << _("KB");
                        progress.set_text(stream.str());
                }
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]