#include "example_config.h"
#if COMPILE_BASIC_C
#include "knet.h"
void connector_cb(kchannel_ref_t* channel, knet_channel_cb_event_e e) {
char* hello = "hello world";
kstream_t* stream = knet_channel_ref_get_stream(channel);
if (e & channel_cb_event_connect) {
knet_stream_push(stream, hello, 12);
}
}
void client_cb(kchannel_ref_t* channel, knet_channel_cb_event_e e) {
char buffer[32] = {0};
kaddress_t* peer_addr = knet_channel_ref_get_peer_address(channel);
kstream_t* stream = knet_channel_ref_get_stream(channel);
if (e & channel_cb_event_recv) {
knet_stream_pop(stream, buffer, sizeof(buffer));
knet_channel_ref_close(channel);
knet_loop_exit(knet_channel_ref_get_loop(channel));
printf("recv from connector: %s, ip: %s, port: %d\n", buffer,
address_get_ip(peer_addr), address_get_port(peer_addr));
}
}
void acceptor_cb(kchannel_ref_t* channel, knet_channel_cb_event_e e) {
if (e & channel_cb_event_accept) {
knet_channel_ref_set_cb(channel, client_cb);
}
}
int main() {
kloop_t* loop = knet_loop_create();
kchannel_ref_t* connector = knet_loop_create_channel(loop, 8, 1024);
kchannel_ref_t* acceptor = knet_loop_create_channel(loop, 8, 1024);
knet_channel_ref_set_cb(connector, connector_cb);
knet_channel_ref_set_cb(acceptor, acceptor_cb);
knet_channel_ref_accept(acceptor, 0, 80, 10);
knet_channel_ref_connect(connector, "127.0.0.1", 80, 5);
knet_loop_run(loop);
knet_loop_destroy(loop);
return 0;
}
#endif