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