Ejemplo n.º 1
0
void Service::toService(ServiceType serviceType, const char * block, unsigned int len, ServiceCallback cb)
{
    OutOfBand oob;
    if (getServiceType() == STAvatar)
    {
        oob.clientDockerID = getClientDockerID();
        oob.clientSessionID = getClientSessionID();
        oob.clientAvatarID = getServiceID();
    }
    toService(serviceType, InvalidServiceID, oob, block, len, cb);
}
Ejemplo n.º 2
0
bool Service::finishLoad()
{
    setStatus(SS_WORKING);
    if (!isShell())
    {
       if (true)
       {
           LoadServiceNotice notice;
           notice.shellServiceInfos.push_back(ServiceInfo(
               getServiceDockerID(),
               getServiceType(),
               getServiceID(),
               getServiceName(),
               getStatus(),
               getClientDockerID(),
               getClientSessionID()));
           Docker::getRef().broadcastToDockers(notice, false);
       }

        if (getServiceTrait(getServiceType()) == STrait_Multi)
        {
            RefreshServiceToMgrNotice refreshNotice;
            refreshNotice.shellServiceInfos.push_back(ServiceInfo(
                getServiceDockerID(),
                getServiceType(),
                getServiceID(),
                getServiceName(),
                getStatus(),
                getClientDockerID(),
                getClientSessionID()));

            for (auto sd : ServiceDepends)
            {
                if (getServiceTrait(sd.first) == STrait_Single )
                {
                    toService(sd.first, refreshNotice, nullptr);
                }
            }
        }

        LOGI(*this << "local service finish load. service=" << getServiceName() << ", id=" << getServiceID());
    }
    else
    {
        LOGI(*this << "remote service finish load. service=" << getServiceName() << ", id=" << getServiceID());
    }
    
    return true;
}
Ejemplo n.º 3
0
bool Service::finishUnload()
{
    setStatus(SS_DESTROY);
    if (!isShell())
    {
        if (getServiceTrait(getServiceType()) == STrait_Multi)
        {
            RefreshServiceToMgrNotice refreshNotice;
            refreshNotice.shellServiceInfos.push_back(ServiceInfo(
                getServiceDockerID(),
                getServiceType(),
                getServiceID(),
                getServiceName(),
                getStatus(),
                getClientDockerID(),
                getClientSessionID()));
            for (auto sd : ServiceDepends)
            {
                if (getServiceTrait(sd.first) == STrait_Single)
                {
                    toService(sd.first, refreshNotice, nullptr);
                }
            }
        }

        UnloadedServiceNotice notice(getServiceType(), getServiceID());
        Docker::getRef().broadcastToDockers(notice, true);
        LOGI(*this << "local service finish unload. service=" << getServiceName() << ", id=" << getServiceID());
    }
    else
    {
        LOGI(*this << "remote service finish unload. service=" << getServiceName() << ", id=" << getServiceID());
    }
    for (auto tID : _repeatTimers)
    {
        SessionManager::getRef().cancelTimer(tID);
    }
    _repeatTimers.clear();
    return true;
}
Ejemplo n.º 4
0
void OfflineService::onRefreshServiceToMgrNotice(const Tracing & trace, zsummer::proto4z::ReadStream &rs)
{
    RefreshServiceToMgrNotice notice;
    rs >> notice;
    for (const auto & si : notice.shellServiceInfos)
    {
        if (si.status == SS_WORKING && si.clientSessionID != InvalidSessionID)
        {
            for (auto iter = _offlines._data.begin(); iter != _offlines._data.end();)
            {
                auto offline = *iter;
                if (offline.avatarID == si.serviceID && offline.status == 0)
                {
                    toService(STAvatar, offline.avatarID, offline.streamBlob.c_str(), (unsigned int)offline.streamBlob.length());
                    offline.status = 1;
                    _offlines.updateToDB(offline);
                    iter = _offlines._data.erase(iter);
                    continue;
                }
                iter++;
            }
        }
    }
}
Ejemplo n.º 5
0
bool OfflineService::onLoad()
{
    DBQueryReq req("SELECT max(id) FROM `tb_AvatarOffline`");
    toService(STInfoDBMgr, req, std::bind(&OfflineService::onLoadMaxOfflineID, this, _1));
    return true;
}
Ejemplo n.º 6
0
void Service::toService(ServiceType serviceType, const OutOfBand &oob, const char * block, unsigned int len, ServiceCallback cb)
{
    toService(serviceType, InvalidServiceID, oob, block, len, cb);
}