int main(int argc, char *argv[]) { int ret; if (argc != 5) { printf("Usage: %s HOST PORT EVENT_NAME CONFIG_FILE\n", argv[0]); return 1; } settings.smsalarm = 0; //settings.logfname = "-"; log_init(); if (config_parse_file(argv[4], &g_cfg) != 1) { printf("parse config file %s failure", argv[3]); return 1; } mevent_t *evt = mevent_init(argv[3]); if (evt == NULL) { printf("init error\n"); SMS_ALARM("mevent_init error"); return 1; } struct timeval tv; tv.tv_sec = 0; tv.tv_usec = 800000; mevent_add_udp_server(evt, argv[1], atoi(argv[2]), NULL, &tv); ret = mevent_trigger(evt, NULL, REQ_CMD_STATS, FLAGS_SYNC); if (PROCESS_OK(ret)) { hdf_dump(evt->hdfrcv, NULL); } else { int try = 0; redo: sleep(10); ret = mevent_trigger(evt, NULL, REQ_CMD_STATS, FLAGS_SYNC); if (PROCESS_NOK(ret) && try < 3) { try++; goto redo; } if (PROCESS_NOK(ret) && try >= 3) { printf("process failure %d\n", ret); SMS_ALARM("process failure %d, restarted", ret); system("killall -9 mevent; sleep 2; /usr/local/revive/xport/daemon/mevent -c /usr/local/revive/xport/conf/server.hdf"); } else { printf("process temproray error %d, %d", ret, try); } } mevent_free(evt); return 0; }
NEOERR* member_exist_data_get(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses) { mevent_t *evt = hash_lookup(evth, "member"); char *mname; MCS_NOT_NULLB(cgi->hdf, evt); HDF_GET_STR(cgi->hdf, PRE_QUERY".mname", mname); hdf_set_value(evt->hdfsnd, "mname", mname); mevent_trigger(evt, mname, REQ_CMD_MEMBER_GET, FLAGS_SYNC); if (PROCESS_OK(evt->errcode)) { hdf_set_value(cgi->hdf, PRE_OUTPUT".exist", "1"); hdf_set_value(cgi->hdf, PRE_OUTPUT".msg", "用户已被注册"); } else if (evt->errcode == LERR_MEMBER_NEXIST) { hdf_set_value(cgi->hdf, PRE_OUTPUT".exist", "0"); hdf_set_value(cgi->hdf, PRE_OUTPUT".msg", "用户还未注册"); } else { return nerr_raise(evt->errcode, "get member %s info failure %d", evt->ename, evt->errcode); } return STATUS_OK; }
NEOERR* oms_users_data_add(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses) { mevent_t *evt = (mevent_t*)hash_lookup(evth, "aic"); char *aname, *pname, *email; int cost; NEOERR *err; APP_CHECK_ADMIN(); HDF_GET_STR_IDENT(cgi->hdf, PRE_COOKIE".aname", pname); HDF_GET_STR(cgi->hdf, PRE_QUERY".aname", aname); HDF_GET_STR(cgi->hdf, PRE_QUERY".email", email); LEGAL_CK_ANAME(pname); LEGAL_CK_ANAME(aname); LEGAL_CK_EMAIL(email); /* * check */ int state = hdf_get_int_value(evt->hdfrcv, "state", LCS_ST_FREE); if (state <= LCS_ST_FREE) return nerr_raise(LERR_NEEDUP, "%s want to add users %s", pname, aname); else if (state >= LCS_ST_VIP) goto add; /* * chargeback */ cost = hdf_get_int_value(g_cfg, "Cost.account", 0); evt = (mevent_t*)hash_lookup(evth, "bank"); hdf_set_value(evt->hdfsnd, "aname", pname); hdf_set_int_value(evt->hdfsnd, "btype", BANK_OP_ADDACCOUNT); hdf_set_int_value(evt->hdfsnd, "fee", cost); hdf_set_value(evt->hdfsnd, "account", aname); MEVENT_TRIGGER(evt, pname, REQ_CMD_BANK_ADDBILL, FLAGS_SYNC); add: /* * add */ evt = (mevent_t*)hash_lookup(evth, "aic"); hdf_copy(evt->hdfsnd, NULL, hdf_get_obj(cgi->hdf, PRE_QUERY)); hdf_set_value(evt->hdfsnd, "pname", pname); hdf_set_value(evt->hdfsnd, "aname", aname); hdf_set_int_value(evt->hdfsnd, "state", hdf_get_int_value(evt->hdfrcv, "state", LCS_ST_FREE)); hdf_set_value(evt->hdfsnd, "masn", aname); if (PROCESS_NOK(mevent_trigger(evt, aname, REQ_CMD_APPNEW, FLAGS_SYNC))) { char *zpa = NULL; hdf_write_string(evt->hdfrcv, &zpa); mtc_foo("add %s failure %d %s", aname, evt->errcode, zpa); SAFE_FREE(zpa); if (state < LCS_ST_VIP) { /* * roll back */ evt = (mevent_t*)hash_lookup(evth, "bank"); hdf_set_value(evt->hdfsnd, "aname", pname); hdf_set_int_value(evt->hdfsnd, "btype", BANK_OP_ROLLBACK); hdf_set_int_value(evt->hdfsnd, "fee", -cost); hdf_set_valuef(evt->hdfsnd, "remark = 客服帐号 %s 创建失败", aname); if (PROCESS_NOK(mevent_trigger(evt, pname, REQ_CMD_BANK_ADDBILL, FLAGS_SYNC))) { /* * ATTENTION we need pay back to customer manually */ hdf_write_string(evt->hdfrcv, &zpa); mtc_foo("rollback %s failure %d %s", aname, evt->errcode, zpa); SAFE_FREE(zpa); } } return nerr_raise(evt->errcode, "add %s failure %d", aname, evt->errcode); } return STATUS_OK; }