Instrument Neutral Distributed Interface INDI 2.2.5
Msg.hpp
Go to the documentation of this file.
1/* INDI Server for protocol version 1.7.
2 * Copyright (C) 2007 Elwood C. Downey <[email protected]>
3 2013 Jasem Mutlaq <[email protected]>
4 2022 Ludovic Pollet
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
9
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public
16 License along with this library; if not, write to the Free Software
17 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18*/
19#pragma once
20
21#include <vector>
22#include <list>
23#include <set>
24
25#include "lilxml.h"
26
27class MsgQueue;
28class SerializedMsg;
31
32class Msg
33{
34 friend class SerializedMsg;
37 private:
38 // Present for sure until message queueing is doned. Prune asap then
39 XMLEle * xmlContent;
40
41 // Present until message was queued.
42 MsgQueue * from;
43
44 int queueSize;
45 bool hasInlineBlobs;
46 bool hasSharedBufferBlobs;
47
48 std::vector<int> sharedBuffers; /* fds of shared buffer */
49
50 // Convertion task and resultat of the task
51 SerializedMsg* convertionToSharedBuffer;
52 SerializedMsg* convertionToInline;
53
54 SerializedMsg * buildConvertionToSharedBuffer();
55 SerializedMsg * buildConvertionToInline();
56
57 bool fetchBlobs(std::list<int> &incomingSharedBuffers);
58
59 void releaseXmlContent();
60 void releaseSharedBuffers(const std::set<int> &keep);
61
62 // Remove resources that can be removed.
63 // Will be called when queuingDone is true and for every change of status from convertionToXXX
64 void prune();
65
66 void releaseSerialization(SerializedMsg * form);
67
68 ~Msg();
69
70 public:
71 /* Message will not be queued anymore. Release all possible resources, incl self */
72 void queuingDone();
73
74 Msg(MsgQueue * from, XMLEle * root);
75
76 static Msg * fromXml(MsgQueue * from, XMLEle * root, std::list<int> &incomingSharedBuffers);
77
97};
Definition Msg.hpp:33
SerializedMsg * serialize(MsgQueue *from)
Definition Msg.cpp:211
static Msg * fromXml(MsgQueue *from, XMLEle *root, std::list< int > &incomingSharedBuffers)
Definition Msg.cpp:175
void queuingDone()
Definition Msg.cpp:170
A little DOM-style library to handle parsing and processing an XML file.