Beispiel #1
0
bool CIRCSock::OnPartMessage(CPartMessage& Message) {
    const CNick& Nick = Message.GetNick();
    CString sChan = Message.GetTarget();

    CChan* pChan = m_pNetwork->FindChan(sChan);
    bool bDetached = false;
    if (pChan) {
        pChan->RemNick(Nick.GetNick());
        Message.SetChan(pChan);
        IRCSOCKMODULECALL(OnPartMessage(Message), NOTHING);

        if (pChan->IsDetached()) bDetached = true;
    }

    if (Nick.NickEquals(GetNick())) {
        m_pNetwork->DelChan(sChan);
    }

    /*
     * We use this boolean because
     * m_pNetwork->DelChan() will delete this channel
     * and thus we would dereference an
     * already-freed pointer!
     */
    return bDetached;
}
Beispiel #2
0
 void OnPartMessage(CPartMessage& Message) override {
     const CNick& Nick = Message.GetNick();
     CChan& Channel = *Message.GetChan();
     const CString sMessage = Message.GetReason();
     AddBuffer(Channel, t_f("{1} parted: {2}")(Nick.GetNickMask(), sMessage),
               &Message.GetTime(), Message.GetTags());
 }
Beispiel #3
0
 void OnPartMessage(CPartMessage& Message) override {
     const CNick& Nick = Message.GetNick();
     CChan& Channel = *Message.GetChan();
     const CString sMessage = Message.GetReason();
     AddBuffer(Channel, Nick.GetNickMask() + " parted with message: [" +
                            sMessage + "]",
               &Message.GetTime(), Message.GetTags());
 }
Beispiel #4
0
TEST(MessageTest, Part) {
	CPartMessage msg;
	msg.Parse(":nick PART #chan :reason");
	EXPECT_EQ("nick", msg.GetNick().GetNick());
	EXPECT_EQ("PART", msg.GetCommand());
	EXPECT_EQ("#chan", msg.GetTarget());
	EXPECT_EQ("reason", msg.GetReason());
	EXPECT_EQ(CMessage::Type::Part, msg.GetType());

	msg.SetReason("test");
	EXPECT_EQ("test", msg.GetReason());
	EXPECT_EQ(":nick PART #chan :test", msg.ToString());
}