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
|
/*******************************************************************************
* ============LICENSE_START=======================================================
* org.onap.dmaap
* ================================================================================
* Copyright © 2017 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* 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.
* ============LICENSE_END=========================================================
*
* ECOMP is a trademark and service mark of AT&T Intellectual Property.
*
*******************************************************************************/
#include <stdio.h>
#include "cambria.h"
void handleResponse ( const CAMBRIA_CLIENT cc, const cambriaSendResponse* response )
{
if ( response )
{
::printf ( "\t%d %s\n", response->statusCode, ( response->statusMessage ? response->statusMessage : "" ) );
::printf ( "\t%s\n", response->responseBody ? response->responseBody : "" );
// destroy the response (or it'll leak)
::cambriaDestroySendResponse ( cc, response );
}
else
{
::fprintf ( stderr, "No response object.\n" );
}
}
int main ( int argc, const char* argv[] )
{
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
// you can send single message in one call...
::printf ( "Sending single message...\n" );
int sent = ::cambriaSimpleSend ( "localhost", 8080, "topic", "streamName",
"{ \"field\":\"this is a JSON formatted alarm\" }" );
::printf ( "\t%d sent\n\n", sent );
// you can also send multiple messages in one call with cambriaSimpleSendMultiple.
// the message argument becomes an array of strings, and you pass an array
// count too.
const char* msgs[] =
{
"{\"format\":\"json\"}",
"<format>xml</format>",
"or whatever. they're just strings."
};
sent = ::cambriaSimpleSendMultiple ( "localhost", 8080, "topic", "streamName", msgs, 3 );
::printf ( "\t%d sent\n\n", sent );
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
// you can also create a client instance to keep around and make multiple
// send requests to. Chunked sending isn't supported right now, so each
// call to cambriaSendMessage results in a full socket open / post / close
// cycle, but hopefully we can improve this with chunking so that subsequent
// sends just push the message into the socket.
// create a client
const CAMBRIA_CLIENT cc = ::cambriaCreateClient ( "localhost", 8080, "topic", CAMBRIA_NATIVE_FORMAT );
if ( !cc )
{
::printf ( "Couldn't create client.\n" );
return 1;
}
////////////////////////////////////////////////////////////////////////////
// send a single message
::printf ( "Sending single message...\n" );
const cambriaSendResponse* response = ::cambriaSendMessage ( cc, "streamName", "{\"foo\":\"bar\"}" );
handleResponse ( cc, response );
////////////////////////////////////////////////////////////////////////////
// send a few messages at once
const char* msgs2[] =
{
"{\"foo\":\"bar\"}",
"{\"bar\":\"baz\"}",
"{\"zoo\":\"zee\"}",
"{\"foo\":\"bar\"}",
"{\"foo\":\"bar\"}",
"{\"foo\":\"bar\"}",
};
unsigned int count = sizeof(msgs2)/sizeof(const char*);
::printf ( "Sending %d messages...\n", count );
response = ::cambriaSendMessages ( cc, "streamName", msgs2, count );
handleResponse ( cc, response );
////////////////////////////////////////////////////////////////////////////
// destroy the client (or it'll leak)
::cambriaDestroyClient ( cc );
return 0;
}
|