summaryrefslogtreecommitdiffstats
path: root/message.h
blob: acbbefdc66d76ec3fdb02f18ec9cccce20778020 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/*
 * Copyright (C) 2017-2020 Konsulko Group
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef MESSAGE_H
#define MESSAGE_H

#include <memory>
#include <QObject>
#include <QMap>
#include <QVariant>
#include <QJsonDocument>
#include <QJsonObject>

enum class MessageId {
	Invalid = 0,
	Call = 2,
	RetOk = 3,
	RetErr = 4,
	Event = 5,
};

class QWebSocket;

class Message
{
	public:
		Message();
		virtual bool  setAdditionalData(QByteArray data)
		{
			return false;
		}
		QByteArray send(QWebSocket& transport, unsigned int callid);

		inline bool isComplete() const
		{
			return m_init;
		}

		virtual bool getCallId(unsigned int *id) const
		{
			return false;
		}

		static MessageId isValid(QJsonDocument );

		virtual bool isEvent() = 0;
		virtual bool isReply() = 0;

	protected:
		virtual void updateCallId(unsigned int id) {};
		virtual QByteArray serialize(QJsonDocument::JsonFormat format = QJsonDocument::Compact);

		bool m_init;
		QJsonDocument m_jdoc;
};
Q_DECLARE_METATYPE(std::shared_ptr<Message>)

#endif // MESSAGE_H
ontents. */ bool pb_encode_tag_for_field(pb_ostream_t *stream, const pb_field_t *field); /* Encode field header by manually specifing wire type. You need to use this if * you want to write out packed arrays from a callback field. */ bool pb_encode_tag(pb_ostream_t *stream, pb_wire_type_t wiretype, int field_number); /* Encode an integer in the varint format. * This works for bool, enum, int32, int64, uint32 and uint64 field types. */ bool pb_encode_varint(pb_ostream_t *stream, uint64_t value); /* Encode an integer in the zig-zagged svarint format. * This works for sint32 and sint64. */ bool pb_encode_svarint(pb_ostream_t *stream, int64_t value); /* Encode a string or bytes type field. For strings, pass strlen(s) as size. */ bool pb_encode_string(pb_ostream_t *stream, const uint8_t *buffer, size_t size); /* Encode a fixed32, sfixed32 or float value. * You need to pass a pointer to a 4-byte wide C variable. */ bool pb_encode_fixed32(pb_ostream_t *stream, const void *value); /* Encode a fixed64, sfixed64 or double value. * You need to pass a pointer to a 8-byte wide C variable. */ bool pb_encode_fixed64(pb_ostream_t *stream, const void *value); /* Encode a submessage field. * You need to pass the pb_field_t array and pointer to struct, just like with pb_encode(). * This internally encodes the submessage twice, first to calculate message size and then to actually write it out. */ bool pb_encode_submessage(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct); /* --- Internal functions --- * These functions are not terribly useful for the average library user, but * are exported to make the unit testing and extending nanopb easier. */ #ifdef NANOPB_INTERNALS bool pb_enc_varint(pb_ostream_t *stream, const pb_field_t *field, const void *src); bool pb_enc_svarint(pb_ostream_t *stream, const pb_field_t *field, const void *src); bool pb_enc_fixed32(pb_ostream_t *stream, const pb_field_t *field, const void *src); bool pb_enc_fixed64(pb_ostream_t *stream, const pb_field_t *field, const void *src); bool pb_enc_bytes(pb_ostream_t *stream, const pb_field_t *field, const void *src); bool pb_enc_string(pb_ostream_t *stream, const pb_field_t *field, const void *src); #endif /* This function is not recommended for new programs. Use pb_encode_submessage() * instead, it has the same functionality with a less confusing interface. */ bool pb_enc_submessage(pb_ostream_t *stream, const pb_field_t *field, const void *src); #endif