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; }
int f_defun(int arglist){ int arg1,arg2; arg1 = car(arglist); arg2 = cdr(arglist); bindfunc(symname(arg1),LAMBDA,arg2); return(T); }
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()); }
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; }
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; }
//fsubr(引数を評価しない組込関数)の登録。 void deffsubr(char *symname, int(*func)(int)){ bindfunc(symname, FSUBR, func); }
//fsubr(引数を評価しない組込関数)の登録。 void deffsubr(char *symname, int func){ bindfunc(symname, FSUBR, func); }