Beispiel #1
0
// チャンネル離脱ストリーム受信時
void CMainWindow::onPartStream(CStreamEvent<CPartMessage>& event)
{
    CChatServiceBase* service = m_serviceHolder->getService(
            event.getConnectionId());
    if (service != NULL){

        CPartMessage* partLog = event.getServiceLog();
        wxString name = partLog->getUserName();
        wxString channel = partLog->getChannelName();

        // データ更新
        service->onGetPartStream(channel, name);
        service->addLog(event.getServiceLog());

        m_logHolder->pushLog(event.getServiceLog());

        // 表示の更新
        m_view->displayLogs(m_logHolder->getLogs(), m_serviceHolder); // ログペイン
        if ((channel == service->getCurrentChannel() || channel == "")
                && m_serviceHolder->getCurrentServiceId()
                        == event.getConnectionId()){

            m_view->addMessage(event.getServiceLog());
            updateMemberView(event.getConnectionId(),
                    service->getCurrentChannel());
        }
    }
}
Beispiel #2
0
bool CClient::OnPartMessage(CPartMessage& Message) {
    CString sChans = Message.GetTarget();

    VCString vsChans;
    sChans.Split(",", vsChans, false);
    sChans.clear();

    for (CString& sChan : vsChans) {
        bool bContinue = false;
        Message.SetTarget(sChan);
        NETWORKMODULECALL(OnUserPartMessage(Message), m_pUser, m_pNetwork, this,
                          &bContinue);
        if (bContinue) continue;

        sChan = Message.GetTarget();

        CChan* pChan = m_pNetwork ? m_pNetwork->FindChan(sChan) : nullptr;

        if (pChan && !pChan->IsOn()) {
            PutStatusNotice("Removing channel [" + sChan + "]");
            m_pNetwork->DelChan(sChan);
        } else {
            sChans += (sChans.empty()) ? sChan : CString("," + sChan);
        }
    }

    if (sChans.empty()) {
        return true;
    }

    Message.SetTarget(sChans);

    return false;
}
Beispiel #3
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 #4
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 #5
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 #6
0
CConnectionEventBase* CIRCEventFactory::Create(const CIRCResponseData& message)
{
    if (message.m_statusCode == IRCCommand::PRIVMSG){
        return createPrivateMessageEvent(message);
    }
    if (message.m_statusCode == IRCCommand::PART){
        return createPartMessageEvent(message);
    }
    if (message.m_statusCode == IRCCommand::JOIN){
        return createJoinMessageEvent(message);
    }
    if (message.m_statusCode == IRCCommand::TOPIC){
        return createTopicMessageEvent(message);
    }
    if (message.m_statusCode == IRCCommand::QUIT){
        // すべてのチャンネルへのPartEventの作成

        CStreamEvent<CPartMessage>* event = new CStreamEvent<CPartMessage>(myEVT_THREAD_STREAM_CH_PART);
        CPartMessage* log = new CPartMessage();
        log->setServiceId(m_connectionId);
        log->setChannelName("");
        log->setUserName(message.m_username);
        event->setServiceLog(log);
        return event;
    }
    if (message.m_statusCode == IRCCommand::NICK){
        return createNickMessageEvent(message);
    }
    if (message.m_statusCode == IRCCommand::KICK){
        return createKickEvent(message);
    }
    if (message.m_statusCode == IRCCommand::INVITE){
        return createInviteEvent(message);
    }
    if (message.m_statusCode == IRCCommand::NAMES_REPLY){
        addNames(message);
    }
    if (message.m_statusCode == IRCCommand::TOPIC_REPLY){
        return createTopicEvent(message);
    }
    if (message.m_statusCode == IRCCommand::NAMES_REPLY_END){ //ユーザー名羅列終了リプライ
        return createNamesEvent(message);
    }
    if (message.m_statusCode == IRCCommand::INVALID_USERNAME
            || message.m_statusCode == IRCCommand::INVALID_CHANNEL){ // 不適切
            //エラー
        CAuthEvent* event = new CAuthEvent();
        event->setAuthResult(false);
        return event;
    }
    return NULL;

}
Beispiel #7
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());
}
Beispiel #8
0
CConnectionEventBase* CIRCEventFactory::createPartMessageEvent(
        const CIRCResponseData& message) const
{
    // Eventの作成
    CStreamEvent<CPartMessage>* event = new CStreamEvent<CPartMessage>(myEVT_THREAD_STREAM_CH_PART);
    CPartMessage* log = new CPartMessage();
    log->setServiceId(m_connectionId);
    log->setChannelName(message.m_channel);
    log->setUserName(message.m_username);
    event->setServiceLog(log);

    return event;

}
Beispiel #9
0
	void OnPartMessage(CPartMessage& msg) override { vsHooks.push_back("OnPartMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); }