messages in both directions
This commit is contained in:
parent
4c87620c9f
commit
b62274f1dd
5 changed files with 49 additions and 7 deletions
|
@ -107,6 +107,21 @@ class SpectrumNetworkPlugin : public NetworkPlugin {
|
|||
}
|
||||
}
|
||||
|
||||
void handleMessageSendRequest(const std::string &user, const std::string &legacyName, const std::string &message) {
|
||||
const char *protocol = CONFIG_STRING(config, "service.protocol").c_str();
|
||||
PurpleAccount *account = purple_accounts_find(user.c_str(), protocol);
|
||||
std::cout << user << "\n";
|
||||
if (account) {
|
||||
PurpleConversation *conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, legacyName.c_str(), account);
|
||||
if (!conv) {
|
||||
conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, legacyName.c_str());
|
||||
}
|
||||
gchar *_markup = purple_markup_escape_text(message.c_str(), -1);
|
||||
purple_conv_im_send(PURPLE_CONV_IM(conv), _markup);
|
||||
g_free(_markup);
|
||||
}
|
||||
}
|
||||
|
||||
std::map<PurpleAccount *, std::string> m_accounts;
|
||||
private:
|
||||
Config *config;
|
||||
|
@ -318,11 +333,6 @@ static void conv_write_im(PurpleConversation *conv, const char *who, const char
|
|||
if (flags & PURPLE_MESSAGE_SEND || flags & PURPLE_MESSAGE_SYSTEM)
|
||||
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());
|
||||
|
||||
char *striped = purple_markup_strip_html(message);
|
||||
std::string msg = striped;
|
||||
|
|
|
@ -45,6 +45,10 @@ class Conversation {
|
|||
|
||||
virtual void sendMessage(boost::shared_ptr<Swift::Message> &message) = 0;
|
||||
|
||||
ConversationManager *getConversationManager() {
|
||||
return m_conversationManager;
|
||||
}
|
||||
|
||||
private:
|
||||
ConversationManager *m_conversationManager;
|
||||
std::string m_legacyName;
|
||||
|
|
|
@ -50,11 +50,14 @@ class NetworkPlugin {
|
|||
|
||||
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;
|
||||
virtual void handleMessageSendRequest(const std::string &user, const std::string &legacyName, const std::string &message) = 0;
|
||||
|
||||
|
||||
private:
|
||||
void connect();
|
||||
void handleLoginPayload(const std::string &payload);
|
||||
void handleLogoutPayload(const std::string &payload);
|
||||
void handleConvMessagePayload(const std::string &payload);
|
||||
void handleDataRead(const Swift::ByteArray&);
|
||||
void handleConnected(bool error);
|
||||
void handleDisconnected();
|
||||
|
|
|
@ -146,6 +146,16 @@ void NetworkPlugin::handleLogoutPayload(const std::string &data) {
|
|||
handleLogoutRequest(payload.user(), payload.legacyname());
|
||||
}
|
||||
|
||||
void NetworkPlugin::handleConvMessagePayload(const std::string &data) {
|
||||
pbnetwork::ConversationMessage payload;
|
||||
if (payload.ParseFromString(data) == false) {
|
||||
// TODO: ERROR
|
||||
return;
|
||||
}
|
||||
|
||||
handleMessageSendRequest(payload.username(), payload.buddyname(), payload.message());
|
||||
}
|
||||
|
||||
void NetworkPlugin::handleDataRead(const Swift::ByteArray &data) {
|
||||
long expected_size = 0;
|
||||
m_data += data.toString();
|
||||
|
@ -180,6 +190,9 @@ void NetworkPlugin::handleDataRead(const Swift::ByteArray &data) {
|
|||
case pbnetwork::WrapperMessage_Type_TYPE_PING:
|
||||
sendPong();
|
||||
break;
|
||||
case pbnetwork::WrapperMessage_Type_TYPE_CONV_MESSAGE:
|
||||
handleConvMessagePayload(wrapper.payload());
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -105,6 +105,7 @@ static void handleBuddyPayload(LocalBuddy *buddy, const pbnetwork::Buddy &payloa
|
|||
NetworkPluginServer::NetworkPluginServer(Component *component, Config *config, UserManager *userManager) {
|
||||
m_userManager = userManager;
|
||||
m_config = config;
|
||||
component->m_factory = new NetworkFactory(this);
|
||||
m_pongReceived = false;
|
||||
m_userManager->onUserCreated.connect(boost::bind(&NetworkPluginServer::handleUserCreated, this, _1));
|
||||
m_userManager->onUserDestroyed.connect(boost::bind(&NetworkPluginServer::handleUserDestroyed, this, _1));
|
||||
|
@ -208,6 +209,7 @@ void NetworkPluginServer::handleConvMessagePayload(const std::string &data) {
|
|||
NetworkConversation *conv = (NetworkConversation *) user->getConversationManager()->getConversation(payload.buddyname());
|
||||
if (!conv) {
|
||||
conv = new NetworkConversation(user->getConversationManager(), payload.buddyname());
|
||||
conv->onMessageToSend.connect(boost::bind(&NetworkPluginServer::handleMessageReceived, this, _1, _2));
|
||||
}
|
||||
boost::shared_ptr<Swift::Message> msg(new Swift::Message());
|
||||
msg->setBody(payload.message());
|
||||
|
@ -317,8 +319,18 @@ void NetworkPluginServer::handleUserDestroyed(User *user) {
|
|||
send(m_client, message);
|
||||
}
|
||||
|
||||
void NetworkPluginServer::handleMessageReceived(NetworkConversation *conv, boost::shared_ptr<Swift::Message> &message) {
|
||||
|
||||
void NetworkPluginServer::handleMessageReceived(NetworkConversation *conv, boost::shared_ptr<Swift::Message> &msg) {
|
||||
pbnetwork::ConversationMessage m;
|
||||
m.set_username(conv->getConversationManager()->getUser()->getUserInfo().uin);
|
||||
m.set_buddyname(conv->getLegacyName());
|
||||
m.set_message(msg->getBody());
|
||||
|
||||
std::string message;
|
||||
m.SerializeToString(&message);
|
||||
|
||||
WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_CONV_MESSAGE);
|
||||
|
||||
send(m_client, message);
|
||||
}
|
||||
|
||||
void NetworkPluginServer::sendPing() {
|
||||
|
|
Loading…
Add table
Reference in a new issue