Branch data Line data Source code
1 : :
2 : : #include "gwrl/proactor.h"
3 : :
4 : : gwrl * rl;
5 : : gwpr * pr;
6 : : gwrlsrc_file * rdsrc = NULL;
7 : : gwrlsrc_file * wrsrc = NULL;
8 : : int rdcount = 0;
9 : : int sockets[2];
10 : :
11 : 1900 : void didrd(gwpr * pr, gwpr_io_info * info) {
12 : 1900 : gwpr_buf_free(pr,info->buf);
13 : 1900 : rdcount++;
14 : 1900 : if(rdcount == 100) {
15 : 19 : gwrl_stop(rl);
16 : 19 : }
17 : 1900 : }
18 : :
19 : 1919 : void didwr(gwpr * pr, gwpr_io_info * info) {
20 : 1919 : gwpr_buf_free(pr,info->buf);
21 : 1919 : }
22 : :
23 : 1919 : void write_data(gwrl * rl, gwrlevt * evt) {
24 : 1919 : gwprbuf * buf = gwpr_buf_get_with_data(pr,12,"hello world",12);
25 : 1919 : gwpr_write(pr,wrsrc,buf);
26 : 1919 : }
27 : :
28 : 19 : void timeout(gwrl * rl, gwrlevt * evt) {
29 : 19 : assert(rdcount > 0);
30 : 19 : gwrl_stop(rl);
31 : 19 : }
32 : :
33 : 19 : int main(int argc, char ** argv) {
34 : 19 : socketpair(AF_UNIX,SOCK_STREAM,0,sockets);
35 : :
36 : 19 : rl = gwrl_create();
37 : 19 : pr = gwpr_create(rl);
38 : :
39 : 19 : rdsrc = gwpr_set_fd(pr,sockets[0],NULL);
40 : 19 : wrsrc = gwpr_set_fd(pr,sockets[1],NULL);
41 : :
42 : 19 : gwpr_set_cb(pr,wrsrc,gwpr_did_write_cb_id,&didwr);
43 : 19 : gwpr_set_cb(pr,rdsrc,gwpr_did_read_cb_id,&didrd);
44 : 19 : gwpr_read(pr,rdsrc,gwpr_buf_get(pr,128));
45 : :
46 : 19 : gwrl_set_interval(rl,0,&write_data,NULL);
47 : 19 : gwrl_set_timeout(rl,10000,false,&timeout,NULL);
48 : 19 : gwrl_run(rl);
49 : :
50 : 19 : timeout(rl,NULL);
51 : :
52 : 19 : return 0;
53 : : }
|