/*
 * SocketConnection.h
 *
 *  Created on: Jun 13, 2018
 *      Author: Andreas Schneider, Johannes Wendel, Jonas Zeunert
 */

#ifndef FLIPPR_CODE_INPUTSOCKETCONNECTION_H
#define FLIPPR_CODE_INPUTSOCKETCONNECTION_H


#include <Poco/Net/TCPServerConnection.h>

#include "input/InputDriver.h"
#include "input/EventHandler.h"
#include "input/Event.h"
#include "utility/BlockingQueue.hpp"

namespace flippR_driver
{
namespace networking
{
namespace input
{

class InputSocketHandler : public Poco::Net::TCPServerConnection, flippR_driver::input::EventHandler
{
public:
  InputSocketHandler(Poco::Net::StreamSocket streamSocket, std::shared_ptr<flippR_driver::input::InputDriver> input_driver);

  void run() override;
  void handle(flippR_driver::input::Event &event) override;

private:
  utility::BlockingQueue<flippR_driver::input::Event> queue;
};

}
}
}

#endif //FLIPPR_CODE_INPUTSOCKETCONNECTION_H
