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; }
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 ); }
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; }