当前位置: 首页>>代码示例>>C++>>正文


C++ AbiCollabSessionManager::getSessionFromSessionId方法代码示例

本文整理汇总了C++中AbiCollabSessionManager::getSessionFromSessionId方法的典型用法代码示例。如果您正苦于以下问题:C++ AbiCollabSessionManager::getSessionFromSessionId方法的具体用法?C++ AbiCollabSessionManager::getSessionFromSessionId怎么用?C++ AbiCollabSessionManager::getSessionFromSessionId使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在AbiCollabSessionManager的用法示例。


在下文中一共展示了AbiCollabSessionManager::getSessionFromSessionId方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: s_abicollab_join

bool s_abicollab_join(AV_View* /*v*/, EV_EditMethodCallData* /*d*/)
{
    AbiCollabSessionManager* pManager = AbiCollabSessionManager::getManager();
    UT_return_val_if_fail(pManager, false);
    
    // Get the current view that the user is in.
    XAP_Frame *pFrame = XAP_App::getApp()->getLastFocussedFrame();
    // Get an Accounts dialog instance
    XAP_DialogFactory* pFactory = static_cast<XAP_DialogFactory *>(XAP_App::getApp()->getDialogFactory());
    UT_return_val_if_fail(pFactory, false);
    AP_Dialog_CollaborationJoin* pDialog = static_cast<AP_Dialog_CollaborationJoin*>(
                pFactory->requestDialog(AbiCollabSessionManager::getManager()->getDialogJoinId())
            );
    // Run the dialog
    pDialog->runModal(pFrame);
    // Handle the dialog outcome
    AP_Dialog_CollaborationJoin::tAnswer answer = pDialog->getAnswer();
    BuddyPtr pBuddy = pDialog->getBuddy();
    DocHandle* pDocHandle = pDialog->getDocHandle();
    pFactory->releaseDialog(pDialog);
    
    switch (answer)
    {
        case AP_Dialog_CollaborationJoin::a_OPEN:
            {
                UT_return_val_if_fail(pBuddy && pDocHandle, false);
                // Check if we have already joined this session. If so, then just
                // ignore the request. Otherwise actually join the session.
                AbiCollab* pSession = pManager->getSessionFromSessionId(pDocHandle->getSessionId());
                if (pSession)
                {
                    UT_DEBUGMSG(("Already connected to session, just raising the associated frame\n"));

                    // Just raise a frame that contains this session, instead of
                    // opening the document again
                    XAP_Frame* pFrameForSession = pManager->findFrameForSession(pSession);
                    UT_return_val_if_fail(pFrameForSession, false);
                    pFrameForSession->raise();
                }
                else
                    pManager->joinSessionInitiate(pBuddy, pDocHandle);	
            }
            break;
        case AP_Dialog_CollaborationJoin::a_CANCEL:
            break;
    }	
    
    return true;
}
开发者ID:hfiguiere,项目名称:abiword,代码行数:49,代码来源:AbiCollab_Plugin.cpp

示例2: _handlePacket

void AccountHandler::_handlePacket(Packet* packet, BuddyPtr buddy)
{
    // packet and buddy must always be set
    UT_return_if_fail(packet);
    UT_return_if_fail(buddy);
    
    // as must the session manager
    AbiCollabSessionManager* pManager = AbiCollabSessionManager::getManager();
    UT_return_if_fail(pManager);
    
    // manager didn't handle it, see what we can do
    switch (packet->getClassType()) 
    {			
        case PCT_JoinSessionRequestEvent:
        {
            JoinSessionRequestEvent* jse = static_cast<JoinSessionRequestEvent*>(packet);
            
            // lookup session
            AbiCollab* pSession = pManager->getSessionFromSessionId(jse->getSessionId());
            UT_return_if_fail(pSession);

            // check if this buddy is allowed to access this document
            // TODO: this should be done for every session packet, not just join session packets
            if (!hasAccess(pSession->getAcl(), buddy))
            {
                // we should only reach this point if someone is brute forcing trying
                // out session IDs while not being on the ACL. Ban this uses.
                UT_ASSERT_HARMLESS(UT_SHOULD_NOT_HAPPEN);
                return;
            }
        
            // lookup exporter
            ABI_Collab_Export* pExport = pSession->getExport();
            UT_return_if_fail(pExport);
            
            // lookup adjusts
            const UT_GenericVector<ChangeAdjust *>* pExpAdjusts = pExport->getAdjusts();
            UT_return_if_fail(pExpAdjusts);
        
            PD_Document* pDoc = pSession->getDocument();

            // add this author to the document if we don't recognize him
            UT_sint32 iAuthorId = -1;
            UT_UTF8String buddyDescriptor = buddy->getDescriptor();
            UT_GenericVector<pp_Author*> authors = pDoc->getAuthors();
            UT_DEBUGMSG(("Scanning %d authors to see if we recognize this buddy\n", authors.getItemCount()));
            for (UT_sint32 i = 0; i < authors.getItemCount(); i++)
            {
                pp_Author* pAuthor = authors.getNthItem(i);
                UT_continue_if_fail(pAuthor);

                const gchar* szDescriptor = NULL;
                pAuthor->getProperty("abicollab-descriptor", szDescriptor);
                if (!szDescriptor)
                    continue;

                if (buddyDescriptor != szDescriptor)
                    continue;

                // yay, we know this author!
                iAuthorId = pAuthor->getAuthorInt();
                UT_DEBUGMSG(("Found known author with descriptior %s, id %d!\n", buddyDescriptor.utf8_str(), iAuthorId));
                break;
            }
            
            if (iAuthorId == -1)
            {
                // we don't know this author yet, create a new author object for him
                iAuthorId = pDoc->findFirstFreeAuthorInt();
                pp_Author * pA = pDoc->addAuthor(iAuthorId);
                PP_AttrProp * pPA = pA->getAttrProp();
                pPA->setProperty("abicollab-descriptor", buddyDescriptor.utf8_str());
                pDoc->sendAddAuthorCR(pA);
                UT_DEBUGMSG(("Added a new author to the documument with descriptor %s, id %d\n", buddyDescriptor.utf8_str(), iAuthorId));
            }
            
            // serialize entire document into string
            JoinSessionRequestResponseEvent jsre(jse->getSessionId(), iAuthorId);
            if (AbiCollabSessionManager::serializeDocument(pDoc, jsre.m_sZABW, false /* no base64 */) == UT_OK)
            {
                // set more document properties
                jsre.m_iRev = pDoc->getCRNumber();
                jsre.m_sDocumentId = pDoc->getDocUUIDString();
                if (pDoc->getFilename())
                    jsre.m_sDocumentName = UT_go_basename_from_uri(pDoc->getFilename());
                
                // send to buddy!
                send(&jsre, buddy);
                
                // add this buddy to the collaboration session
                pSession->addCollaborator(buddy);
            }
            break;
        }
        
        case PCT_JoinSessionRequestResponseEvent:
        {
            JoinSessionRequestResponseEvent* jsre = static_cast<JoinSessionRequestResponseEvent*>( packet );
            PD_Document* pDoc = 0;
            if (AbiCollabSessionManager::deserializeDocument(&pDoc, jsre->m_sZABW, false) == UT_OK)
//.........这里部分代码省略.........
开发者ID:tchx84,项目名称:debian-abiword-packages,代码行数:101,代码来源:AccountHandler.cpp


注:本文中的AbiCollabSessionManager::getSessionFromSessionId方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。