]> git.tdb.fi Git - libs/core.git/blob - source/event.cpp
Add files
[libs/core.git] / source / event.cpp
1 /*
2 This file is part of libmspframework
3 Copyright © 2006 Mikko Rasa, Mikkosoft Productions
4 Distributed under the LGPL
5 */
6 #include "application.h"
7 #include "event.h"
8
9 using namespace std;
10
11 namespace Msp {
12
13 EventManager::EventManager(Application &a):
14         app(a),
15         next_id(1)
16 {
17         app.add_pollable(&pipe, POLLIN).signal_event.connect(sigc::mem_fun(this, &EventManager::data_available));
18 }
19
20 EventManager::Event &EventManager::create_event()
21 {
22         events.push_back(Event(*this, next_id++));
23         return events.back();
24 }
25
26 void EventManager::data_available(short)
27 {
28         unsigned buf[1024];
29         int len=pipe.read((char *)buf, sizeof(buf));
30         for(unsigned i=0; i*sizeof(unsigned)<(unsigned)len; ++i)
31         {
32                 for(list<Event>::iterator j=events.begin(); j!=events.end(); ++j)
33                         if(j->get_id()==buf[i])
34                                 j->signal_triggered.emit();
35         }
36 }
37
38 void EventManager::Event::trigger()
39 {
40         mgr.pipe.write((char *)&id, sizeof(id));
41 }
42
43 EventManager::Pipe::Pipe()
44 {
45         ::pipe(fd);
46 }
47
48 int EventManager::Pipe::write(char *buf, unsigned len)
49 {
50         return ::write(fd[1], buf, len);
51 }
52
53 int EventManager::Pipe::read(char *buf, unsigned len)
54 {
55         return ::read(fd[0], buf, len);
56 }
57
58 } // namespace Msp