Пример #1
0
void CResourceAgent::DoRemoteResponse(unsigned int dwId, const string& strResponse)
{
    RA_XLOG(XLOG_DEBUG, "CResourceAgent::%s, ConnId[%d], Response[%s]\n", __FUNCTION__, dwId, strResponse.c_str());

    string strResponseData, strHeaders, strResponseLine;
    size_t nPos1 = strResponse.find("\r\n");
    if (nPos1 != string::npos)
    {
        strResponseLine.assign(strResponse.begin(), strResponse.begin() + nPos1);
        size_t nPos2 = strResponse.find("\r\n\r\n");
        if (nPos2 != string::npos)
        {
            strHeaders.assign(strResponse.begin() + nPos1 + 2, strResponse.begin() + nPos2 + 2);
            string strResponseDataRaw = strResponse.substr(nPos2 + 4);
            boost::iterator_range<string::const_iterator> irBraceLeft = boost::ifind_first(strResponseDataRaw, "{");
            boost::iterator_range<string::const_iterator> irBraceRight = boost::ifind_last(strResponseDataRaw, "}");
            if (!irBraceLeft.empty() && !irBraceRight.empty())
            {
                strResponseData.assign(irBraceLeft.begin(), irBraceRight.begin());
                strResponseData += "}";
            }
        }
    }
    

    map<unsigned int, unsigned int>::iterator iterSeq = m_mapRemoteIdAndSeq.find(dwId);
    if (iterSeq != m_mapRemoteIdAndSeq.end())
    {
        unsigned int dwSeq = iterSeq->second;
        m_mapRemoteSeqAndConn.erase(dwSeq);
        m_mapRemoteIdAndSeq.erase(iterSeq);
        DoResponse(dwSeq, strResponseData, strHeaders, strResponseLine);
    }
}
Пример #2
0
int F200001(TRUSERID *handle, int iRequest, ST_PACK *rPack, int *pRetCode, char *szMsg)
{
    int ret = 0;
    CAccTrans& ats = CAccTrans::GetInst();
    TRANS& trans = ats.trans;
    trans.termid = rPack->lwithdraw_flag;
    trans.cardno = rPack->lvol0;
    ats.SetCardCntAndCardBal(rPack->lvol5, rPack->lvol6, rPack->lvol7);
//	trans.transcode= rPack->lcert_code;
    ret = CheckCardStatus();
    if(ret)
    {
        return ret;
    }
    T_t_cardtrans cardtrans;
    memset(&cardtrans, 0, sizeof(cardtrans));
    ret = CardTransProcess(cardtrans);
    if(ret)
    {
        return ret;
    }
    ret = DoResponse(cardtrans, handle, pRetCode, szMsg);
    if(ret)
    {
        return ret;
    }
    return 0;
}
Пример #3
0
void CResourceAgent::DoPeerResponse(unsigned int dwId, const string& strResponse)
{
    RA_XLOG(XLOG_DEBUG, "CResourceAgent::%s, ConnId[%d], Response[%s]\n", __FUNCTION__, dwId, strResponse.c_str());
    map<unsigned int, unsigned int>::iterator iterSeq = m_mapInnerIdAndSeq.find(dwId);
    if (iterSeq != m_mapInnerIdAndSeq.end())
    {
        unsigned int dwSeq = iterSeq->second;
        map<unsigned int, HpsConnection_ptr>::iterator iterConn = m_mapInnerSeqAndConn.find(dwSeq);
        iterConn->second->OnVirtalClientClosed();
        m_mapInnerIdAndSeq.erase(iterSeq);
        m_mapInnerSeqAndConn.erase(iterConn);

        DoResponse(dwSeq, strResponse, "", "");
    }
}