summaryrefslogtreecommitdiffstats
path: root/src/main/cpp/samplePostClient.cpp
blob: a4b2207adedfc4fed9494665bf0517955e34b308 (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
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;
}