d1f6c4e95b
* add final specifiers * apply clang-format * fix for macOS
79 lines
1.8 KiB
C++
79 lines
1.8 KiB
C++
#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 final : 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
|