Esempio n. 1
0
/*
 * Note: amessage__pack and amessage__unpack will allocate memory from Heap,
 * please remember to free them.
 */
void pack_to_file(int argc, char *argv[])
{
	AMessage msg = AMESSAGE__INIT; // AMessage
	void *buf;                     // Buffer to store serialized data
	unsigned len;                  // Length of serialized data
	FILE *fp = NULL;

	msg.a = atoi(argv[1]);
	if (argc == 3) {
		msg.has_b = 1;
		msg.b = atoi(argv[2]);
	}
	len = amessage__get_packed_size(&msg);

	buf = malloc(len);
	amessage__pack(&msg, buf);

	fprintf(stderr, "Writing %d serialized bytes\n", len); // See the length of message

	if (NULL == (fp = fopen(FILE_NAME, "w"))) {
		fprintf(stderr, "fopen failed");
		exit(-1);
	}
	fwrite(buf, len, 1, fp);
	fclose(fp);

	fwrite(buf, len, 1, stdout); // Write to stdout to allow direct command line piping
	free(buf); // Free the allocated serialized buffer
}
Esempio n. 2
0
int main(int argc, const char *argv[])
{
	AMessage msg = AMESSAGE__INIT;
	void *buf;
	unsigned len;
	char test[1000] = {'\0'};

	msg.a = atoi(argv[1]);
	len = amessage__get_packed_size(&msg);
	
	buf = malloc(len);
	amessage__pack(&msg, buf);

	printf("%d\n", len);
	fwrite(buf, len, 1, stdout);
	
	free(buf);
	return 0;	
}
Esempio n. 3
0
int main(int argc, char const *argv[])
{
	bool ok;
	struct ft_context context;
	struct ft_stream sock;

	ft_config.log_verbose = true;
	ft_initialise();
	
	//ft_config.log_trace_mask |= FT_TRACE_ID_STREAM | FT_TRACE_ID_EVENT_LOOP;


	// Initializa context
	ok = ft_context_init(&context);
	if (!ok) return EXIT_FAILURE;

	// Resolve target
	struct addrinfo target_addr;
	struct sockaddr_un un;
	un.sun_family = AF_UNIX;
	snprintf(un.sun_path, sizeof(un.sun_path)-1, "%s", "/tmp/scpb.tmp");

	target_addr.ai_family = AF_UNIX;
	target_addr.ai_socktype = SOCK_STREAM;
	target_addr.ai_protocol = 0;
	target_addr.ai_addr = (struct sockaddr *)&un;
	target_addr.ai_addrlen = sizeof(un);

	ok = ft_stream_connect(&sock, &stream_delegate, &context, &target_addr);
	if (!ok) return EXIT_FAILURE;

	// Prepare a message
	AMessage msg = AMESSAGE__INIT;
	msg.a = 5;
	msg.has_b = 1;
	msg.b = 7;

	struct ft_frame * frame = ft_pool_borrow(&context.frame_pool, FT_FRAME_TYPE_RAW_DATA);
	if (frame == NULL) return EXIT_FAILURE;

	ft_frame_format_simple(frame);
	struct ft_vec * vec = ft_frame_get_vec(frame);
	if (vec == NULL) return EXIT_FAILURE;

	size_t msg_len = amessage__pack(&msg, ft_vec_ptr(vec));
	ft_vec_advance(vec, msg_len);

	ft_frame_flip(frame);

	ok = ft_stream_write(&sock, frame);
	if (!ok) return EXIT_FAILURE;

	ok = ft_stream_cntl(&sock, FT_STREAM_WRITE_SHUTDOWN);
	if (!ok) return EXIT_FAILURE;


	// Enter event loop (will quit when all data are transmitted)
	ft_context_run(&context);

	// Clean up
	ft_context_fini(&context);

	return EXIT_SUCCESS;
}