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


C++ Server::GetGameTask方法代码示例

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


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

示例1: operProCheckChange

void GameInterchange::operProCheckChange(TCPConnection::Pointer conn,  interchangeOperPro*  oper)  //确认交易
{

    Server* srv = Server::GetInstance();
    SessionMgr::SessionPointer sp = SessionMgr::Instance()->GetSession();
    boost::shared_ptr<Interchange> interchange = (*sp)[conn].m_interchage;
    TCPConnection::Pointer partnerConn =  interchange->partnerConn;

    SessionMgr::SessionMap::iterator iter = sp->find(partnerConn);
    if(iter == sp->end())    //对方离线 则由服务器发取消交易的包返回
    {
        interchangeOperPro resp;
        resp.operType = Operation_CancelChange;
        conn->Write_all((char*)&resp, sizeof(interchangeOperPro));

        for(std::vector<STR_Goods>::iterator iterIn = interchange->changes.begin(); iterIn != interchange->changes.end();++iterIn)
        {
              (*sp)[conn].m_goodsPosition[iterIn->Position] = POS_NONEMPTY;       //恢复物品原来标志
        }
        interchange->clear();           //清除交易状态  对方离线所以不用处理其状态信息
        srv->free(oper);
        return;
    }

    boost::shared_ptr<Interchange> pInterchange = (*sp)[partnerConn].m_interchage;

    if(!(interchange->isLocked&&pInterchange->isLocked)) //双方没有全都锁定过时候,确认交易请求无效
    {
        interchangeOperPro resp;
        resp.operType = Operation_NotLockedCheckChange;  //回复双方没有全都锁定的包
        conn->Write_all((char*)&resp, sizeof(interchangeOperPro));
        srv->free(oper);
        return;
    }

    interchange->isChangeChecked = true;      //双方都已经锁定过,则置确认交易的标志

    if(!pInterchange->isChangeChecked)   //对方没有确认交易,则只转发包返回
    {
        partnerConn->Write_all((char*)oper, sizeof(interchangeOperPro));
        srv->free(oper);
        return;
    }

    partnerConn->Write_all((char*)oper, sizeof(interchangeOperPro)); //对方也已经确认交易 转发包
    srv->free(oper);

    //计算双方背包空闲位置个数,判断是否满足交换需求
    int emptyPartnerconn = 0;
    int emptyconn = 0;
    for(int i = 1; i <=BAGCAPACITY-1;++i)                     //查找空闲位置 计算空闲位置个数
    {
        if((*sp)[conn].m_goodsPosition[i] == POS_EMPTY)
        {
           emptyconn++;
        }
    }
    for(int i = 1; i <=BAGCAPACITY-1;++i)                     //查找空闲位置 计算空闲位置个数
    {
        if((*sp)[partnerConn].m_goodsPosition[i] == POS_EMPTY)
        {
           emptyPartnerconn++;
        }
    }
    if(interchange->changes.size() + emptyconn < pInterchange->changes.size()
            || pInterchange->changes.size() + emptyPartnerconn < interchange->changes.size())        //如果空闲位置个数不满足交换需求,则取消交易
    {
        interchangeOperPro resp;
        resp.operType = Operation_CancelChange;
        conn->Write_all((char*)&resp, sizeof(interchangeOperPro));
        partnerConn->Write_all((char*)&resp, sizeof(interchangeOperPro));

        for(std::vector<STR_Goods>::iterator iter = interchange->changes.begin(); iter != interchange->changes.end();++iter)
        {
              (*sp)[conn].m_goodsPosition[iter->Position] = POS_NONEMPTY;       //恢复物品原来标志
        }
        for(std::vector<STR_Goods>::iterator iter = pInterchange->changes.begin(); iter != pInterchange->changes.end();++iter)
        {
              (*sp)[partnerConn].m_goodsPosition[iter->Position] = POS_NONEMPTY;       //恢复物品原来标志
        }
        interchange->clear();           //清除交易状态
        pInterchange->clear(); //对方清除交易状态
        return;
    }

    operDoChange(conn);//如果空闲位置个数满足交换需求,则交换两个玩家物品和金钱
    operReport(conn);    //交换完成发送交易报告

    interchangeOperPro resp;
    resp.operType = Operation_Done;
    conn->Write_all((char*)&resp, sizeof(interchangeOperPro));
    partnerConn->Write_all((char*)&resp, sizeof(interchangeOperPro));

    GameTask* t_task = srv->GetGameTask();
    for(std::vector<STR_Goods>::iterator iter = interchange->changes.begin(); iter != interchange->changes.end();++iter)
    {
          t_task->UpdateCollectGoodsTaskProcess(conn,iter->TypeID);
    }
    for(std::vector<STR_Goods>::iterator iter = pInterchange->changes.begin(); iter != pInterchange->changes.end();++iter)
    {
//.........这里部分代码省略.........
开发者ID:hfssf,项目名称:FatCat-Server,代码行数:101,代码来源:gameinterchange.cpp


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