Initial import of VNCFlinger
diff --git a/src/EventQueue.h b/src/EventQueue.h
new file mode 100644
index 0000000..e926831
--- /dev/null
+++ b/src/EventQueue.h
@@ -0,0 +1,67 @@
+#ifndef MQ_H
+#define MQ_H
+
+#include <queue>
+#include <vector>
+
+#include <utils/RefBase.h>
+#include <utils/Thread.h>
+
+#define EVENT_CLIENT_CONNECT 0
+#define EVENT_CLIENT_GONE 1
+#define EVENT_BUFFER_READY 2
+
+namespace android {
+
+class Event {
+public:
+    Event(unsigned int id, void* data = 0):
+        mId(id),
+        mData(data) {}
+
+    Event(const Event& ev):
+        mId(ev.mId),
+        mData(ev.mData) {}
+
+    unsigned int mId;
+    void* mData;
+};
+
+class EventListener {
+public:
+    virtual ~EventListener() {}
+
+    virtual void onEvent(const Event& event) = 0;
+};
+
+class EventQueue : public RefBase {
+public:
+    EventQueue():
+        mRunning(true) {}
+
+    virtual void await();
+
+    virtual void shutdown();
+
+    virtual void enqueue(const Event& event);
+
+    virtual void flush();
+
+    virtual void addListener(EventListener *listener);
+
+    virtual void removeListener(EventListener *listener);
+
+    virtual ~EventQueue() { }
+
+private:
+    Mutex mMutex;
+    Condition mCondition;
+
+    std::queue<const Event> mQueue;
+    std::vector<EventListener *> mListeners;
+
+    bool mRunning;
+};
+
+};
+#endif