Пример #1
0
static void on_chain(LwqqAsyncEvent* caller,LwqqAsyncEvent* called)
{
    called->result = caller->result;
    called->failcode = caller->failcode;
    called->lc = caller->lc;
    lwqq_async_event_finish(called);
}
Пример #2
0
void lwqq_async_add_event_listener(LwqqAsyncEvent* event,LwqqCommand cmd)
{
    LwqqAsyncEvent_* event_ = (LwqqAsyncEvent_*) event;
    if(event == NULL){
        vp_do(cmd,NULL);
        return ;
    }else if(event_->cmd.func== NULL)
        event_->cmd = cmd;
    else
        vp_link(&event_->cmd,&cmd);
    if(event->failcode == LWQQ_CALLBACK_SYNCED)
        lwqq_async_event_finish(event);
}
Пример #3
0
void lwqq_async_add_event_chain(LwqqAsyncEvent* caller,LwqqAsyncEvent* called)
{
    /**indeed caller->lc may be NULL when recursor */
    called->lc = caller->lc;
	LwqqAsyncEvent_* called_ = (LwqqAsyncEvent_*)called;
	//cancel previous chained event
	if(called_->chained){
		LwqqAsyncEvent_* chained_ = (LwqqAsyncEvent_*)called_->chained;
		vp_cancel0(chained_->cmd);
	}
	called_->chained = caller;
    if(caller->failcode == LWQQ_CALLBACK_SYNCED){
        //when sync enabled, caller and called must finished already.
        //so free caller ,and do not trigger anything
        called->result = caller->result;
        called->failcode = caller->failcode;
        lwqq_async_event_finish(caller);
    }else{
        lwqq_async_add_event_listener(caller,_C_(2p,on_chain,caller,called));
	}
}
Пример #4
0
static void async_call_on_chain(LwqqAsyncEvent* ev,void* data)
{
    lwqq_async_event_finish((LwqqAsyncEvent*)data);
}