Author: loonycyborg
Date: Sat Mar 24 19:48:57 2012
New Revision: 53643

URL: http://svn.gna.org/viewcvs/wesnoth?rev=53643&view=rev
Log:
Added support for setting/getting room topic.

Modified:
    branches/asio_wesnothd/src/server/rooms.cpp
    branches/asio_wesnothd/src/server/rooms.hpp
    branches/asio_wesnothd/src/server/server.cpp
    branches/asio_wesnothd/src/server/server.hpp

Modified: branches/asio_wesnothd/src/server/rooms.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/branches/asio_wesnothd/src/server/rooms.cpp?rev=53643&r1=53642&r2=53643&view=diff
==============================================================================
--- branches/asio_wesnothd/src/server/rooms.cpp (original)
+++ branches/asio_wesnothd/src/server/rooms.cpp Sat Mar 24 19:48:57 2012
@@ -107,3 +107,12 @@
        msg.set_attr_dup("message", message.c_str());
        send_to_room(room_name, server_message, exclude);
 }
+
+Room& RoomList::room(const std::string& room_name)
+{
+       RoomMap::right_iterator iter = room_map_.right.find(room_name);
+       if(iter == room_map_.right.end())
+               throw std::runtime_error("Room '" + room_name + "' doesn't 
exist");
+       
+       return *(iter->info);
+}

Modified: branches/asio_wesnothd/src/server/rooms.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/branches/asio_wesnothd/src/server/rooms.hpp?rev=53643&r1=53642&r2=53643&view=diff
==============================================================================
--- branches/asio_wesnothd/src/server/rooms.hpp (original)
+++ branches/asio_wesnothd/src/server/rooms.hpp Sat Mar 24 19:48:57 2012
@@ -23,10 +23,14 @@
 class Room : public boost::noncopyable
 {
        std::string name_;
+       std::string topic_;
 
        public:
        Room(const std::string& name);
        ~Room();
+
+       const std::string& topic() const { return topic_; }
+       void set_topic(const std::string& topic) { topic_ = topic; }
 };
 
 typedef boost::shared_ptr<Room> room_ptr;
@@ -55,6 +59,8 @@
        void send_to_room(const std::string& room_name, simple_wml::document& 
doc, socket_ptr exclude = socket_ptr()) const;
        void send_server_message(const std::string& room_name, const 
std::string& message, socket_ptr exclude = socket_ptr()) const;
 
+       Room& room(const std::string& room_name);
+
        private:
        void fill_member_list(const std::string room_name, simple_wml::node& 
root);
 };

Modified: branches/asio_wesnothd/src/server/server.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/branches/asio_wesnothd/src/server/server.cpp?rev=53643&r1=53642&r2=53643&view=diff
==============================================================================
--- branches/asio_wesnothd/src/server/server.cpp (original)
+++ branches/asio_wesnothd/src/server/server.cpp Sat Mar 24 19:48:57 2012
@@ -1147,6 +1147,9 @@
        if(simple_wml::node* room_part = doc->child("room_part")) {
                handle_room_part(socket, *room_part);
        }
+       if(simple_wml::node* room_query = doc->child("room_query")) {
+               handle_room_query(socket, *room_query);
+       }
 }
 
 void server::handle_whisper(socket_ptr socket, simple_wml::node& whisper)
@@ -1269,6 +1272,30 @@
 {
        std::string room_name = room_part.attr("room").to_string();
        room_list_.leave_room(room_name, socket);
+}
+
+void server::handle_room_query(socket_ptr socket, simple_wml::node& room_query)
+{
+       simple_wml::document doc;
+       simple_wml::node& response = 
doc.root().add_child("room_query_response");
+       simple_wml::node* query;
+
+       std::string room_name = room_query.attr("room").to_string();
+       if(room_name.empty()) room_name = "lobby";
+       Room& room = room_list_.room(room_name);
+
+       query = room_query.child("topic");
+       if(query != NULL) {
+               if(query->attr("value").empty()) {
+                       response.set_attr_dup("topic", room.topic().c_str());
+                       send_to_player(socket, doc);
+               } else {
+                       room.set_topic(query->attr("value").to_string());
+                       send_server_message(socket, "Room topic changed.");
+               }
+               return;
+       }
+       send_server_message(socket, "Unknown room query type");
 }
 
 typedef std::map<socket_ptr, 
std::deque<boost::shared_ptr<simple_wml::document> > > SendQueue;

Modified: branches/asio_wesnothd/src/server/server.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/branches/asio_wesnothd/src/server/server.hpp?rev=53643&r1=53642&r2=53643&view=diff
==============================================================================
--- branches/asio_wesnothd/src/server/server.hpp (original)
+++ branches/asio_wesnothd/src/server/server.hpp Sat Mar 24 19:48:57 2012
@@ -70,6 +70,7 @@
        void handle_message(socket_ptr socket, simple_wml::node& message);
        void handle_room_join(socket_ptr socket, simple_wml::node& room_join);
        void handle_room_part(socket_ptr socket, simple_wml::node& room_join);
+       void handle_room_query(socket_ptr socket, simple_wml::node& room_query);
        void remove_player(socket_ptr socket);
 
        const network::manager net_manager_;


_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits

Reply via email to