-
Notifications
You must be signed in to change notification settings - Fork 2
/
MessageStreamJSON.h
140 lines (115 loc) · 3.02 KB
/
MessageStreamJSON.h
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*
Copyright (C) 2012 MoSync AB
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License,
version 2, as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
MA 02110-1301, USA.
*/
/*! \addtogroup WormHoleGroup
* @{
*/
/** @defgroup WormHoleGroup Wormhole Library
* @{
*/
/**
* @file MessageStreamJSON.h
* @author Mikael Kindborg
*
* Class for parsing JSON messages from a WebView.
*/
#ifndef MESSAGE_STREAM_JSON_H_
#define MESSAGE_STREAM_JSON_H_
#include <ma.h>
#include <MAUtil/String.h>
#include <MAUtil/HashMap.h>
#include <NativeUI/WebView.h>
#include <yajl/YAJLDom.h>
namespace Wormhole
{
/**
* Class that parses JSON messages in the form of urls sent from a
* WebView as MAW_EVENT_WEB_VIEW_HOOK_INVOKED events.
*
* Message data used with this class has the format:
*
* ma:[{"messageName":"message1",...},{"messageName":"message2",...},...]
*
* TODO: Add copy constructor and assignment operator.
*/
class MessageStreamJSON
{
public:
/**
* Constructor.
*/
MessageStreamJSON(NativeUI::WebView* webView, MAHandle dataHandle);
/**
* Destructor.
*/
virtual ~MessageStreamJSON();
/**
* Get the WebView widget associated with this message.
* @return Pointer to WebView object.
*/
NativeUI::WebView* getWebView();
/**
* Move to the next message. Initially, the message
* pointer is positioned right before the first message.
* Do a call to this method to get the first message.
*
* @return true if moved to next message, false
* if there are no more messages.
*/
bool next();
/**
* Checks if this message matches the given message name.
*/
bool is(const char* paramName);
/**
* Returns the string value of a message parameter.
* @return The param value as a string.
*/
MAUtil::String getParam(const char* paramName);
/**
* Returns the integer value of a message parameter.
* @return The param value as an int.
*/
int getParamInt(const char* paramName);
/**
* Checks if the given parameter name is in the message.
*/
bool hasParam(const char* paramName);
/**
* Get the node of a parameter in the current message.
*/
MAUtil::YAJLDom::Value* getParamNode(const char* paramName);
/**
* Parse the message. This finds the message name and
* creates a dictionary with the message parameters.
*/
void parse(MAHandle dataHandle);
private:
/**
* The WebView of this message.
*/
NativeUI::WebView* mWebView;
public:
/**
* Table for message parameters.
*/
MAUtil::YAJLDom::Value* mJSONRoot;
/**
* Index of current message.
*/
int mCurrentMessageIndex;
};
} // namespace
#endif
/*! @} */