int NlsNodeManager::addRequestIntoInfoWithInstance()

in nlsCppSdk/transport/nodeManager.cpp [51:118]


int NlsNodeManager::addRequestIntoInfoWithInstance(void* request,
                                                   void* instance) {
  MUTEX_LOCK(_mtxNodeManager);

  if (instance == NULL) {
    LOG_ERROR("instance is nullptr.");
    MUTEX_UNLOCK(_mtxNodeManager);
    return -(EventClientEmpty);
  }
  if (request == NULL) {
    LOG_ERROR("request is nullptr.");
    MUTEX_UNLOCK(_mtxNodeManager);
    return -(RequestEmpty);
  }

  INlsRequest* nls_request = static_cast<INlsRequest*>(request);
  ConnectNode* node = static_cast<ConnectNode*>(nls_request->getConnectNode());
  if (node == NULL) {
    LOG_ERROR("node is nullptr.");
    MUTEX_UNLOCK(_mtxNodeManager);
    return -(NodeEmpty);
  }

  std::map<void*, NodeInfo>::iterator iter;
  iter = this->_infoByRequest.find(request);
  if (iter != this->_infoByRequest.end()) {
    NodeInfo& info = iter->second;
    LOG_WARN("request:%p has added in NodeInfo, status:%s node:%p", request,
             this->getNodeStatusString(info.status).c_str(), info.node);
    if (info.status > NodeStatusCreated && info.status < NodeStatusReleased) {
      LOG_ERROR("request:%p is conflicted in NodeInfo, status:%s node:%p",
                info.request, this->getNodeStatusString(info.status).c_str(),
                info.node);
      MUTEX_UNLOCK(_mtxNodeManager);
      return -(InvalidRequest);
    } else {
      if (info.instance != instance) {
        LOG_ERROR("the request:%p of instance(%p) isnot in instance(%p)",
                  info.request, instance, info.instance);
        MUTEX_UNLOCK(_mtxNodeManager);
        return -(InvalidRequest);
      }

      LOG_WARN("request:%p cover old request in NodeInfo, status:%s node:%p",
               info.request, this->getNodeStatusString(info.status).c_str(),
               info.node);
      info.request = request;
      info.node = node;
      info.instance = instance;
      info.uuid = node->getNodeUUID();
      info.status = NodeStatusCreated;
      this->_requestListByNode[node] = request;
    }
  } else {
    NodeInfo info;
    info.request = request;
    info.node = node;
    info.instance = instance;
    info.uuid = node->getNodeUUID();
    info.status = NodeStatusCreated;
    this->_infoByRequest.insert(std::make_pair(request, info));
    this->_requestListByNode.insert(std::make_pair(node, request));
    LOG_DEBUG("add request(%p) node(%p) into NodeInfo", request, node);
  }

  MUTEX_UNLOCK(_mtxNodeManager);
  return Success;
}