Changeset - bc585576a9ab
[Not reviewed]
0 8 0
HanzZ - 14 years ago 2011-05-13 23:37:48
hanzz.k@gmail.com
ping/pong, message transfering
8 files changed with 94 insertions and 16 deletions:
0 comments (0 inline, 0 general)
backends/libpurple/main.cpp
Show inline comments
 
@@ -317,17 +317,18 @@ static void conv_write_im(PurpleConversation *conv, const char *who, const char
 
	// Don't forwards our own messages.
 
	if (flags & PURPLE_MESSAGE_SEND || flags & PURPLE_MESSAGE_SYSTEM)
 
		return;
 
	SpectrumConversation *s_conv = (SpectrumConversation *) conv->ui_data;
 
	if (!s_conv)
 
		return;
 
	PurpleAccount *account = purple_conversation_get_account(conv);
 
// 	SpectrumConversation *s_conv = (SpectrumConversation *) conv->ui_data;
 
// 	if (!s_conv)
 
// 		return;
 

	
 
	boost::shared_ptr<Swift::Message> msg(new Swift::Message());
 
// 	boost::shared_ptr<Swift::Message> msg(new Swift::Message());
 

	
 
	char *striped = purple_markup_strip_html(message);
 
	msg->setBody(message);
 
	std::string msg = stripped;
 
	g_free(striped);
 

	
 
	s_conv->handleMessage(msg);
 
	np->handleMessage(np->m_accounts[account], who, msg);
 
}
 

	
 
static PurpleConversationUiOps conversation_ui_ops =
include/transport/conversationmanager.h
Show inline comments
 
@@ -47,6 +47,10 @@ class ConversationManager {
 

	
 
		Component *getComponent() { return m_component; }
 

	
 
		Conversation *getConversation(const std::string &name) {
 
			return m_convs[name];
 
		}
 

	
 
		void setConversation(Conversation *conv);
 

	
 
		void unsetConversation(Conversation *conv);
include/transport/networkplugin.h
Show inline comments
 
@@ -46,6 +46,8 @@ class NetworkPlugin {
 

	
 
		void handleDisconnected(const std::string &user, const std::string &legacyName, int error, const std::string &message);
 

	
 
		void handleMessage(const std::string &user, const std::string &legacyName, const std::string &message);
 

	
 
		virtual void handleLoginRequest(const std::string &user, const std::string &legacyName, const std::string &password) = 0;
 
		virtual void handleLogoutRequest(const std::string &user, const std::string &legacyName) = 0;
 

	
include/transport/networkpluginserver.h
Show inline comments
 
@@ -36,6 +36,7 @@ class Component;
 
class Buddy;
 
class LocalBuddy;
 
class Config;
 
class NetworkConversation;
 

	
 
class NetworkPluginServer {
 
	public:
 
@@ -43,6 +44,8 @@ class NetworkPluginServer {
 

	
 
		virtual ~NetworkPluginServer();
 

	
 
		void handleMessageReceived(NetworkConversation *conv, boost::shared_ptr<Swift::Message> &message);
 

	
 
	private:
 
		void handleNewClientConnection(boost::shared_ptr<Swift::Connection> c);
 
		void handleSessionFinished(boost::shared_ptr<Swift::Connection>);
 
@@ -51,6 +54,7 @@ class NetworkPluginServer {
 
		void handleConnectedPayload(const std::string &payload);
 
		void handleDisconnectedPayload(const std::string &payload);
 
		void handleBuddyChangedPayload(const std::string &payload);
 
		void handleConvMessagePayload(const std::string &payload);
 

	
 
		void handleUserCreated(User *user);
 
		void handleUserReadyToConnect(User *user);
include/transport/transport.h
Show inline comments
 
@@ -164,5 +164,6 @@ namespace Transport {
 

	
 
		friend class User;
 
		friend class UserRegistration;
 
		friend class NetworkPluginServer;
 
	};
 
}
src/networkplugin.cpp
Show inline comments
 
@@ -55,6 +55,20 @@ NetworkPlugin::~NetworkPlugin() {
 
	delete m_factories;
 
}
 

	
 
void NetworkPlugin::handleMessage(const std::string &user, const std::string &legacyName, const std::string &msg) {
 
	pbnetwork::ConversationMessage m;
 
	m.set_username(user);
 
	m.set_buddyname(legacyName);
 
	m.set_message(msg);
 

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

	
 
	WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_CONV_MESSAGE);
 

	
 
	send(message);
 
}
 

	
 
void NetworkPlugin::handleBuddyChanged(const std::string &user, const std::string &buddyName, const std::string &alias,
 
			const std::string &groups, int status, const std::string &statusMessage, const std::string &iconHash) {
 
	pbnetwork::Buddy buddy;
src/networkpluginserver.cpp
Show inline comments
 
@@ -27,6 +27,7 @@
 
#include "transport/conversationmanager.h"
 
#include "transport/localbuddy.h"
 
#include "transport/config.h"
 
#include "transport/conversation.h"
 
#include "Swiften/Swiften.h"
 
#include "Swiften/Server/ServerStanzaChannel.h"
 
#include "Swiften/Elements/StreamError.h"
 
@@ -36,6 +37,37 @@
 

	
 
namespace Transport {
 

	
 
class NetworkConversation : public Conversation {
 
	public:
 
		NetworkConversation(ConversationManager *conversationManager, const std::string &legacyName) : Conversation(conversationManager, legacyName) {
 
		}
 

	
 
		void sendMessage(boost::shared_ptr<Swift::Message> &message) {
 
			onMessageToSend(this, message);
 
		}
 

	
 
		boost::signal<void (NetworkConversation *, boost::shared_ptr<Swift::Message> &)> onMessageToSend;
 
};
 

	
 
class NetworkFactory : public Factory {
 
	public:
 
		NetworkFactory(NetworkPluginServer *nps) {
 
			m_nps = nps;
 
		}
 
		
 
		Conversation *createConversation(ConversationManager *conversationManager, const std::string &legacyName) {
 
			NetworkConversation *nc = new NetworkConversation(conversationManager, legacyName);
 
			nc->onMessageToSend.connect(boost::bind(&NetworkPluginServer::handleMessageReceived, m_nps, _1, _2));
 
			return nc;
 
		}
 

	
 
		Buddy *createBuddy(RosterManager *rosterManager, const BuddyInfo &buddyInfo) {
 
			return new LocalBuddy(rosterManager, -1);
 
		}
 
	private:
 
		NetworkPluginServer *m_nps;
 
};
 

	
 
#define WRAP(MESSAGE, TYPE) 	pbnetwork::WrapperMessage wrap; \
 
	wrap.set_type(TYPE); \
 
	wrap.set_payload(MESSAGE); \
 
@@ -161,6 +193,26 @@ void NetworkPluginServer::handleBuddyChangedPayload(const std::string &data) {
 
	}
 
}
 

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

	
 
	User *user = m_userManager->getUser(payload.username());
 
	if (!user)
 
		return;
 

	
 
	NetworkConversation *conv = (NetworkConversation *) user->getConversationManager()->getConversation(payload.buddyname());
 
	if (!conv) {
 
		conv = new NetworkConversation(user->getConversationManager(), payload.buddyname());
 
	}
 
	boost::shared_ptr<Swift::Message> msg(new Swift::Message());
 
	msg->setBody(payload.message());
 
	conv->handleMessage(msg);
 
}
 

	
 
void NetworkPluginServer::handleDataRead(boost::shared_ptr<Swift::Connection> c, const Swift::ByteArray &data) {
 
	long expected_size = 0;
 
	m_data += data.toString();
 
@@ -197,6 +249,9 @@ void NetworkPluginServer::handleDataRead(boost::shared_ptr<Swift::Connection> c,
 
			case pbnetwork::WrapperMessage_Type_TYPE_BUDDY_CHANGED:
 
				handleBuddyChangedPayload(wrapper.payload());
 
				break;
 
			case pbnetwork::WrapperMessage_Type_TYPE_CONV_MESSAGE:
 
				handleConvMessagePayload(wrapper.payload());
 
				break;
 
			case pbnetwork::WrapperMessage_Type_TYPE_PONG:
 
				m_pongReceived = true;
 
				break;
 
@@ -261,6 +316,10 @@ void NetworkPluginServer::handleUserDestroyed(User *user) {
 
	send(m_client, message);
 
}
 

	
 
void NetworkPluginServer::handleMessageReceived(NetworkConversation *conv, boost::shared_ptr<Swift::Message> &message) {
 
	
 
}
 

	
 
void NetworkPluginServer::sendPing() {
 

	
 
	std::string message;
src/pbnetwork.proto
Show inline comments
 
@@ -33,11 +33,6 @@ message Buddy {
 
	optional string iconHash = 7;
 
}
 

	
 
message Conversation {
 
	required string userName = 1;
 
	required string buddyName = 2;
 
}
 

	
 
message ConversationMessage {
 
	required string userName = 1;
 
	required string buddyName = 2;
 
@@ -52,11 +47,9 @@ message WrapperMessage {
 
		TYPE_LOGOUT 		= 4;
 
		TYPE_BUDDY_CHANGED	= 6;
 
		TYPE_BUDDY_REMOVED	= 7;
 
		TYPE_CONV_CREATED	= 8;
 
		TYPE_CONV_WRITE		= 9;
 
		TYPE_CONV_REMOVED	= 10;
 
		TYPE_PING			= 11;
 
		TYPE_PONG			= 12;
 
		TYPE_CONV_MESSAGE	= 8;
 
		TYPE_PING			= 9;
 
		TYPE_PONG			= 10;
 
	}
 
	required Type type = 1;
 
	optional bytes payload = 2;
0 comments (0 inline, 0 general)