blob: e9268319a32eec16c16ca0f5fabd1885eb07b724 [file] [log] [blame]
Steve Kondik55db0532017-06-12 11:27:18 -07001#ifndef MQ_H
2#define MQ_H
3
4#include <queue>
5#include <vector>
6
7#include <utils/RefBase.h>
8#include <utils/Thread.h>
9
10#define EVENT_CLIENT_CONNECT 0
11#define EVENT_CLIENT_GONE 1
12#define EVENT_BUFFER_READY 2
13
14namespace android {
15
16class Event {
17public:
18 Event(unsigned int id, void* data = 0):
19 mId(id),
20 mData(data) {}
21
22 Event(const Event& ev):
23 mId(ev.mId),
24 mData(ev.mData) {}
25
26 unsigned int mId;
27 void* mData;
28};
29
30class EventListener {
31public:
32 virtual ~EventListener() {}
33
34 virtual void onEvent(const Event& event) = 0;
35};
36
37class EventQueue : public RefBase {
38public:
39 EventQueue():
40 mRunning(true) {}
41
42 virtual void await();
43
44 virtual void shutdown();
45
46 virtual void enqueue(const Event& event);
47
48 virtual void flush();
49
50 virtual void addListener(EventListener *listener);
51
52 virtual void removeListener(EventListener *listener);
53
54 virtual ~EventQueue() { }
55
56private:
57 Mutex mMutex;
58 Condition mCondition;
59
60 std::queue<const Event> mQueue;
61 std::vector<EventListener *> mListeners;
62
63 bool mRunning;
64};
65
66};
67#endif