Working IRC room join + proper 110 status code sending

This commit is contained in:
Jan Kaluza 2011-05-18 15:19:56 +02:00
parent 0a33a3100e
commit 6699a898fb
9 changed files with 49 additions and 3 deletions

View file

@ -52,6 +52,8 @@ class IRCNetworkPlugin : public NetworkPlugin {
return;
m_sessions[user]->addAutoJoinChannel(QString::fromStdString(room));
m_sessions[user]->join(QString::fromStdString(room), QString::fromStdString(password));
// update nickname, because we have nickname per session, no nickname per room.
handleRoomChanged(user, room, m_sessions[user]->nick().toStdString());
}
std::map<std::string, MyIrcSession *> m_sessions;

View file

@ -1445,7 +1445,7 @@ DOT_IMAGE_FORMAT = png
# The tag DOT_PATH can be used to specify the path where the dot tool can be
# found. If left blank, it is assumed the dot tool can be found in the path.
DOT_PATH = "/usr/bin"
DOT_PATH = ""
# The DOTFILE_DIRS tag can be used to specify one or more directories that
# contain dot files that are included in the documentation (see the

View file

@ -50,6 +50,8 @@ class NetworkPlugin {
void handleMessage(const std::string &user, const std::string &legacyName, const std::string &message);
void handleRoomChanged(const std::string &user, const std::string &room, const std::string &nickname);
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;

View file

@ -56,6 +56,7 @@ class NetworkPluginServer {
void handleBuddyChangedPayload(const std::string &payload);
void handleConvMessagePayload(const std::string &payload);
void handleParticipantChangedPayload(const std::string &payload);
void handleRoomChangedPayload(const std::string &payload);
void handleUserCreated(User *user);
void handleRoomJoined(User *user, const std::string &room, const std::string &nickname, const std::string &password);

View file

@ -1,5 +1,5 @@
[service]
jid = icq.localhost
jid = localhost
password = secret
server = 127.0.0.1
port = 5222

View file

@ -53,7 +53,11 @@ void Conversation::handleMessage(boost::shared_ptr<Swift::Message> &message) {
}
}
void Conversation::handleParticipantChanged(const std::string &nickname, int flag) {
void Conversation::handleParticipantChanged(const std::string &nick, int flag) {
std::string nickname = nick;
if (nickname.find("@") == 0) {
nickname = nickname.substr(1);
}
Swift::Presence::ref presence = Swift::Presence::create();
presence->setFrom(Swift::JID(m_legacyName, m_conversationManager->getComponent()->getJID().toBare(), nickname));
presence->setTo(m_conversationManager->getUser()->getJID().toString());

View file

@ -119,6 +119,21 @@ void NetworkPlugin::handleParticipantChanged(const std::string &user, const std:
send(message);
}
void NetworkPlugin::handleRoomChanged(const std::string &user, const std::string &r, const std::string &nickname) {
pbnetwork::Room room;
room.set_username(user);
room.set_nickname(nickname);
room.set_room(r);
room.set_password("");
std::string message;
room.SerializeToString(&message);
WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_ROOM_NICKNAME_CHANGED);
send(message);
}
void NetworkPlugin::handleConnected(bool error) {
if (error) {
std::cout << "Connecting error\n";

View file

@ -225,6 +225,24 @@ void NetworkPluginServer::handleParticipantChangedPayload(const std::string &dat
std::cout << payload.nickname() << "\n";
}
void NetworkPluginServer::handleRoomChangedPayload(const std::string &data) {
pbnetwork::Room payload;
if (payload.ParseFromString(data) == false) {
return;
}
User *user = m_userManager->getUser(payload.username());
if (!user)
return;
NetworkConversation *conv = (NetworkConversation *) user->getConversationManager()->getConversation(payload.room());
if (!conv) {
return;
}
conv->setNickname(payload.nickname());
}
void NetworkPluginServer::handleConvMessagePayload(const std::string &data) {
pbnetwork::ConversationMessage payload;
// std::cout << "payload...\n";
@ -292,6 +310,9 @@ void NetworkPluginServer::handleDataRead(boost::shared_ptr<Swift::Connection> c,
case pbnetwork::WrapperMessage_Type_TYPE_PARTICIPANT_CHANGED:
handleParticipantChangedPayload(wrapper.payload());
break;
case pbnetwork::WrapperMessage_Type_TYPE_ROOM_NICKNAME_CHANGED:
handleRoomChangedPayload(wrapper.payload());
break;
default:
return;
}

View file

@ -68,6 +68,7 @@ message WrapperMessage {
TYPE_PART_ROOM = 12;
TYPE_PARTICIPANT_CHANGED = 13;
TYPE_PARTICIPANT_LEFT = 14;
TYPE_ROOM_NICKNAME_CHANGED = 15;
}
required Type type = 1;
optional bytes payload = 2;