/**
 * FUNCTION NAME: recvCallBack
 *
 * DESCRIPTION: Message handler for different message types
 */
bool MP1Node::recvCallBack(void *env, char *data, int size ) {
	/*
	 * Your code goes here
	*/ 
	
    #pragma pack(push,1)
	
    MessageHdr *mType = reinterpret_cast<MessageHdr*>(data);
    
    switch (mType->msgType) {
        case JOINREQ:
            {

                Address* fromAddr = reinterpret_cast<Address*>(mType + 1);
                long* heartbeat = reinterpret_cast<long*>(fromAddr + 1);
                MemberListEntry* newNode = 
						new MemberListEntry(AddrUtils::getID(*fromAddr), AddrUtils::getPort(*fromAddr), 
						*heartbeat, par->getcurrtime());
                memberNode->memberList.push_back(*newNode);
                
#ifdef DEBUGLOG
                log->logNodeAdd(&memberNode->addr, fromAddr);
#endif                

                sendMemberList(fromAddr, JOINREP);
                
                break;
            }
        case JOINREP:
            {
                memberNode->inGroup = true;
                updateMemberList((unsigned char*) data, size);
                break;
            }
        case GOSSIP:
        	{
        		updateMemberList((unsigned char*) data, size);
        		break;
        	}
        case FAIL:
        	{
                Address* failAddr = reinterpret_cast<Address*>(mType + 1);
        		handleFAILNotification(failAddr);
        		break;
        	}
        default:
            {
                cout << "in case default - " << endl;
                break;
            }
    }
    
    #pragma pack(pop)

    return 1;
}
    void ContactsForVideoConference::allMembersDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles)
    {
        auto allMembersModel = Logic::getCustomSearchModelDLG(false, true);

        allMembers_.Members_.clear();

        int nCount = 0;
        for (int i = 0; i < allMembersModel->rowCount(); i++)
        {
            QModelIndex modelIndex = allMembersModel->index(i);
            Data::DlgState dataContact = qvariant_cast<Data::DlgState>(allMembersModel->data(modelIndex, Qt::DisplayRole));

            Data::ChatMemberInfo memberInfo;
            memberInfo.AimId_ = dataContact.AimId_;
            memberInfo.NickName_ = dataContact.Friendly_;
            allMembers_.Members_.push_back(memberInfo);
            nCount++;
        }

        allMembers_.MembersCount_ = nCount;

        if (allMembers_.MembersCount_ > 0)
        {
            updateMemberList();
            disconnect(connection_);
        }
    }
Exemple #3
0
	void CGuildUnifierClientSkel::updateMemberList_skel(NLNET::IModuleProxy *sender, const NLNET::CMessage &__message)
	{
		H_AUTO(CGuildUnifierClientSkel_updateMemberList_UML);
		uint32	guildId;
			nlRead(__message, serial, guildId);
		std::vector < CGuildMemberDesc >	members;
			nlRead(__message, serialCont, members);
		updateMemberList(sender, guildId, members);
	}
    SelectionContactsForConference::SelectionContactsForConference(
        Logic::ChatMembersModel* _conferenceMembersModel,
        Logic::ChatMembersModel* _otherContactsModel,
        const QString& _labelText,
        QWidget* _parent,
        ConferenceSearchMember& usersSearchModel,
        bool _handleKeyPressEvents)
        : SelectContactsWidget(
            _conferenceMembersModel,
            Logic::MembersWidgetRegim::VIDEO_CONFERENCE,
            _labelText,
            "",
            _parent,
            _handleKeyPressEvents,
            &usersSearchModel),
        conferenceMembersModel_(_conferenceMembersModel),
        videoConferenceMaxUsers_(-1)
    {
        setStyleSheet(Utils::LoadStyle(":/qss/videochat_dialog"));

        mainWidget_ = new QWidget(this);
        auto mainWidgetLayout = Utils::emptyVLayout(mainWidget_);
        mainWidget_->setLayout(mainWidgetLayout);
        mainWidgetLayout->setContentsMargins(0, 0, 0, 0);
        mainWidget_->setContentsMargins(0, 0, 0, 0);

        auto memberWidget = new PureClickedWidget(this);
        memberWidget->setContentsMargins(Utils::scale_value(16), Utils::scale_value(12), Utils::scale_value(20), Utils::scale_value(4));
        auto memberWidgetLayout = Utils::emptyHLayout(memberWidget);
        memberWidget->setLayout(memberWidgetLayout);
        memberWidget->setCursor(Qt::PointingHandCursor);
        memberWidget->setStyleSheet(Utils::LoadStyle(":/qss/videochat_dialog"));

        memberLabel_ = new QLabel(QT_TRANSLATE_NOOP("voip_pages", "MEMBERS"), memberWidget);
        memberLabel_->setContentsMargins(0, 0, 0, 0);
        QPalette p;
        p.setColor(QPalette::Foreground, CommonStyle::getColor(CommonStyle::Color::GREEN_TEXT));
        memberLabel_->setPalette(p);
        memberLabel_->setFont(Fonts::appFontScaled(12, Fonts::FontWeight::Medium));
        memberWidgetLayout->addWidget(memberLabel_);
        memberWidgetLayout->addSpacing(Utils::scale_value(6));

        memberArrowLabel_ = new QPushButton(memberWidget);
        memberArrowLabel_->setStyleSheet("border: 0;");
        memberArrowLabel_->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
        memberArrowLabel_->setStyle(QApplication::style());
        memberArrowLabel_->setContentsMargins(0, 0, 0, 0);

        if (platform::is_apple())
        {
            memberWidgetLayout->addWidget(memberArrowLabel_, 0, Qt::AlignTop);
        }
        else
        {
            memberWidgetLayout->addWidget(memberArrowLabel_);
        }

        memberWidgetLayout->addStretch();

        auto clDelegate  = new Logic::ContactListItemDelegate(this, Logic::MembersWidgetRegim::VIDEO_CONFERENCE, conferenceMembersModel_);
        conferenceContacts_ = CreateFocusableViewAndSetTrScrollBar(this);
        conferenceContacts_->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
        conferenceContacts_->setFrameShape(QFrame::NoFrame);
        conferenceContacts_->setSpacing(0);
        conferenceContacts_->setModelColumn(0);
        conferenceContacts_->setUniformItemSizes(false);
        conferenceContacts_->setBatchSize(50);
        conferenceContacts_->setStyleSheet("background: transparent;");
        conferenceContacts_->setCursor(Qt::PointingHandCursor);
        conferenceContacts_->setMouseTracking(true);
        conferenceContacts_->setAcceptDrops(true);
        conferenceContacts_->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
        conferenceContacts_->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

        conferenceContacts_->setAutoScroll(false);
        conferenceContacts_->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
        conferenceContacts_->setAttribute(Qt::WA_MacShowFocusRect, false);
        conferenceContacts_->setModel(conferenceMembersModel_);
        conferenceContacts_->setItemDelegate(clDelegate);
        conferenceContacts_->setContentsMargins(0, 0, 0, 0);

        auto othersLabel = new QLabel(QT_TRANSLATE_NOOP("voip_pages", "OTHERS"), mainWidget_);
        othersLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
        othersLabel->setContentsMargins(Utils::scale_value(16), Utils::scale_value(12), Utils::scale_value(20), Utils::scale_value(4));
        //Qt ignory our Margins if zoom is 200%. This line fix this problem.
        othersLabel->setMinimumHeight(2 * Utils::scale_value(12) + Utils::scale_value(4));
        QPalette pal;
        pal.setColor(QPalette::Foreground, CommonStyle::getColor(CommonStyle::Color::GREEN_TEXT));
        othersLabel->setPalette(pal);
        othersLabel->setFont(Fonts::appFontScaled(12, Fonts::FontWeight::Medium));

        auto index = globalLayout_->indexOf(searchWidget_);

        mainWidgetLayout->addWidget(memberWidget);
        mainWidgetLayout->addWidget(conferenceContacts_);
        mainWidgetLayout->addWidget(othersLabel);

        contactList_->setIndexWidget(0, mainWidget_);
        usersSearchModel.setWidget(mainWidget_);

        globalLayout_->insertWidget(index + 1, contactList_, 1);

        mainDialog_->addButtonsPair(QT_TRANSLATE_NOOP("popup_window", "CANCEL"), QT_TRANSLATE_NOOP("popup_window", "ADD"), true);

        connect(conferenceContacts_, &FocusableListView::clicked, this, &SelectionContactsForConference::itemClicked, Qt::QueuedConnection);

        // Update other contacts list.
        connect(_otherContactsModel, &Logic::ChatMembersModel::dataChanged, this, [=]() {
            searchModel_->searchPatternChanged(searchModel_->getCurrentPattern());
        });

        connect(&Ui::GetDispatcher()->getVoipController(), &voip_proxy::VoipController::onVoipCallNameChanged,
            this, &SelectionContactsForConference::onVoipCallNameChanged, Qt::DirectConnection);

        connect(&Ui::GetDispatcher()->getVoipController(), &voip_proxy::VoipController::onVoipCallDestroyed,
            this, &SelectionContactsForConference::onVoipCallDestroyed, Qt::DirectConnection);

        connect(memberWidget, &PureClickedWidget::clicked, this, &SelectionContactsForConference::clickConferenceMembers);

        connect(memberArrowLabel_, &QPushButton::clicked, this, &SelectionContactsForConference::clickConferenceMembers);

        clickConferenceMembers();
        updateMemberList();
    }
 ContactsForVideoConference::ContactsForVideoConference(QObject* parent, const Logic::ChatMembersModel& videoConferenceModel) :
     Logic::ChatMembersModel(parent), videoConferenceModel_(videoConferenceModel)
 {
     connect(&videoConferenceModel_, &Logic::ChatMembersModel::dataChanged, this, &ContactsForVideoConference::updateMemberList);
     updateMemberList();
 }
 void SelectionContactsForConference::onVoipCallNameChanged(const voip_manager::ContactsList& _contacts)
 {
     updateMemberList();
 }