Changeset - fb420ef1254e
[Not reviewed]
0 8 0
Jan Kaluza - 14 years ago 2011-06-22 12:11:24
hanzz.k@gmail.com
Working attention from XMPP -> legacy network
8 files changed with 45 insertions and 3 deletions:
0 comments (0 inline, 0 general)
backends/libpurple/main.cpp
Show inline comments
 
@@ -433,6 +433,13 @@ class SpectrumNetworkPlugin : public NetworkPlugin {
 
			}
 
		}
 

	
 
		void handleAttentionRequest(const std::string &user, const std::string &buddyName, const std::string &message) {
 
			PurpleAccount *account = m_sessions[user];
 
			if (account) {
 
				purple_prpl_send_attention(purple_account_get_connection(account), buddyName.c_str(), 0);
 
			}
 
		}
 

	
 
		std::map<std::string, PurpleAccount *> m_sessions;
 
		std::map<PurpleAccount *, std::string> m_accounts;
 
		std::map<std::string, unsigned int> m_vcards;
include/Swiften/Server/Server.cpp
Show inline comments
 
@@ -100,7 +100,7 @@ void Server::handleNewClientConnection(boost::shared_ptr<Connection> connection)
 

	
 
	boost::shared_ptr<ServerFromClientSession> serverFromClientSession = boost::shared_ptr<ServerFromClientSession>(
 
			new ServerFromClientSession(idGenerator.generateID(), connection, 
 
					&payloadParserFactories, &payloadSerializers, userRegistry_));
 
					getPayloadParserFactories(), getPayloadSerializers(), userRegistry_));
 
	//serverFromClientSession->setAllowSASLEXTERNAL();
 

	
 
	serverFromClientSession->onSessionStarted.connect(
include/Swiften/Server/Server.h
Show inline comments
 
@@ -67,8 +67,6 @@ namespace Swift {
 

	
 
		private:
 
			IDGenerator idGenerator;
 
			FullPayloadParserFactoryCollection payloadParserFactories;
 
			FullPayloadSerializerCollection payloadSerializers;
 
			UserRegistry *userRegistry_;
 
			int port_;
 
			EventLoop* eventLoop;
include/transport/networkplugin.h
Show inline comments
 
@@ -80,6 +80,7 @@ class NetworkPlugin {
 
		virtual void handleTypingRequest(const std::string &/*user*/, const std::string &/*buddyName*/) {}
 
		virtual void handleTypedRequest(const std::string &/*user*/, const std::string &/*buddyName*/) {}
 
		virtual void handleStoppedTypingRequest(const std::string &/*user*/, const std::string &/*buddyName*/) {}
 
		virtual void handleAttentionRequest(const std::string &/*user*/, const std::string &/*buddyName*/, const std::string &/*message*/) {}
 
		
 

	
 
	private:
 
@@ -94,6 +95,7 @@ class NetworkPlugin {
 
		void handleBuddyChangedPayload(const std::string &payload);
 
		void handleBuddyRemovedPayload(const std::string &payload);
 
		void handleChatStatePayload(const std::string &payload, Swift::ChatState::ChatStateType type);
 
		void handleAttentionPayload(const std::string &payload);
 
		void handleDataRead(const Swift::SafeByteArray&);
 
		void _handleConnected(bool error);
 
		void handleDisconnected();
src/conversationmanager.cpp
Show inline comments
 
@@ -61,9 +61,11 @@ void ConversationManager::handleMessageReceived(Swift::Message::ref message) {
 
		name.replace(name.find_last_of("%"), 1, "@");
 
	}
 

	
 
	// create conversation if it does not exist.
 
	if (!m_convs[name]) {
 
		m_convs[name] = m_component->getFactory()->createConversation(this, name);
 
	}
 
	// if it exists and it's MUC, but this message is PM, get PM conversation or create new one.
 
	else if (m_convs[name]->isMUC() && message->getType() != Swift::Message::Groupchat) {
 
		std::string room_name = name;
 
		name = message->getTo().getResource();
src/networkplugin.cpp
Show inline comments
 
@@ -303,6 +303,16 @@ void NetworkPlugin::handleConvMessagePayload(const std::string &data) {
 
	handleMessageSendRequest(payload.username(), payload.buddyname(), payload.message());
 
}
 

	
 
void NetworkPlugin::handleAttentionPayload(const std::string &data) {
 
	pbnetwork::ConversationMessage payload;
 
	if (payload.ParseFromString(data) == false) {
 
		// TODO: ERROR
 
		return;
 
	}
 

	
 
	handleAttentionRequest(payload.username(), payload.buddyname(), payload.message());
 
}
 

	
 
void NetworkPlugin::handleJoinRoomPayload(const std::string &data) {
 
	pbnetwork::Room payload;
 
	if (payload.ParseFromString(data) == false) {
 
@@ -443,6 +453,9 @@ void NetworkPlugin::handleDataRead(const Swift::SafeByteArray &data) {
 
			case pbnetwork::WrapperMessage_Type_TYPE_BUDDY_STOPPED_TYPING:
 
				handleChatStatePayload(wrapper.payload(), Swift::ChatState::Active);
 
				break;
 
			case pbnetwork::WrapperMessage_Type_TYPE_ATTENTION:
 
				handleAttentionPayload(wrapper.payload());
 
				break;
 
			default:
 
				return;
 
		}
src/networkpluginserver.cpp
Show inline comments
 
@@ -34,6 +34,7 @@
 
#include "Swiften/Server/ServerStanzaChannel.h"
 
#include "Swiften/Elements/StreamError.h"
 
#include "Swiften/Network/BoostConnectionServer.h"
 
#include "Swiften/Elements/AttentionPayload.h"
 
#include "pbnetwork.pb.h"
 
#include "sys/wait.h"
 
#include "sys/signal.h"
 
@@ -649,6 +650,24 @@ void NetworkPluginServer::handleMessageReceived(NetworkConversation *conv, boost
 
		}
 
	}
 

	
 
	boost::shared_ptr<Swift::AttentionPayload> attentionPayload = msg->getPayload<Swift::AttentionPayload>();
 
	if (attentionPayload) {
 
		pbnetwork::ConversationMessage m;
 
		m.set_username(conv->getConversationManager()->getUser()->getJID().toBare());
 
		m.set_buddyname(conv->getLegacyName());
 
		m.set_message(msg->getBody());
 

	
 
		std::string message;
 
		m.SerializeToString(&message);
 

	
 
		WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_ATTENTION);
 

	
 
		Client *c = (Client *) conv->getConversationManager()->getUser()->getData();
 
		send(c->connection, message);
 
		return;
 
	}
 
	
 

	
 
	if (!msg->getBody().empty()) {
 
		pbnetwork::ConversationMessage m;
 
		m.set_username(conv->getConversationManager()->getUser()->getJID().toBare());
src/pbnetwork.proto
Show inline comments
 
@@ -93,6 +93,7 @@ message WrapperMessage {
 
		TYPE_BUDDY_STOPPED_TYPING	= 19;
 
		TYPE_BUDDY_TYPED			= 20;
 
		TYPE_AUTH_REQUEST			= 21;
 
		TYPE_ATTENTION			= 22;
 
	}
 
	required Type type = 1;
 
	optional bytes payload = 2;
0 comments (0 inline, 0 general)