working messaging and PM (only if you send it to user@server.tld, so normal PMs doesn't work yet)

This commit is contained in:
Jan Kaluza 2011-05-18 16:25:52 +02:00
parent 2c526db0f3
commit 2add374fbd
8 changed files with 59 additions and 19 deletions

View file

@ -43,7 +43,11 @@ class IRCNetworkPlugin : public NetworkPlugin {
}
void handleMessageSendRequest(const std::string &user, const std::string &legacyName, const std::string &message) {
std::cout << "MESSAGE " << user << " " << legacyName << "\n";
if (m_sessions[user] == NULL)
return;
m_sessions[user]->message(QString::fromStdString(legacyName), QString::fromStdString(message));
std::cout << "SENT\n";
}
void handleJoinRoomRequest(const std::string &user, const std::string &room, const std::string &nickname, const std::string &password) {

View file

@ -116,10 +116,11 @@ void MyIrcBuffer::on_kicked(const QString& origin, const QString& nick, const QS
qDebug() << "kicked:" << receiver() << origin << nick << message;
}
void MyIrcBuffer::on_messageReceived(const QString& origin, const QString& message, Irc::Buffer::MessageFlags flags)
{
qDebug() << "message received:" << receiver() << origin << message
<< (flags & Irc::Buffer::IdentifiedFlag ? "(identified!)" : "(not identified)");
void MyIrcBuffer::on_messageReceived(const QString& origin, const QString& message, Irc::Buffer::MessageFlags flags) {
qDebug() << "message received:" << receiver() << origin << message << (flags & Irc::Buffer::IdentifiedFlag ? "(identified!)" : "(not identified)");
if (!receiver().startsWith("#") && (flags & Irc::Buffer::EchoFlag))
return;
np->handleMessage(user, receiver().toStdString(), message.toStdString(), origin.toStdString());
}
void MyIrcBuffer::on_noticeReceived(const QString& origin, const QString& notice, Irc::Buffer::MessageFlags flags)

View file

@ -41,7 +41,7 @@ class Conversation {
const std::string &getLegacyName() { return m_legacyName; }
void handleMessage(boost::shared_ptr<Swift::Message> &message);
void handleMessage(boost::shared_ptr<Swift::Message> &message, const std::string &nickname = "");
void handleParticipantChanged(const std::string &nickname, int flag);
void setNickname(const std::string &nickname) {
m_nickname = nickname;
@ -57,6 +57,7 @@ class Conversation {
ConversationManager *m_conversationManager;
std::string m_legacyName;
std::string m_nickname;
int m_muc;
};
}

View file

@ -48,7 +48,7 @@ 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);
void handleMessage(const std::string &user, const std::string &legacyName, const std::string &message, const std::string &nickname = "");
void handleRoomChanged(const std::string &user, const std::string &room, const std::string &nickname);

View file

@ -31,26 +31,48 @@ namespace Transport {
Conversation::Conversation(ConversationManager *conversationManager, const std::string &legacyName) : m_conversationManager(conversationManager) {
m_legacyName = legacyName;
m_conversationManager->setConversation(this);
m_muc = -1;
}
Conversation::~Conversation() {
m_conversationManager->unsetConversation(this);
}
void Conversation::handleMessage(boost::shared_ptr<Swift::Message> &message) {
void Conversation::handleMessage(boost::shared_ptr<Swift::Message> &message, const std::string &nickname) {
if (m_muc == -1)
m_muc = message->getType() != Swift::Message::Groupchat;
if (m_muc == 0) {
message->setType(Swift::Message::Groupchat);
}
else {
message->setType(Swift::Message::Chat);
}
if (message->getType() != Swift::Message::Groupchat) {
message->setTo(m_conversationManager->getUser()->getJID().toBare());
Buddy *buddy = m_conversationManager->getUser()->getRosterManager()->getBuddy(m_legacyName);
if (buddy) {
std::cout << m_legacyName << " 222222\n";
message->setFrom(buddy->getJID());
// normal message
if (nickname.empty()) {
Buddy *buddy = m_conversationManager->getUser()->getRosterManager()->getBuddy(m_legacyName);
if (buddy) {
std::cout << m_legacyName << " 222222\n";
message->setFrom(buddy->getJID());
}
else {
std::cout << m_legacyName << " 1111111\n";
// TODO: escape from and setFrom
}
}
// PM message
else {
std::cout << m_legacyName << " 1111111\n";
// TODO: escape from and setFrom
message->setFrom(Swift::JID(nickname, m_conversationManager->getComponent()->getJID().toBare(), "user"));
}
m_conversationManager->getComponent()->getStanzaChannel()->sendMessage(message);
}
else {
message->setTo(m_conversationManager->getUser()->getJID().toString());
message->setFrom(Swift::JID(m_legacyName, m_conversationManager->getComponent()->getJID().toBare(), nickname));
m_conversationManager->getComponent()->getStanzaChannel()->sendMessage(message);
}
}
void Conversation::handleParticipantChanged(const std::string &nick, int flag) {

View file

@ -55,11 +55,12 @@ NetworkPlugin::~NetworkPlugin() {
delete m_factories;
}
void NetworkPlugin::handleMessage(const std::string &user, const std::string &legacyName, const std::string &msg) {
void NetworkPlugin::handleMessage(const std::string &user, const std::string &legacyName, const std::string &msg, const std::string &nickname) {
pbnetwork::ConversationMessage m;
m.set_username(user);
m.set_buddyname(legacyName);
m.set_message(msg);
m.set_nickname(nickname);
std::string message;
m.SerializeToString(&message);

View file

@ -255,14 +255,24 @@ void NetworkPluginServer::handleConvMessagePayload(const std::string &data) {
if (!user)
return;
boost::shared_ptr<Swift::Message> msg(new Swift::Message());
msg->setBody(payload.message());
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());
conv->handleMessage(msg);
else {
// groupchat messages can be created only for conversations initiated from XMPP side, not from legacy network side.
// ie. you can't create Groupchat conversation from legacy network side.
if (!payload.nickname().empty()) {
msg->setType(Swift::Message::Groupchat);
}
}
conv->handleMessage(msg, payload.nickname());
}
void NetworkPluginServer::handleDataRead(boost::shared_ptr<Swift::Connection> c, const Swift::ByteArray &data) {
@ -423,7 +433,7 @@ void NetworkPluginServer::handleUserDestroyed(User *user) {
void NetworkPluginServer::handleMessageReceived(NetworkConversation *conv, boost::shared_ptr<Swift::Message> &msg) {
pbnetwork::ConversationMessage m;
m.set_username(conv->getConversationManager()->getUser()->getUserInfo().uin);
m.set_username(conv->getConversationManager()->getUser()->getJID().toBare());
m.set_buddyname(conv->getLegacyName());
m.set_message(msg->getBody());

View file

@ -37,6 +37,7 @@ message ConversationMessage {
required string userName = 1;
required string buddyName = 2;
required string message = 3;
optional string nickname = 4;
}
message Room {