BLPAPI C++ 3.26.5
Loading...
Searching...
No Matches
blpapi_session.h
Go to the documentation of this file.
1/* Copyright 2012. Bloomberg Finance L.P.
2 *
3 * Permission is hereby granted, free of charge, to any person obtaining a copy
4 * of this software and associated documentation files (the "Software"), to
5 * deal in the Software without restriction, including without limitation the
6 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7 * sell copies of the Software, and to permit persons to whom the Software is
8 * furnished to do so, subject to the following conditions: The above
9 * copyright notice and this permission notice shall be included in all copies
10 * or substantial portions of the Software.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
13 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
16 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
17 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
18 * IN THE SOFTWARE.
19 */
20
35
36#ifndef INCLUDED_BLPAPI_SESSION
37#define INCLUDED_BLPAPI_SESSION
38
66
67#ifndef INCLUDED_BLPAPI_ABSTRACTSESSION
69#endif
70
71#ifndef INCLUDED_BLPAPI_CALL
72#include <blpapi_call.h>
73#endif
74
75#ifndef INCLUDED_BLPAPI_CORRELATIONID
77#endif
78
79#ifndef INCLUDED_BLPAPI_DEFS
80#include <blpapi_defs.h>
81#endif
82
83#ifndef INCLUDED_BLPAPI_EVENT
84#include <blpapi_event.h>
85#endif
86
87#ifndef INCLUDED_BLPAPI_EVENTDISPATCHER
89#endif
90
91#ifndef INCLUDED_BLPAPI_IDENTITY
92#include <blpapi_identity.h>
93#endif
94
95#ifndef INCLUDED_BLPAPI_REQUEST
96#include <blpapi_request.h>
97#endif
98
99#ifndef INCLUDED_BLPAPI_REQUESTTEMPLATE
101#endif
102
103#ifndef INCLUDED_BLPAPI_SERVICE
104#include <blpapi_service.h>
105#endif
106
107#ifndef INCLUDED_BLPAPI_SESSIONOPTIONS
109#endif
110
111#ifndef INCLUDED_BLPAPI_SUBSCRIPTIONLIST
113#endif
114
115#ifndef INCLUDED_BLPAPI_TYPES
116#include <blpapi_types.h>
117#endif
118
119#include <stddef.h>
120
121#ifdef __cplusplus
122extern "C" {
123#endif
124
126
129
130typedef void (*blpapi_EventHandler_t)(
131 blpapi_Event_t *event, blpapi_Session_t *session, void *userData);
132
133typedef void (*blpapi_SubscriptionPreprocessErrorHandler_t)(
134 const blpapi_CorrelationId_t *correlationId,
135 const char *subscriptionString,
136 int errorCode,
137 const char *errorDescription,
138 void *userData);
139
140BLPAPI_EXPORT
141blpapi_Session_t *blpapi_Session_create(blpapi_SessionOptions_t *parameters,
142 blpapi_EventHandler_t handler,
143 blpapi_EventDispatcher_t *dispatcher,
144 void *userData);
145
146BLPAPI_EXPORT
147void blpapi_Session_destroy(blpapi_Session_t *session);
148
149BLPAPI_EXPORT
150int blpapi_Session_start(blpapi_Session_t *session);
151
152BLPAPI_EXPORT
153int blpapi_Session_startAsync(blpapi_Session_t *session);
154
155BLPAPI_EXPORT
156int blpapi_Session_stop(blpapi_Session_t *session);
157
158BLPAPI_EXPORT
159int blpapi_Session_stopAsync(blpapi_Session_t *session);
160
161BLPAPI_EXPORT
162int blpapi_Session_nextEvent(blpapi_Session_t *session,
163 blpapi_Event_t **eventPointer,
164 unsigned int timeoutInMilliseconds);
165
166BLPAPI_EXPORT
167int blpapi_Session_tryNextEvent(
168 blpapi_Session_t *session, blpapi_Event_t **eventPointer);
169
170BLPAPI_EXPORT
171int blpapi_Session_subscribe(blpapi_Session_t *session,
172 const blpapi_SubscriptionList_t *subscriptionList,
173 const blpapi_Identity_t *handle,
174 const char *requestLabel,
175 int requestLabelLen);
176
177BLPAPI_EXPORT
178int blpapi_Session_subscribeEx(blpapi_Session_t *session,
179 const blpapi_SubscriptionList_t *subscriptionList,
180 const blpapi_Identity_t *handle,
181 const char *requestLabel,
182 int requestLabelLen,
183 blpapi_SubscriptionPreprocessErrorHandler_t errorHandler,
184 void *userData);
185
186BLPAPI_EXPORT
187int blpapi_Session_resubscribe(blpapi_Session_t *session,
188 const blpapi_SubscriptionList_t *resubscriptionList,
189 const char *requestLabel,
190 int requestLabelLen);
191
192BLPAPI_EXPORT
193int blpapi_Session_resubscribeEx(blpapi_Session_t *session,
194 const blpapi_SubscriptionList_t *resubscriptionList,
195 const char *requestLabel,
196 int requestLabelLen,
197 blpapi_SubscriptionPreprocessErrorHandler_t errorHandler,
198 void *userData);
199
200BLPAPI_EXPORT
201int blpapi_Session_resubscribeWithId(blpapi_Session_t *session,
202 const blpapi_SubscriptionList_t *resubscriptionList,
203 int resubscriptionId,
204 const char *requestLabel,
205 int requestLabelLen);
206
207BLPAPI_EXPORT
208int blpapi_Session_resubscribeWithIdEx(blpapi_Session_t *session,
209 const blpapi_SubscriptionList_t *resubscriptionList,
210 int resubscriptionId,
211 const char *requestLabel,
212 int requestLabelLen,
213 blpapi_SubscriptionPreprocessErrorHandler_t errorHandler,
214 void *userData);
215
216BLPAPI_EXPORT
217int blpapi_Session_unsubscribe(blpapi_Session_t *session,
218 const blpapi_SubscriptionList_t *unsubscriptionList,
219 const char *requestLabel,
220 int requestLabelLen);
221
222BLPAPI_EXPORT
223int blpapi_Session_cancel(blpapi_Session_t *session,
224 const blpapi_CorrelationId_t *correlationIds,
225 size_t numCorrelationIds,
226 const char *requestLabel,
227 int requestLabelLen);
228
229BLPAPI_EXPORT
230int blpapi_Session_setStatusCorrelationId(blpapi_Session_t *session,
231 const blpapi_Service_t *service,
232 const blpapi_Identity_t *identity,
233 const blpapi_CorrelationId_t *correlationId);
234
235BLPAPI_EXPORT
236int blpapi_Session_sendRequest(blpapi_Session_t *session,
237 const blpapi_Request_t *request,
238 blpapi_CorrelationId_t *correlationId,
239 blpapi_Identity_t *identity,
240 blpapi_EventQueue_t *eventQueue,
241 const char *requestLabel,
242 int requestLabelLen);
243
244BLPAPI_EXPORT
245int blpapi_Session_sendRequestTemplate(blpapi_Session_t *session,
246 const blpapi_RequestTemplate_t *requestTemplate,
247 blpapi_CorrelationId_t *correlationId);
248
249BLPAPI_EXPORT
250int blpapi_Session_createSnapshotRequestTemplate(
251 blpapi_RequestTemplate_t **requestTemplate,
252 blpapi_Session_t *session,
253 const char *subscriptionString,
254 const blpapi_Identity_t *identity,
255 blpapi_CorrelationId_t *correlationId);
256
257BLPAPI_EXPORT
258int blpapi_Session_sendAuthorizationRequest(blpapi_Session_t *session,
259 const blpapi_Request_t *request,
260 blpapi_Identity_t *identity,
261 blpapi_CorrelationId_t *correlationId,
262 blpapi_EventQueue_t *eventQueue,
263 const char *requestLabel,
264 int requestLabelLen);
265
266BLPAPI_EXPORT
267int blpapi_Session_openService(
268 blpapi_Session_t *session, const char *serviceName);
269
270BLPAPI_EXPORT
271int blpapi_Session_openServiceAsync(blpapi_Session_t *session,
272 const char *serviceName,
273 blpapi_CorrelationId_t *correlationId);
274
275BLPAPI_EXPORT
276int blpapi_Session_generateToken(blpapi_Session_t *session,
277 blpapi_CorrelationId_t *correlationId,
278 blpapi_EventQueue_t *eventQueue);
279
280BLPAPI_EXPORT
281int blpapi_Session_getService(blpapi_Session_t *session,
282 blpapi_Service_t **service,
283 const char *serviceName);
284
285// Deprecated: Use blpapi_Session_createIdentity instead
286BLPAPI_EXPORT
287blpapi_UserHandle_t *blpapi_Session_createUserHandle(
288 blpapi_Session_t *session);
289
290BLPAPI_EXPORT
291blpapi_Identity_t *blpapi_Session_createIdentity(blpapi_Session_t *session);
292
293BLPAPI_EXPORT
294blpapi_AbstractSession_t *blpapi_Session_getAbstractSession(
295 blpapi_Session_t *session);
296
297BLPAPI_EXPORT
298blpapi_SubscriptionIterator_t *blpapi_SubscriptionItr_create(
299 blpapi_Session_t *session);
300
301BLPAPI_EXPORT
302void blpapi_SubscriptionItr_destroy(blpapi_SubscriptionIterator_t *iterator);
303
304BLPAPI_EXPORT
305int blpapi_SubscriptionItr_next(blpapi_SubscriptionIterator_t *iterator,
306 const char **subscriptionString,
307 blpapi_CorrelationId_t *correlationId,
308 int *status);
309
310BLPAPI_EXPORT
311int blpapi_SubscriptionItr_isValid(
312 const blpapi_SubscriptionIterator_t *iterator);
313
316
317#ifdef __cplusplus
318}
319
320#include <cassert>
321
322#ifndef INCLUDED_CSTRING
323#include <cstring> // for std::memset
324#define INCLUDED_CSTRING
325#endif
326
333
334namespace BloombergLP {
335namespace blpapi {
336
337class Session;
338
351
352 public:
353 virtual ~EventHandler() = 0;
354
355 virtual bool processEvent(const Event& event, Session *session) = 0;
366};
367
368extern "C" void blpapi_eventHandlerAdapter(
369 blpapi_Event_t *event, blpapi_Session_t *, void *userData);
375
377 enum Code {
379 = BLPAPI_SUBSCRIPTIONPREPROCESS_INVALID_SUBSCRIPTION_STRING,
381
383 = BLPAPI_SUBSCRIPTIONPREPROCESS_CORRELATIONID_ERROR
388 };
389
392 int code;
393 /*
394 * The error code that is one of <code>Code</code> enum values.
395 */
396 std::string description;
397
408};
409
410inline std::ostream& operator<<(
411 std::ostream& os, const SubscriptionPreprocessError& error)
412{
413 os << "{" << "correlationId: " << error.correlationId
414 << ", subscriptionString: " << error.subscriptionString << ", code: ";
415 if (error.code
417 os << "InvalidSubscriptionString";
418 } else if (error.code
420 os << "CorrelationIdError";
421 } else {
422 os << "UNKNOWN";
423 }
424
425 os << "(" << error.code << ")";
426 os << ", description: " << error.description << "}";
427
428 return os;
429}
430
432 const blpapi_CorrelationId_t *correlationId,
433 const char *subscriptionString,
434 int errorCode,
435 const char *description,
436 void *userData)
437{
438 typedef std::vector<SubscriptionPreprocessError> Errors;
439 Errors *errors = reinterpret_cast<Errors *>(userData);
440 errors->emplace_back(CorrelationId(*correlationId),
441 subscriptionString,
442 errorCode,
443 description);
444}
445
467
468typedef std::vector<SubscriptionPreprocessError> SubscriptionPreprocessErrors;
469
517class Session : public AbstractSession {
518
519 public:
521
522 private:
523 blpapi_Session_t *d_handle_p;
524 EventHandler *d_eventHandler_p;
525
526 // NOT IMPLEMENTED
527 Session(const Session&);
528 Session& operator=(const Session&);
529
530 friend void blpapi_eventHandlerAdapter(
531 blpapi_Event_t *event, blpapi_Session_t *, void *userData);
532
533 public:
534 /*
535 * The possible statuses a subscription may be in.
536 */
538 UNSUBSCRIBED = BLPAPI_SUBSCRIPTIONSTATUS_UNSUBSCRIBED,
540 SUBSCRIBING = BLPAPI_SUBSCRIPTIONSTATUS_SUBSCRIBING,
542 SUBSCRIBED = BLPAPI_SUBSCRIPTIONSTATUS_SUBSCRIBED,
544 CANCELLED = BLPAPI_SUBSCRIPTIONSTATUS_CANCELLED,
546 PENDING_CANCELLATION = BLPAPI_SUBSCRIPTIONSTATUS_PENDING_CANCELLATION
547 };
548
549 explicit Session(const SessionOptions& options = SessionOptions(),
550 EventHandler *eventHandler = 0,
551 EventDispatcher *eventDispatcher = 0);
584
585 explicit Session(blpapi_Session_t *handle);
586
587 virtual ~Session();
591
592 virtual bool start();
602
603 virtual bool startAsync();
613
614 virtual void stop();
625
626 virtual void stopAsync();
637
638 virtual Event nextEvent(int timeout = 0);
653
654 virtual int tryNextEvent(Event *event);
661
662 virtual void subscribe(const SubscriptionList& subscriptionList,
663 const Identity& identity,
664 const char *requestLabel = 0,
665 int requestLabelLen = 0);
678
680 const SubscriptionList& subscriptionList,
681 const Identity& identity,
683 const char *requestLabel = 0,
684 int requestLabelLen = 0);
703
704 virtual void subscribe(const SubscriptionList& subscriptionList,
705 const char *requestLabel = 0,
706 int requestLabelLen = 0);
721
723 const SubscriptionList& subscriptionList,
725 const char *requestLabel = 0,
726 int requestLabelLen = 0);
746
747 virtual void unsubscribe(const SubscriptionList& subscriptionList);
767
768 virtual void resubscribe(const SubscriptionList& subscriptions);
781
783 const SubscriptionList& subscriptions,
799
800 virtual void resubscribe(const SubscriptionList& subscriptions,
801 const char *requestLabel,
802 int requestLabelLen);
819
821 const SubscriptionList& subscriptions,
822 const char *requestLabel,
823 int requestLabelLen,
843
844 virtual void resubscribe(
845 const SubscriptionList& subscriptions, int resubscriptionId);
859
861 const SubscriptionList& subscriptions,
862 int resubscriptionId,
879
880 virtual void resubscribe(const SubscriptionList& subscriptions,
881 int resubscriptionId,
882 const char *requestLabel,
883 int requestLabelLen);
901
903 const SubscriptionList& subscriptions,
904 int resubscriptionId,
905 const char *requestLabel,
906 int requestLabelLen,
927
928 virtual void setStatusCorrelationId(
929 const Service& service, const CorrelationId& correlationID);
930
931 virtual void setStatusCorrelationId(const Service& service,
932 const Identity& identity,
933 const CorrelationId& correlationID);
938
939 virtual CorrelationId sendRequest(const Request& request,
940 const CorrelationId& correlationId = CorrelationId(),
941 EventQueue *eventQueue = 0,
942 const char *requestLabel = 0,
943 int requestLabelLen = 0);
964
965 virtual CorrelationId sendRequest(const Request& request,
966 const Identity& user,
967 const CorrelationId& correlationId = CorrelationId(),
968 EventQueue *eventQueue = 0,
969 const char *requestLabel = 0,
970 int requestLabelLen = 0);
990
991 virtual CorrelationId sendRequest(const RequestTemplate& requestTemplate,
992 const CorrelationId& correlationId = CorrelationId());
1009
1011 const char *subscriptionString,
1012 const CorrelationId& statusCid,
1013 const Identity& identity = Identity());
1089
1090 blpapi_Session_t *handle() const;
1091};
1092
1107class SubscriptionIterator {
1108
1109 blpapi_SubscriptionIterator_t *d_handle_p;
1110 const char *d_subscriptionString;
1111 CorrelationId d_correlationId;
1112 int d_status;
1113 bool d_isValid;
1114
1115 private:
1116 // NOT IMPLEMENTED
1117 SubscriptionIterator(const SubscriptionIterator&);
1118 SubscriptionIterator& operator=(const SubscriptionIterator&);
1119
1120 public:
1121 explicit SubscriptionIterator(Session *session);
1127
1132
1133 // MANIPULATORS
1134
1135 bool next();
1143
1144 // ACCESSORS
1145
1146 bool isValid() const;
1151
1152 const char *subscriptionString() const;
1159
1160 const CorrelationId& correlationId() const;
1164
1169
1170 blpapi_SubscriptionIterator_t *handle() const;
1171};
1172
1175
1176// ============================================================================
1177// INLINE FUNCTION DEFINITIONS
1178// ============================================================================
1179
1180// ------------------
1181// class EventHandler
1182// ------------------
1183
1185
1186// FREE FUNCTIONS
1187extern "C" inline void blpapi_eventHandlerAdapter(
1188 blpapi_Event_t *event, blpapi_Session_t *, void *userData)
1189{
1190 Session *session = reinterpret_cast<Session *>(userData);
1191 assert(session);
1192 assert(session->d_eventHandler_p);
1193 session->d_eventHandler_p->processEvent(Event(event), session);
1194}
1195
1196// -------------
1197// class Session
1198// -------------
1199
1200inline Session::Session(const SessionOptions& parameters,
1201 EventHandler *handler,
1202 EventDispatcher *dispatcher)
1203 : d_eventHandler_p(handler)
1204{
1205 if (dispatcher && !handler) {
1207 "Event dispatcher provided without handler.");
1208 }
1209 d_handle_p = blpapi_Session_create(parameters.handle(),
1210 handler ? &blpapi_eventHandlerAdapter : 0,
1211 dispatcher ? dispatcher->impl() : 0,
1212 this);
1213 initAbstractSessionHandle(blpapi_Session_getAbstractSession(d_handle_p));
1214}
1215
1216inline Session::Session(blpapi_Session_t *newHandle)
1217 : d_handle_p(newHandle)
1218{
1219 initAbstractSessionHandle(blpapi_Session_getAbstractSession(d_handle_p));
1220}
1221
1222inline Session::~Session() { blpapi_Session_destroy(d_handle_p); }
1223
1224inline bool Session::start()
1225{
1226 return blpapi_Session_start(d_handle_p) ? false : true;
1227}
1228
1230{
1231 return blpapi_Session_startAsync(d_handle_p) ? false : true;
1232}
1233
1234inline void Session::stop() { blpapi_Session_stop(d_handle_p); }
1235
1236inline void Session::stopAsync() { blpapi_Session_stopAsync(d_handle_p); }
1237
1238inline Event Session::nextEvent(int timeout)
1239{
1240 if (timeout < 0) {
1241 throw InvalidArgumentException("Timeout must be >= 0.");
1242 }
1243
1244 blpapi_Event_t *event = 0;
1245 ExceptionUtil::throwOnError(blpapi_Session_nextEvent(
1246 d_handle_p, &event, static_cast<unsigned>(timeout)));
1247 return Event(event);
1248}
1249
1251{
1252 blpapi_Event_t *impl = 0;
1253 int ret = blpapi_Session_tryNextEvent(d_handle_p, &impl);
1254 if (0 == ret) {
1255 assert(event);
1256
1257 *event = Event(impl);
1258 }
1259 return ret;
1260}
1261
1262inline void Session::subscribe(const SubscriptionList& subscriptions,
1263 const char *requestLabel,
1264 int requestLabelLen)
1265{
1266 ExceptionUtil::throwOnError(blpapi_Session_subscribe(d_handle_p,
1267 subscriptions.impl(),
1268 0, // identityHandle
1269 requestLabel,
1270 requestLabelLen));
1271}
1272
1274 const SubscriptionList& subscriptions,
1276 const char *requestLabel,
1277 int requestLabelLen)
1278{
1281 subscribe(subscriptions, requestLabel, requestLabelLen);
1282 } else {
1284 BLPAPI_CALL(blpapi_Session_subscribeEx)(d_handle_p,
1285 subscriptions.impl(),
1286 0, // identityHandle
1287 requestLabel,
1288 requestLabelLen,
1290 &errors));
1291 }
1292
1293 return errors;
1294}
1295
1296inline void Session::subscribe(const SubscriptionList& subscriptions,
1297 const Identity& identity,
1298 const char *requestLabel,
1299 int requestLabelLen)
1300{
1301 ExceptionUtil::throwOnError(blpapi_Session_subscribe(d_handle_p,
1302 subscriptions.impl(),
1303 identity.handle(),
1304 requestLabel,
1305 requestLabelLen));
1306}
1307
1309 const SubscriptionList& subscriptions,
1310 const Identity& identity,
1312 const char *requestLabel,
1313 int requestLabelLen)
1314{
1317 subscribe(subscriptions, identity, requestLabel, requestLabelLen);
1318 } else {
1320 BLPAPI_CALL(blpapi_Session_subscribeEx)(d_handle_p,
1321 subscriptions.impl(),
1322 identity.handle(),
1323 requestLabel,
1324 requestLabelLen,
1326 &errors));
1327 }
1328
1329 return errors;
1330}
1331
1332inline void Session::resubscribe(const SubscriptionList& subscriptions)
1333{
1334 ExceptionUtil::throwOnError(blpapi_Session_resubscribe(d_handle_p,
1335 subscriptions.impl(),
1336 0, // requestLabel
1337 0)); // requestLabelLen
1338}
1339
1341 const SubscriptionList& subscriptions,
1343{
1346 resubscribe(subscriptions);
1347 } else {
1349 BLPAPI_CALL(blpapi_Session_resubscribeEx)(d_handle_p,
1350 subscriptions.impl(),
1351 0, // requestLabel
1352 0, // requestLabelLen
1354 &errors));
1355 }
1356
1357 return errors;
1358}
1359
1360inline void Session::resubscribe(const SubscriptionList& subscriptions,
1361 const char *requestLabel,
1362 int requestLabelLen)
1363{
1364 ExceptionUtil::throwOnError(blpapi_Session_resubscribe(
1365 d_handle_p, subscriptions.impl(), requestLabel, requestLabelLen));
1366}
1367
1369 const SubscriptionList& subscriptions,
1370 const char *requestLabel,
1371 int requestLabelLen,
1373{
1376 resubscribe(subscriptions, requestLabel, requestLabelLen);
1377 } else {
1379 BLPAPI_CALL(blpapi_Session_resubscribeEx)(d_handle_p,
1380 subscriptions.impl(),
1381 requestLabel,
1382 requestLabelLen,
1384 &errors));
1385 }
1386
1387 return errors;
1388}
1389
1391 const SubscriptionList& subscriptions, int resubscriptionId)
1392{
1395 subscriptions.impl(),
1396 resubscriptionId,
1397 0, // requestLabel
1398 0)); // requestLabelLen
1399}
1400
1402 const SubscriptionList& subscriptions,
1403 int resubscriptionId,
1405{
1408 resubscribe(subscriptions, resubscriptionId);
1409 } else {
1411 BLPAPI_CALL(blpapi_Session_resubscribeWithIdEx)(d_handle_p,
1412 subscriptions.impl(),
1413 resubscriptionId,
1414 0, // requestLabel
1415 0, // requestLabelLen
1417 &errors));
1418 }
1419
1420 return errors;
1421}
1422
1423inline void Session::resubscribe(const SubscriptionList& subscriptions,
1424 int resubscriptionId,
1425 const char *requestLabel,
1426 int requestLabelLen)
1427{
1430 subscriptions.impl(),
1431 resubscriptionId,
1432 requestLabel,
1433 requestLabelLen));
1434}
1435
1437 const SubscriptionList& subscriptions,
1438 int resubscriptionId,
1439 const char *requestLabel,
1440 int requestLabelLen,
1442{
1445 resubscribe(subscriptions,
1446 resubscriptionId,
1447 requestLabel,
1448 requestLabelLen);
1449 } else {
1451 BLPAPI_CALL(blpapi_Session_resubscribeWithIdEx)(d_handle_p,
1452 subscriptions.impl(),
1453 resubscriptionId,
1454 requestLabel,
1455 requestLabelLen,
1457 &errors));
1458 }
1459
1460 return errors;
1461}
1462
1464{
1466 blpapi_Session_unsubscribe(d_handle_p, list.impl(), 0, 0));
1467}
1468
1470 const Service& service, const CorrelationId& correlationID)
1471{
1472 ExceptionUtil::throwOnError(blpapi_Session_setStatusCorrelationId(
1473 d_handle_p, service.handle(), 0, &correlationID.impl()));
1474}
1475
1476inline void Session::setStatusCorrelationId(const Service& service,
1477 const Identity& identity,
1478 const CorrelationId& correlationID)
1479{
1481 blpapi_Session_setStatusCorrelationId(d_handle_p,
1482 service.handle(),
1483 identity.handle(),
1484 &correlationID.impl()));
1485}
1486
1488 const Identity& identity,
1489 const CorrelationId& correlationId,
1490 EventQueue *eventQueue,
1491 const char *requestLabel,
1492 int requestLabelLen)
1493{
1494 CorrelationId retCorrelationId(correlationId);
1495
1496 ExceptionUtil::throwOnError(blpapi_Session_sendRequest(d_handle_p,
1497 request.handle(),
1498 &retCorrelationId.impl(),
1499 identity.handle(),
1500 eventQueue ? eventQueue->handle() : 0,
1501 requestLabel,
1502 requestLabelLen));
1503
1504 return retCorrelationId;
1505}
1506
1508 const CorrelationId& correlationId,
1509 EventQueue *eventQueue,
1510 const char *requestLabel,
1511 int requestLabelLen)
1512{
1513 CorrelationId retCorrelationId(correlationId);
1514
1515 ExceptionUtil::throwOnError(blpapi_Session_sendRequest(d_handle_p,
1516 request.handle(),
1517 &retCorrelationId.impl(),
1518 0,
1519 eventQueue ? eventQueue->handle() : 0,
1520 requestLabel,
1521 requestLabelLen));
1522
1523 return retCorrelationId;
1524}
1525
1527 const RequestTemplate& requestTemplate,
1528 const CorrelationId& correlationId)
1529{
1530 CorrelationId retCorrelationId(correlationId);
1531
1533 blpapi_Session_sendRequestTemplate)(
1534 d_handle_p, requestTemplate.impl(), &retCorrelationId.impl()));
1535
1536 return retCorrelationId;
1537}
1538
1540 const char *subscriptionString,
1541 const CorrelationId& correlationID,
1542 const Identity& identity)
1543{
1544 blpapi_RequestTemplate_t *requestTemplate = 0;
1545
1547 blpapi_Session_createSnapshotRequestTemplate)(&requestTemplate,
1548 d_handle_p,
1549 subscriptionString,
1550 identity.handle(),
1551 const_cast<blpapi_CorrelationId_t *>(&correlationID.impl())));
1552
1553 return RequestTemplate(requestTemplate);
1554}
1555
1556inline blpapi_Session_t *Session::handle() const { return d_handle_p; }
1557
1558// --------------------------
1559// class SubscriptionIterator
1560// --------------------------
1561
1562inline SubscriptionIterator::SubscriptionIterator(Session *session)
1563 : d_isValid(false)
1564{
1565 assert(session);
1566
1567 d_handle_p = blpapi_SubscriptionItr_create(session->handle());
1568}
1569
1571{
1572 blpapi_SubscriptionItr_destroy(d_handle_p);
1573}
1574
1576{
1577 blpapi_CorrelationId_t nextCorrelationIdImpl;
1578 d_isValid = !blpapi_SubscriptionItr_next(d_handle_p,
1579 &d_subscriptionString,
1580 &nextCorrelationIdImpl,
1581 &d_status);
1582
1583 d_correlationId = d_isValid ? CorrelationId(nextCorrelationIdImpl)
1584 : CorrelationId();
1585
1586 return d_isValid;
1587}
1588
1589inline bool SubscriptionIterator::isValid() const { return d_isValid; }
1590
1591inline blpapi_SubscriptionIterator_t *SubscriptionIterator::handle() const
1592{
1593 return d_handle_p;
1594}
1595
1597{
1598 if (!isValid()) {
1599 ExceptionUtil::throwOnError(BLPAPI_ERROR_ILLEGAL_STATE);
1600 }
1601
1602 return d_subscriptionString;
1603}
1604
1606{
1607 if (!isValid()) {
1608 ExceptionUtil::throwOnError(BLPAPI_ERROR_ILLEGAL_STATE);
1609 }
1610
1611 return d_correlationId;
1612}
1613
1616{
1617 if (!isValid()) {
1618 ExceptionUtil::throwOnError(BLPAPI_ERROR_ILLEGAL_STATE);
1619 }
1620
1621 return static_cast<Session::SubscriptionStatus>(d_status);
1622}
1623
1624} // close namespace blpapi
1625} // close namespace BloombergLP
1626
1627#endif // ifdef __cplusplus
1628
1629#endif // INCLUDED_BLPAPI_SESSION
A common interface shared between publisher and consumer sessions.
Provide functions for dispatchtbl.
#define BLPAPI_CALL_SESSION_RESUBSCRIBEWITHID(a1, a2, a3, a4, a5)
Definition blpapi_call.h:414
#define BLPAPI_CALL(FUNCNAME)
Definition blpapi_call.h:361
Provide a key to identify individual subscriptions or requests.
Common definitions used by the library.
A component which defines events related operations.
Provide a dispatcher to dispatch events.
Provide access to the entitlements for a user.
Defines a request which can be sent for a service.
Provide a handle for a request template.
A service which provides access to API data (provide or consume).
A common interface shared between publish and consumer sessions.
Provide a list of subscriptions.
Provide BLPAPI types.
Definition blpapi_correlationid.h:225
Definition blpapi_eventdispatcher.h:132
blpapi_EventDispatcher_t * impl() const
Definition blpapi_eventdispatcher.h:214
Definition blpapi_session.h:350
virtual bool processEvent(const Event &event, Session *session)=0
virtual ~EventHandler()=0
Definition blpapi_session.h:1184
Definition blpapi_event.h:402
blpapi_EventQueue_t * handle() const
Definition blpapi_event.h:602
Definition blpapi_event.h:212
static void throwOnError(int errorCode)
Definition blpapi_exception.h:541
Definition blpapi_identity.h:147
blpapi_Identity_t * handle() const
Definition blpapi_identity.h:396
Definition blpapi_exception.h:253
Definition blpapi_requesttemplate.h:147
const blpapi_RequestTemplate_t * impl() const
Definition blpapi_requesttemplate.h:240
Definition blpapi_request.h:163
blpapi_Request_t * handle() const
Definition blpapi_request.h:763
Definition blpapi_service.h:320
blpapi_Service_t * handle() const
Definition blpapi_service.h:722
Definition blpapi_sessionoptions.h:447
blpapi_SessionOptions_t * handle() const
Definition blpapi_sessionoptions.h:1416
Definition blpapi_session.h:517
virtual ~Session()
Definition blpapi_session.h:1222
SubscriptionStatus
Definition blpapi_session.h:537
@ SUBSCRIBING
Initiated but no updates received.
Definition blpapi_session.h:540
@ CANCELLED
No longer active, terminated by Application.
Definition blpapi_session.h:544
@ SUBSCRIBED
Updates are flowing.
Definition blpapi_session.h:542
@ UNSUBSCRIBED
No longer active, terminated by API.
Definition blpapi_session.h:538
@ PENDING_CANCELLATION
Definition blpapi_session.h:546
virtual int tryNextEvent(Event *event)
Definition blpapi_session.h:1250
virtual bool startAsync()
Definition blpapi_session.h:1229
::BloombergLP::blpapi::EventHandler EventHandler
Definition blpapi_session.h:520
virtual Event nextEvent(int timeout=0)
Definition blpapi_session.h:1238
virtual void stop()
Definition blpapi_session.h:1234
friend void blpapi_eventHandlerAdapter(blpapi_Event_t *event, blpapi_Session_t *, void *userData)
Definition blpapi_session.h:1187
blpapi_Session_t * handle() const
Definition blpapi_session.h:1556
virtual RequestTemplate createSnapshotRequestTemplate(const char *subscriptionString, const CorrelationId &statusCid, const Identity &identity=Identity())
Definition blpapi_session.h:1539
virtual void setStatusCorrelationId(const Service &service, const CorrelationId &correlationID)
Definition blpapi_session.h:1469
virtual bool start()
Definition blpapi_session.h:1224
virtual CorrelationId sendRequest(const Request &request, const CorrelationId &correlationId=CorrelationId(), EventQueue *eventQueue=0, const char *requestLabel=0, int requestLabelLen=0)
Definition blpapi_session.h:1507
virtual void stopAsync()
Definition blpapi_session.h:1236
virtual void unsubscribe(const SubscriptionList &subscriptionList)
Definition blpapi_session.h:1463
virtual void resubscribe(const SubscriptionList &subscriptions)
Definition blpapi_session.h:1332
virtual void subscribe(const SubscriptionList &subscriptionList, const Identity &identity, const char *requestLabel=0, int requestLabelLen=0)
Definition blpapi_session.h:1296
const CorrelationId & correlationId() const
Definition blpapi_session.h:1605
~SubscriptionIterator()
Definition blpapi_session.h:1570
bool isValid() const
Definition blpapi_session.h:1589
bool next()
Definition blpapi_session.h:1575
Session::SubscriptionStatus subscriptionStatus() const
Definition blpapi_session.h:1615
const char * subscriptionString() const
Definition blpapi_session.h:1596
blpapi_SubscriptionIterator_t * handle() const
Definition blpapi_session.h:1591
Definition blpapi_subscriptionlist.h:316
std::vector< SubscriptionPreprocessError > SubscriptionPreprocessErrors
Definition blpapi_session.h:468
void blpapi_eventHandlerAdapter(blpapi_Event_t *event, blpapi_Session_t *, void *userData)
Definition blpapi_session.h:1187
void blpapi_SubscriptionPreprocess_handleError(const blpapi_CorrelationId_t *correlationId, const char *subscriptionString, int errorCode, const char *description, void *userData)
Definition blpapi_session.h:431
Definition blpapi_abstractsession.h:212
std::ostream & operator<<(std::ostream &os, const CorrelationId &correlator)
Definition blpapi_correlationid.h:680
Definition blpapi_abstractsession.h:211
CorrelationId correlationId
Definition blpapi_session.h:390
SubscriptionPreprocessError(const CorrelationId &correlationId, const std::string &subscriptionString, int code, const char *description)
Definition blpapi_session.h:398
std::string description
Definition blpapi_session.h:396
int code
Definition blpapi_session.h:392
std::string subscriptionString
Definition blpapi_session.h:391
@ e_invalidSubscriptionString
Invalid subscription string.
Definition blpapi_session.h:378
@ e_correlationIdError
Definition blpapi_session.h:382
@ e_returnIndividualErrors
Definition blpapi_session.h:460
@ e_failOnFirstError
Definition blpapi_session.h:453