Add input handling class

The Input class depends on the RFB server and V4L2 video classes, so
add outlines for those as well.

Change-Id: I2826f3da78dee10826e378dfc2c773b891da1f03
Signed-off-by: Eddie James <eajames@linux.ibm.com>
diff --git a/ikvm_server.hpp b/ikvm_server.hpp
new file mode 100644
index 0000000..67602b0
--- /dev/null
+++ b/ikvm_server.hpp
@@ -0,0 +1,73 @@
+#pragma once
+
+#include "ikvm_args.hpp"
+#include "ikvm_input.hpp"
+#include "ikvm_video.hpp"
+
+namespace ikvm
+{
+
+/*
+ * @class Server
+ * @brief Manages the RFB server connection and updates
+ */
+class Server
+{
+  public:
+    /*
+     * @struct ClientData
+     * @brief Store necessary data for each connected RFB client
+     */
+    struct ClientData
+    {
+        /*
+         * @brief Constructs ClientData object
+         *
+         * @param[in] s - Number of frames to skip when client connects
+         * @param[in] i - Pointer to Input object
+         */
+        ClientData(int s, Input* i) : skipFrame(s), input(i)
+        {
+        }
+        ~ClientData() = default;
+        ClientData(const ClientData&) = default;
+        ClientData& operator=(const ClientData&) = default;
+        ClientData(ClientData&&) = default;
+        ClientData& operator=(ClientData&&) = default;
+
+        int skipFrame;
+        Input* input;
+    };
+
+    /*
+     * @brief Constructs Server object
+     *
+     * @param[in] args - Reference to Args object
+     * @param[in] i    - Reference to Input object
+     * @param[in] v    - Reference to Video object
+     */
+    Server(const Args& args, Input& i, Video& v);
+    ~Server();
+    Server(const Server&) = default;
+    Server& operator=(const Server&) = default;
+    Server(Server&&) = default;
+    Server& operator=(Server&&) = default;
+
+    /*
+     * @brief Get the Video object
+     *
+     * @return Reference to the Video object
+     */
+    inline const Video& getVideo() const
+    {
+        return video;
+    }
+
+  private:
+    /* @brief Reference to the Input object */
+    Input& input;
+    /* @brief Reference to the Video object */
+    Video& video;
+};
+
+} // namespace ikvm