]> git.llucax.com Git - software/eventxx.git/blob - test/prio-test.cpp
README: Add warning about project being abandoned
[software/eventxx.git] / test / prio-test.cpp
1 #include <eventxx>
2 #include <iostream>
3 #include <map>
4 #include <csignal>
5 #include <cstdlib>
6
7 using eventxx::dispatcher;
8
9 #define OSASSERT(func, ...) \
10         if (func(__VA_ARGS__) == -1) { perror(#func "()"); std::exit(1); }
11
12 struct handler
13 {
14         dispatcher& d;
15         int fds[4];
16         std::map< int, eventxx::basic_event* > events;
17         handler(dispatcher& d): d(d)
18         {
19                 OSASSERT(pipe, fds);
20                 OSASSERT(pipe, fds+2);
21         }
22         void add(eventxx::basic_event& e)
23         {
24                 events[e.fd()] = &e;
25         }
26         void operator() (int fd, eventxx::type event)
27         {
28                 char buf[7];
29                 OSASSERT(read, fd, buf, 7);
30                 std::cout << "Read from fd " << fd << ": " << buf << "\n";
31                 d.del(*events[fd]);
32         }
33 };
34
35 int main()
36 {
37         dispatcher d(2);
38         handler h(d);
39         OSASSERT(write, h.fds[1], "hola 1", 7);
40         OSASSERT(write, h.fds[3], "hola 2", 7);
41         eventxx::event< handler > e1(h.fds[0], eventxx::READ, h);
42         eventxx::event< handler > e2(h.fds[2], eventxx::READ, h);
43         h.add(e1);
44         h.add(e2);
45         d.add(e1, 1);
46         d.add(e2, 0);
47         d.dispatch();
48         return 0;
49 }
50