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