result_t TcpServer::asyncRun() { class asyncCall : public AsyncState { public: asyncCall(TcpServer* pThis) : AsyncState(NULL) , m_pThis(pThis) { set(accept); } public: static int32_t accept(AsyncState* pState, int32_t n) { asyncCall* pThis = (asyncCall*)pState; return pThis->m_pThis->run(pThis); } private: obj_ptr<TcpServer> m_pThis; }; if (!m_socket) return CHECK_ERROR(CALL_E_INVALID_CALL); if (m_running) return CHECK_ERROR(CALL_E_INVALID_CALL); AsyncEvent* ac = new asyncCall(this); obj_ptr<Holder> h = new Holder(); h->setJSObject(); h->m_server.Reset(holder()->m_isolate, wrap()); ac->m_ctx.resize(1); ac->m_ctx[0] = h; ac->apost(0); return 0; }