Beispiel #1
0
bool Server::listen(const std::string& ip, int port, std::function<void(std::shared_ptr<Transaction>)> callback)
{
    NNATIVE_FCALL();
    if(!_socket->bind(ip, port)) {
        NNATIVE_DEBUG("failed to bind to ip " << ip << " port " << port);
        return false;
    }

    std::weak_ptr<Server> instanceWeak = getInstance();

    if(!_socket->listen([instanceWeak, callback](native::Error e) {
        NNATIVE_FCALL();
        NNATIVE_DEBUG("start listen");
        if(e)
        {
            // TODO: handle client connection Error
        }
        else
        {
            std::shared_ptr<Transaction> transaction = Transaction::Create(instanceWeak.lock());
            transaction->parse(callback);
        }
        NNATIVE_DEBUG("end listen");
    })) {
        NNATIVE_DEBUG("failed to listen socket");
        return false;
    }

    return true;
}
Beispiel #2
0
void Handle::releaseInstanceHandle() {
    NNATIVE_ASSERT(_instanceHandleCount > 0);
    NNATIVE_ASSERT(_instanceHandle);
    if(--_instanceHandleCount == 0) {
        NNATIVE_DEBUG("reset sinatnce handle");
        _instanceHandle.reset();
    }
    NNATIVE_DEBUG("Remain handle instance count: " << _instanceHandleCount );
}
Beispiel #3
0
bool ServerPlugin::getCallbacksByMethod(const std::string &iMethod,
                                        const std::string &iUriPath,
                                        std::map<size_t, std::list<std::shared_ptr<CallbackDataBase>>> &oCallbacks) {
  NNATIVE_DEBUG("getCallbacksByMethod, method: " << iMethod << ", uri: " << iUriPath)
  MethodCallbackMap::iterator methodsIt = _methodCallbackMap.find(iMethod);
  bool found = false;

  if (methodsIt != _methodCallbackMap.end()) {
    for (std::shared_ptr<CallbackDataBase> callback : methodsIt->second) {
      size_t length;
      if (callback->matchUri(iUriPath, length)) {
        NNATIVE_DEBUG("found uri match, length:" << length << ", pattern: " << callback->uri.getPattern())
        found = true;
        oCallbacks[length].push_back(callback);
      }
    }
  }

  return found;
}