ping/pong, message transfering
This commit is contained in:
parent
43ca88c1bd
commit
bc585576a9
8 changed files with 94 additions and 16 deletions
|
@ -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 =
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -164,5 +164,6 @@ namespace Transport {
|
|||
|
||||
friend class User;
|
||||
friend class UserRegistration;
|
||||
friend class NetworkPluginServer;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue