#ifndef PROTOCOL_H #define PROTOCOL_H #include struct Message { enum MessageType { InvalidMessage, RequestMessage, ResponseMessage, EventMessage }; inline Message(MessageType message = InvalidMessage, quint16 type = -1, quint32 id = -1, const QRectF &rect = QRectF()) : message(message), type(type), id(id), rect(rect) {} quint16 message; quint16 type; quint32 id; QRectF rect; }; struct Request : public Message { enum RequestType { InvalidRequest, CreateRequest, DestroyRequest, ShowRequest, HideRequest, RaiseRequest, LowerRequest, UpdateRequest, SetGeometryRequest, }; inline Request(RequestType type = InvalidRequest, quint32 id = -1, const QRectF &rect = QRectF()) : Message(RequestMessage, type, id, rect) {} }; struct Response : public Message { enum ResponseType { InvalidResponse, CreatedResponse }; inline Response(ResponseType type = InvalidResponse, quint32 id = -1, const QRectF &rect = QRectF()) : Message(ResponseMessage, type, id, rect) {} }; struct Event : public Message { enum EventType { InvalidEvent, ErrorEvent, ShowEvent, HideEvent, PaintEvent, GeometryChangeEvent, MousePressEvent, MouseReleaseEvent, }; inline Event(EventType type = InvalidEvent, quint32 id = -1, const QRectF &rect = QRectF()) : Message(EventMessage, type, id, rect) {} }; inline QDataStream &operator>>(QDataStream &in, Message &message) { in >> message.message; in >> message.type; in >> message.id; in >> message.rect; return in; } inline QDataStream &operator<<(QDataStream &out, const Message &message) { out << message.message; out << message.type; out << message.id; out << message.rect; return out; } #endif//PROTOCOL_H