Files @ 4bf1367cd8a1
Branch filter:

Location: CSY/reowolf/examples/pres_5/bob.c - annotation

Christopher Esterhuyse
decluttered global namespace of consts in C FFI. added examples for interop programming

#include "../../reowolf.h"
#include "../utility.c"


int main(int argc, char** argv) {
	// Create a connector, configured with a protocol defined in a file
	char * pdl = buffer_pdl("./eg_protocols.pdl");
	Arc_ProtocolDescription * pd = protocol_description_parse(pdl, strlen(pdl));
	char logpath[] = "./pres_3_bob.txt";
	Connector * c = connector_new_logging(pd, logpath, sizeof(logpath)-1);
	rw_err_peek(c);

	// ... with 2 outgoing network connections
	PortId ports[4];
	FfiSocketAddr addr = {{127,0,0,1}, 8000};
	connector_add_net_port(c, &ports[0], addr, Polarity_Getter, EndpointPolarity_Active);
	rw_err_peek(c);
	addr.port = 8001;
	connector_add_net_port(c, &ports[1], addr, Polarity_Getter, EndpointPolarity_Active);
	connector_add_port_pair(c, &ports[2], &ports[3]);
	connector_add_component(c, "alt_round_merger", 16, ports, 3);
	rw_err_peek(c);
	
	// Connect with peers (5000ms timeout).
	connector_connect(c, 5000);
	rw_err_peek(c);

	for(int round=0; round<3; round++) {
		printf("----------Round %d\n", round);
		connector_get(c, ports[3]);
		rw_err_peek(c);
		connector_sync(c, 1000);
		rw_err_peek(c);

		size_t msg_len = 0;
		const char * msg_ptr = connector_gotten_bytes(c, ports[3], &msg_len);
		printf("Got msg `%.*s`\n", msg_len, msg_ptr);
	}
	
	printf("Exiting\n");
	protocol_description_destroy(pd);
	connector_destroy(c);
	free(pdl);
	sleep(1.0);
	return 0;
}