renderer.h 2.52 KB
/**
 * \file renderer.h
 *
 * \author Wesnydy Lima Ribeiro <wesnydy@lavid.ufpb.br>
 * \date 2015
 */

#ifndef RENDERER_H
#define RENDERER_H

#include <list>
#include <queue>
#include <sstream>
#include <stdint.h>
#include <unistd.h>
#include "string.h"
#include "jthread.h"
#include "logging.h"
#include "listenerRenderer.h"
#include <lavidlib/net/InetAddress.h>
#include <lavidlib/net/StreamSocket.h>
#include <lavidlib/net/SocketException.h>
#include <lavidlib/base/RuntimeException.h>
#include <lavidlib/net/UnknownHostException.h>

#define HOST "0.0.0.0"
#define PORT 5555

#define OK_FLAG "OK"
#define END_FLAG "FINALIZE"
#define BADSENTENCE "SENTENCACOMBAIXAQUALIDADE"
#define BADTEXT "ESCOLHER TEXTO CERTO"

#define PATH_RENDERER "vlibras_user/unityVideo/"
#define PATH_SCREENS "vlibras_user/.config/unity3d/LAViD/VLibrasVideoMaker/"

using namespace jthread;
using namespace lavidlib;
using namespace std;
using namespace util;

/** \brief Classe que implementa o Renderizador.
 *
 * \headerfile renderer/src/include/renderer.h
 */
class Renderer : public Thread {

public:
	/** Construtor.
	 *
	 * \param path_contents Abstração do path do vídeo de saída.
	 * \param id Identificação do usuário.
	 */
	Renderer(char* path_Contents, char* id);

	/** Destrutor. */
	~Renderer();

	/** Inicia os processos do renderizador.
	 *
	 * Inicia o servidor do Unity Player,
	 * faz a conexão do Core com o Player
	 * e da inicio ao envio das glosas para
	 * a geração do vídeo de LIBRAS.
	 */
	void initialize();

	/** Adiciona ouvintes do renderer.
     *
     * \param listener O ouvinte a ser registrado.
     */
	void addListener(ListenerRenderer* listener);

	/** Recebe a glosa q será enviada para o player.
	 *
	 * \param glosa A glosa que será enviada.
	 * \param pts A etiqueta de tempo da glosa.
	 */
	void receiveGlosa(string glosa, int64_t pts);

private:
	char* userID;
	char* pathOutVideo;

	StreamSocket* cSocket;
	queue <string> glosaQueue;
	list<ListenerRenderer*>* listeners;

	/** Executa o script que inicia o servidor do Player. */
	void executeServerScript();

	/** Faz a conexão do Core com o Player. */
	void connectToUnityPlayer();

	/** Envia as glosas para o Player. */
	void exportGlosa();

	/** Renderiza o vídeo de LIBRAS. */
	void renderVideo();

	/** Aguarda o Player capturar as screenshots. */
	void waitScreenShots();

	/** Notifica o fim da renderização. */
	void notifyListeners();

	/** Deleta os arquivos temporários */
	void cleanFiles();

	/** Chamado quando a Thread é iniciada. */
	void Run();
};

#endif /* RENDERER_H */