Exemple #1
0
/*--------------------------------------------------------------------------
 Call this once when the server is starting up.
--------------------------------------------------------------------------*/
void servscor_init(dp_t *dp, const char *wmqDirectory)
{
	dp_result_t err;
	char key[dptab_KEY_MAXLEN];
	assoctab_t *types;
	int i;

	/* Create table to receive reports from clients. */
	key[0] = dp_KEY_MYSCORES;
	err = dptab_createTable(dp->dt, &myscoretab, key, 1, 0, NULL, NULL, scores_cb, dp);
	if (err != dp_RES_OK && err != dp_RES_ALREADY) {
		printf("servscor_init: Can't init myscoretab.\n");
		exit(1);
	}

	wmq = wmq_create(wmqDirectory, 1);
	if (!wmq) {
		printf("servscor_init: Can't init wmq in dir:%s.\n", wmqDirectory);
		exit(1);
	}
	err = wmq_seek(wmq, time(NULL), 0);
	if (err != dp_RES_OK) {
		printf("servscor_init: wmq_seek returns err:%d.\n", err);
		exit(1);
	}
	/* set serverTag to our IP addr, including port */
	err = wmq_setServerTag(wmq, dp->dpio->myAdr, dp->dpio->myAdrLen);
	if (err != dp_RES_OK) {
		printf("servscor_init: wmq_setServerTag returns err:%d.\n", err);
		exit(1);
	}
}
Exemple #2
0
/*--------------------------------------------------------------------------
 Call this once when the server is starting up.
--------------------------------------------------------------------------*/
void servscor_init(dp_t *dp)
{
	dp_result_t err;
	char key[dptab_KEY_MAXLEN];
	assoctab_t *types;
	int i;

	/* Create table to receive reports from clients. */
	key[0] = dp_KEY_MYSCORES;
	err = dptab_createTable(dp->dt, &myscoretab, key, 1, 0, NULL, NULL, scores_cb, dp);
	if (err != dp_RES_OK && err != dp_RES_ALREADY) {
		printf("servscor_init: Can't init myscoretab.\n");
		exit(1);
	}

	wmq = wmq_create("wmq", 1);
	if (!wmq) {
		printf("servscor_init: Can't init wmq.\n");
		exit(1);
	}
}
Exemple #3
0
int main()
{
	dp_result_t err;
	time_t now, t_last, t_start = time(NULL);
	wmq_t *wmq;
	wmq_record_t record;
	char buf[1024];
	char *pbuf;
	unsigned short len;
	time_t data;
	long offset_old = 0;
	time_t t_old = t_start;

	record.buf = buf;
	record.buflen = 1024;

	wmq = wmq_create("wmq", 0);
	assert(wmq);

	now = time(0);
	err = wmq_seek(wmq, now, 0);  /* seek to beginning of today */
	assert(!err);

	while (1) {
		char *pbuf = buf;
		char sessid[8];  /* inet only: inetadr(4) port(2) karma(2) */
		dp_species_t sessType;
		dp_uid_t uid;
		dpid_t id;
		scorerep_t *rep;
		scorerep_buf_t repbuf;
		scorerep_player_t *player;
		int score;
		int won;

		err = wmq_get(wmq, &record);
		assert(err == dp_RES_OK || err == dp_RES_EMPTY);

		if (err != dp_RES_OK)
			continue;
		DPRINT(("wmq2mysql: read %d bytes, time:%08x: %s\n", record.datalen, wmq->t, hexstring(record.buf, record.datalen)));
		if (record.datalen < 12) {
			DPRINT(("wmq2mysql: len %d is not big enough for a header!\n", record.datalen));
			exit(1);
		}
		memcpy(sessid, pbuf, 8);
		pbuf += 8;
		sessType = dpMAKESHORT(pbuf[0], pbuf[1]);
		pbuf += 2;
		repbuf.len = dpMAKESHORT(pbuf[0], pbuf[1]);
		pbuf += 2;
		assert(repbuf.len > 0 && repbuf.len < scorerep_MAX_BUFLEN);
		memcpy(repbuf.buf, pbuf, repbuf.len);

		rep = scorerep_create();
		if (rep == NULL) {
			DPRINT(("wmq2mysql: can't create scorerep\n"));
			exit(1);
		}
		err = scorerep_fromBuf(rep, &repbuf);
		if (err != dp_RES_OK) {
			DPRINT(("wmq2mysql: scorerep_fromBuf returns err:%d\n", err));
			exit(1);
		}
		if (!(rep->flags & scorerep_FLAGS_SELFEXIT)) {
			DPRINT(("wmq2mysql: ignoring non-SELFEXIT score\n"));
			continue;
		}
		uid = rep->uid;
		id = rep->id;
		player = (scorerep_player_t *)assoctab_subscript(rep->players, id);
		if (!player) {
			DPRINT(("wmq2mysql: no entry for self (id:%d) in SELFEXIT!\n", id));
			exit(1);
		}
		assert(uid == player->uid);
		DPRINT(("wmq2mysql: read sessType:%d uid:%d (id:%d)\n", sessType, uid, id));
		if (player->bloblen < 3) {
			DPRINT(("wmq2mysql: report has bloblen:%d, no room for standard score + win byte\n", player->bloblen));
			continue;
		}
		score = dpMAKESHORT(player->blob[0], player->blob[1]);
		won = (int)player->blob[2];
		DPRINT(("wmq2mysql: read score:%d won:%d\n", score, won));

	}
	wmq_destroy(wmq);
	return 0;
}