Ejemplo n.º 1
0
void SSDBMultiClient::forgeError(const string& error, std::function<void(const string&)>& callback)
{
    if (callback != nullptr)
    {
        SSDBProtocolRequest err;
        err.appendStr(error);
        err.endl();

        std::shared_ptr<string > response = std::make_shared<string>(err.getResult(), err.getResultLen());
        mLogicFunctorMQ.Push([callback, response](){
            callback(*response);
        });
    }
}
Ejemplo n.º 2
0
void SSDBMultiClient::sendPing(DataSocket::PTR ds)
{
    DBServerUserData* dbUserData = (DBServerUserData*)ds->getUserData();
    if (dbUserData->pingTime > 0)
    {
        SSDBProtocolRequest sr;
        sr.init();
        sr.appendStr("ping");
        sr.endl();

        ds->send(sr.getResult(), sr.getResultLen());

        /*自动发送的ping操作,也要模拟一个完成回调,不然会导致业务上的请求乱序*/
        queue<std::function<void(const string& response)>>* callbacklist = dbUserData->callbacklist;
        callbacklist->push(nullptr);

        dbUserData->pingTimer = mNetService.getTimerMgr().AddTimer(dbUserData->pingTime, [this, ds](){
            sendPing(ds);
        });
    }
}