void OnlineService::persistSaveGame(const char *filename)
{
	assert(has_user);
	assert(has_user_controller);
	assert(state == CONNECTED);

	const size_t pathsize = 255;
	char originalfilepath[pathsize];
	snprintf(originalfilepath, pathsize, "%s%s", get_save_filename_prefix(), filename);
	char encodedfilepath[pathsize];
	snprintf(encodedfilepath, pathsize, "%s%s.txt", get_save_filename_prefix(), filename);

	//printf("encoding %s to %s... ", originalfilepath, encodedfilepath); fflush(stdout);
	ascii85_encode(originalfilepath, encodedfilepath);
	//printf("done\n"); fflush(stdout);

	// read encoded save file
	//printf("reading %s... ", encodedfilepath); fflush(stdout);
	char *save_data = 0;
	bFILE *file = open_file(encodedfilepath, "r");
	if(!file->open_failure())
	{
		size_t filesize = file->file_size();
		save_data = new char[filesize + 1];
		file->read(save_data, filesize);
		save_data[filesize] = 0;
		//printf("read %i bytes\n", filesize); fflush(stdout);
	}
	else
	{
		//printf("failed\n"); fflush(stdout);
	}
	delete file;
	file = 0;

	// write encoded save file to context
	SC_String_h save_data_string;
	SC_Error_t newStringResult = SC_String_New(&save_data_string, save_data);

	SC_Context_h user_context = SC_User_GetContext(scoreloop_user);

	//printf("putting %s in user context... "); fflush(stdout);
	SC_Error_t putContextResult = SC_Context_Put(user_context, filename, save_data_string);
	//printf(putContextResult == SC_OK ? "done\n" : "failed\n"); fflush(stdout);

	//printf("setting user context... "); fflush(stdout);
	SC_Error_t setUserContextResult = SC_User_SetContext(scoreloop_user, user_context);
	//printf(setUserContextResult == SC_OK ? "done\n" : "failed\n"); fflush(stdout);

	//printf("updating user context...\n"); fflush(stdout);
	state = SUBMIT_USER_CONTEXT;
	SC_UserController_UpdateUserContext(scoreloop_user_controller);

	if (save_data)
	{
		delete save_data;
		save_data = 0;
	}
}
Esempio n. 2
0
int main(int argc, char *argv[]) {
	extern char *optarg;
	extern int optind, optopt, opterr;
	int opt, long_optind, decode = 0, ignore_garbage = 0, delims = 0, wrap = 76, y_abbr = 0;
	FILE *fp = stdin;
	char *opts = "dinw:yh";
	struct option long_opts[] = {
		{"decode", no_argument, NULL, 'd'},
		{"ignore-garbage", no_argument, NULL, 'i'},
		{"no-delims", no_argument, NULL, 'n'},
		{"wrap", required_argument, NULL, 'w'},
		{"y-abbr", no_argument, NULL, 'y'},
		{"help", no_argument, NULL, 'h'},
		{NULL, no_argument, NULL, 0}
	};
	opterr = 0;
	while ((opt = getopt_long(argc, argv, opts, long_opts, &long_optind)) != -1) {
		switch (opt) {
			case 'd': decode = 1; break;
			case 'i': ignore_garbage = 1; break;
			case 'n': delims = 0; break;
			case 'w': sscanf(optarg, "%d", &wrap); break;
			case 'y': y_abbr = 1; break;
			case 'h': printf(HELP_TEXT); exit(0);
			case '?':
				eprintf("ascii85: ");
				if (strchr("w", optopt) != NULL)
					eprintf("option '-%c' requires an argument\n", optopt);
				else
					eprintf("invalid option -- %c\n", optopt);
				eprintf(USAGE_TEXT);
				exit(1);
			default: break;
		}
	}
	if (optind == argc - 1 && strcmp(argv[optind], "-")) {
		fp = fopen(argv[optind], "rb");
		if (fp == NULL) {
			eprintf("ascii85: %s: %s\n", argv[optind], strerror(errno));
			exit(1);
		}
	}
	else if (optind > argc) {
		eprintf("ascii85: too many operands or wrong operand order\n");
		eprintf(USAGE_TEXT);
		exit(1);
	}
	if (wrap < 1) wrap = 0;
	if (decode)
		ascii85_decode(fp, delims, ignore_garbage);
	else
		ascii85_encode(fp, delims, wrap, y_abbr);
	fflush(stdout);
	fclose(fp);
	return 0;
}
Esempio n. 3
0
void send_encoded(uint32_t data)
{
	ascii85_t encoded = ascii85_encode(data);
	serial_send(encoded.b, 5);
}