Example #1
0
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;
}