Exemple #1
0
int connection_t::async_send(const struct conn_id_t& conn_id_, const char* msg_, uint32_t size_)
{
    LOGTRACE((CONNECTION_MODULE, "connection_t::async_send begin"));

    work_service_t* service_ptr = conn_id_.service_ptr;
    if (NULL == service_ptr)
    {
        LOGWARN((CONNECTION_MODULE, "connection_t::async_send service_ptr is NULL, return."));
        return -1;
    }

    if (service_ptr->is_run_on_service())
    {
        //! yunjie: 本线程既直接调用, 传递指针
        sync_send_i(conn_id_, msg_, size_);
    }
    else
    {
        //! yunjie: 为保证数据跨线程安全性, 包装成packet_wrapper_t, post异步消息
        packet_wrapper_t msg_wrapper(msg_, size_);
        service_ptr->post(bindfunc(&connection_t::sync_send_wrapper_i, conn_id_, msg_wrapper));
    }

    LOGTRACE((CONNECTION_MODULE, "connection_t::async_send end"));
    return 0;
}
Exemple #2
0
int f_defun(int arglist){
        int arg1,arg2;
    
    arg1 = car(arglist);
    arg2 = cdr(arglist);
    bindfunc(symname(arg1),LAMBDA,arg2);
    return(T);
}
Exemple #3
0
int f_defun(int arglist){
	int arg1,arg2;
    
    checkarg(LEN3_TEST, "defun", arglist);
    checkarg(SYMBOL_TEST, "defun", car(arglist));
    checkarg(LIST_TEST, "defun", cadr(arglist));
    checkarg(LIST_TEST, "defun" ,caddr(arglist));
    arg1 = car(arglist);
    arg2 = cdr(arglist);
    bindfunc(GET_NAME(arg1),LAMBDA,arg2);
    return(makeT());
}
Exemple #4
0
int connection_t::async_send(const struct conn_id_t& conn_id_, const packet_wrapper_t& msg_)
{
    LOGTRACE((CONNECTION_MODULE, "connection_t::async_send begin"));

    work_service_t* service_ptr = conn_id_.service_ptr;
    if (NULL == service_ptr)
    {
        LOGWARN((CONNECTION_MODULE, "connection_t::async_send service_ptr is NULL, return."));
        return -1;
    }

    service_ptr->post(bindfunc(&connection_t::sync_send_wrapper_i, conn_id_, msg_));

    LOGTRACE((CONNECTION_MODULE, "connection_t::async_send end"));
    return 0;
}
Exemple #5
0
int connection_t::async_close(const struct conn_id_t& conn_id_, bool is_del_from_hb_, conn_event_e close_type_)
{
    LOGTRACE((CONNECTION_MODULE, "connection_t::async_close args-[fd:%d] begin", conn_id_.socket));

    work_service_t* service_ptr = conn_id_.service_ptr;
    if (NULL == service_ptr)
    {
        LOGWARN((CONNECTION_MODULE, "connection_t::async_close error args-[fd:%d]", conn_id_.socket));
        return -1;
    }

    //! yunjie: sync_close_i操作必须放到队列中执行, 因为其中会delete connection_t对象, 所以最后一个参数为false
    service_ptr->post(bindfunc(&connection_t::sync_close_i, conn_id_, is_del_from_hb_, close_type_), NULL, TASK_PRIOR_NORMAL, false);

    LOGTRACE((CONNECTION_MODULE, "connection_t::async_close args-[fd:%d] end", conn_id_.socket));
    return 0;
}
Exemple #6
0
//fsubr(引数を評価しない組込関数)の登録。
void deffsubr(char *symname, int(*func)(int)){
    bindfunc(symname, FSUBR, func);
}
Exemple #7
0
//fsubr(引数を評価しない組込関数)の登録。
void deffsubr(char *symname, int func){
        bindfunc(symname, FSUBR, func);
}