#pragma once
#ifndef TIPC_SERVER_H
#define TIPC_SERVER_H
//Toonz includes
#include "tcommon.h"
//STL includes
#include <map>
//Qt includes
#include <QString>
#include <QHash>
#include <QSharedMemory>
#include <QLocalServer>
#include <QLocalSocket>
#undef DVAPI
#undef DVVAR
#ifdef TNZCORE_EXPORTS
#define DVAPI DV_EXPORT_API
#define DVVAR DV_EXPORT_VAR
#else
#define DVAPI DV_IMPORT_API
#define DVVAR DV_IMPORT_VAR
#endif
namespace tipc
{
class MessageParser;
//*******************************************************************************
// Server declaration
//*******************************************************************************
/*!
The tipc::Server class is the base server class for inter-process communication
in Toonz-related applications.
A tipc::Server is a specialized QLocalServer which stores header/message-callback
associations to perform message parsing.
*/
class DVAPI Server : public QLocalServer
{
Q_OBJECT
QHash<QString, MessageParser *> m_parsers;
bool m_lock;
public:
Server();
~Server();
void addParser(MessageParser *parser);
void removeParser(QString header);
//!Generic dispatcher function for socket messages.
//!Acceptable socket messages are composed of a header and a body part.
//!The header part, containing an explanation of the message's body, is
//!the first line of the message, and is expected to be at max 1024 chars long.
//!Depending on the header content, the rest of the message is read in
//!specialized message handler functions.
void dispatchSocket(QLocalSocket *socket);
public Q_SLOTS:
//! Receives a client connection to the server and prepares a socket for the connection.
void onNewConnection();
void onError(QLocalSocket::LocalSocketError);
};
} //namespace tipc
#endif //TIPC_SERVER_H