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:
parent
2c526db0f3
commit
2add374fbd
8 changed files with 59 additions and 19 deletions
|
@ -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) {
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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());
|
||||
|
||||
|
|
|
@ -37,6 +37,7 @@ message ConversationMessage {
|
|||
required string userName = 1;
|
||||
required string buddyName = 2;
|
||||
required string message = 3;
|
||||
optional string nickname = 4;
|
||||
}
|
||||
|
||||
message Room {
|
||||
|
|
Loading…
Add table
Reference in a new issue