示例#1
0
static void tick_handler(struct PgSocket *s, void *arg, enum PgEvent ev, PGresult *res)
{
	struct PgDatabase *db = arg;

	switch (ev) {
	case DB_CONNECT_OK:
		run_pgq_check(db);
		break;
	case DB_RESULT_OK:
		switch (db->state) {
		case DB_TICKER_CHECK_PGQ:
			parse_pgq_check(db, res);
			break;
		case DB_TICKER_CHECK_VERSION:
			parse_version_check(db, res);
			break;
		case DB_TICKER_RUN:
			parse_ticker_result(db, res);
			break;
		default:
			fatal("bad state");
		}
		break;
	case DB_TIMEOUT:
		log_debug("%s: tick timeout", db->name);
		if (!db_connection_valid(db->c_ticker))
			launch_ticker(db);
		else
			run_ticker(db);
		break;
	default:
		db_reconnect(db->c_ticker);
	}
}
示例#2
0
YAAMP_DB *db_connect()
{
	YAAMP_DB *db = new YAAMP_DB;
	db_reconnect(db);

	return db;
}
示例#3
0
void db_query(YAAMP_DB *db, const char *format, ...)
{
	va_list arglist;
	va_start(arglist, format);

	char *buffer = (char *)malloc(YAAMP_SMALLBUFSIZE+strlen(format));
	if(!buffer) return;

	int len = vsprintf(buffer, format, arglist);
	va_end(arglist);

	while(1)
	{
		int res = mysql_query(&db->mysql, buffer);
		if(!res) break;
		res = mysql_errno(&db->mysql);

		stratumlog("SQL ERROR: %d, %s\n", res, mysql_error(&db->mysql));
		if(res != CR_SERVER_GONE_ERROR && res != CR_SERVER_LOST) exit(1);

		db_reconnect(db);
	}

	free(buffer);
}
示例#4
0
int
main(int argc, char **argv)
{
    int i, errCode;
    double magic, rlat, s, c;
    int lat;
    
    g_progname = argv[0];
    for (i=1; i < argc; i++) {
        if(!strcmp(argv[i], "-tchost")) {
            if(++i >= argc) usage();
            db_host = argv[i];
        } else if(!strcmp(argv[i], "-tcport")) {
            if(++i >= argc) usage();
            db_port = tcatoi(argv[i]);
        } else if (!strcmp(argv[i], "-help")) {
            usage();
        }
    }
    
    pi = atan(1.0)*4;
    magic = cos(pi/180.0);
    for (lat = 0; lat < 181; ++lat) {
        rlat = lat*pi/180;
        s = sin(rlat);
        c = cos(rlat);
        longDistance[lat] = radius*acos((s*s)+(magic*c*c));
    }
    
    memset(&db_status, -1, sizeof(db_status));
    simplehttp_init();
    db_reconnect(0, 0, NULL);
    simplehttp_set_cb("/search*", search_cb, NULL);
    simplehttp_set_cb("/put*", put_cb, NULL);
    simplehttp_set_cb("/get*", get_cb, NULL);
    simplehttp_set_cb("/del*", del_cb, NULL);
    simplehttp_set_cb("/distance*", distance_cb, NULL);
    simplehttp_set_cb("/box*", box_cb, NULL);
    simplehttp_main(argc, argv);
    
    if (!tcrdbclose(rdb)) {
        errCode = tcrdbecode(rdb);
        fprintf(stderr, "close error: %s\n", tcrdberrmsg(errCode));
    }
    tcrdbdel(rdb);

    return 0;
}