BLPAPI C++ 3.26.6
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
37
38#ifndef INCLUDED_BLPAPI_SESSION
39#define INCLUDED_BLPAPI_SESSION
40
67
69#include <blpapi_call.h>
71#include <blpapi_defs.h>
72#include <blpapi_event.h>
74#include <blpapi_identity.h>
75#include <blpapi_request.h>
77#include <blpapi_service.h>
80#include <blpapi_types.h>
81
82#include <stddef.h>
83
84#ifdef __cplusplus
85extern "C" {
86#endif
87
89
92
100typedef void (*blpapi_EventHandler_t)(
101 blpapi_Event_t *event, blpapi_Session_t *session, void *userData);
102
110typedef void (*blpapi_SubscriptionPreprocessErrorHandler_t)(
111 const blpapi_CorrelationId_t *correlationId,
112 const char *subscriptionString,
113 int errorCode,
114 const char *errorDescription,
115 void *userData);
116
138BLPAPI_EXPORT
139blpapi_Session_t *blpapi_Session_create(blpapi_SessionOptions_t *parameters,
140 blpapi_EventHandler_t handler,
141 blpapi_EventDispatcher_t *dispatcher,
142 void *userData);
143
153BLPAPI_EXPORT
154void blpapi_Session_destroy(blpapi_Session_t *session);
155
168BLPAPI_EXPORT
169int blpapi_Session_start(blpapi_Session_t *session);
170
183BLPAPI_EXPORT
184int blpapi_Session_startAsync(blpapi_Session_t *session);
185
199BLPAPI_EXPORT
200int blpapi_Session_stop(blpapi_Session_t *session);
201
214BLPAPI_EXPORT
215int blpapi_Session_stopAsync(blpapi_Session_t *session);
216
234BLPAPI_EXPORT
235int blpapi_Session_nextEvent(blpapi_Session_t *session,
236 blpapi_Event_t **eventPointer,
237 unsigned int timeoutInMilliseconds);
238
250BLPAPI_EXPORT
251int blpapi_Session_tryNextEvent(
252 blpapi_Session_t *session, blpapi_Event_t **eventPointer);
253
277BLPAPI_EXPORT
278int blpapi_Session_subscribe(blpapi_Session_t *session,
279 const blpapi_SubscriptionList_t *subscriptionList,
280 const blpapi_Identity_t *handle,
281 const char *requestLabel,
282 int requestLabelLen);
283
305BLPAPI_EXPORT
306int blpapi_Session_subscribeEx(blpapi_Session_t *session,
307 const blpapi_SubscriptionList_t *subscriptionList,
308 const blpapi_Identity_t *handle,
309 const char *requestLabel,
310 int requestLabelLen,
311 blpapi_SubscriptionPreprocessErrorHandler_t errorHandler,
312 void *userData);
313
334BLPAPI_EXPORT
335int blpapi_Session_resubscribe(blpapi_Session_t *session,
336 const blpapi_SubscriptionList_t *resubscriptionList,
337 const char *requestLabel,
338 int requestLabelLen);
339
360BLPAPI_EXPORT
361int blpapi_Session_resubscribeEx(blpapi_Session_t *session,
362 const blpapi_SubscriptionList_t *resubscriptionList,
363 const char *requestLabel,
364 int requestLabelLen,
365 blpapi_SubscriptionPreprocessErrorHandler_t errorHandler,
366 void *userData);
367
387BLPAPI_EXPORT
388int blpapi_Session_resubscribeWithId(blpapi_Session_t *session,
389 const blpapi_SubscriptionList_t *resubscriptionList,
390 int resubscriptionId,
391 const char *requestLabel,
392 int requestLabelLen);
393
416BLPAPI_EXPORT
417int blpapi_Session_resubscribeWithIdEx(blpapi_Session_t *session,
418 const blpapi_SubscriptionList_t *resubscriptionList,
419 int resubscriptionId,
420 const char *requestLabel,
421 int requestLabelLen,
422 blpapi_SubscriptionPreprocessErrorHandler_t errorHandler,
423 void *userData);
424
444BLPAPI_EXPORT
445int blpapi_Session_unsubscribe(blpapi_Session_t *session,
446 const blpapi_SubscriptionList_t *unsubscriptionList,
447 const char *requestLabel,
448 int requestLabelLen);
449
470BLPAPI_EXPORT
471int blpapi_Session_cancel(blpapi_Session_t *session,
472 const blpapi_CorrelationId_t *correlationIds,
473 size_t numCorrelationIds,
474 const char *requestLabel,
475 int requestLabelLen);
476
493BLPAPI_EXPORT
494int blpapi_Session_setStatusCorrelationId(blpapi_Session_t *session,
495 const blpapi_Service_t *service,
496 const blpapi_Identity_t *identity,
497 const blpapi_CorrelationId_t *correlationId);
498
527BLPAPI_EXPORT
528int blpapi_Session_sendRequest(blpapi_Session_t *session,
529 const blpapi_Request_t *request,
530 blpapi_CorrelationId_t *correlationId,
531 blpapi_Identity_t *identity,
532 blpapi_EventQueue_t *eventQueue,
533 const char *requestLabel,
534 int requestLabelLen);
535
553BLPAPI_EXPORT
554int blpapi_Session_sendRequestTemplate(blpapi_Session_t *session,
555 const blpapi_RequestTemplate_t *requestTemplate,
556 blpapi_CorrelationId_t *correlationId);
557
587BLPAPI_EXPORT
588int blpapi_Session_createSnapshotRequestTemplate(
589 blpapi_RequestTemplate_t **requestTemplate,
590 blpapi_Session_t *session,
591 const char *subscriptionString,
592 const blpapi_Identity_t *identity,
593 blpapi_CorrelationId_t *correlationId);
594
617BLPAPI_EXPORT
618int blpapi_Session_sendAuthorizationRequest(blpapi_Session_t *session,
619 const blpapi_Request_t *request,
620 blpapi_Identity_t *identity,
621 blpapi_CorrelationId_t *correlationId,
622 blpapi_EventQueue_t *eventQueue,
623 const char *requestLabel,
624 int requestLabelLen);
625
639BLPAPI_EXPORT
640int blpapi_Session_openService(
641 blpapi_Session_t *session, const char *serviceName);
642
659BLPAPI_EXPORT
660int blpapi_Session_openServiceAsync(blpapi_Session_t *session,
661 const char *serviceName,
662 blpapi_CorrelationId_t *correlationId);
663
678BLPAPI_EXPORT
679int blpapi_Session_generateToken(blpapi_Session_t *session,
680 blpapi_CorrelationId_t *correlationId,
681 blpapi_EventQueue_t *eventQueue);
682
699BLPAPI_EXPORT
700int blpapi_Session_getService(blpapi_Session_t *session,
701 blpapi_Service_t **service,
702 const char *serviceName);
703
715BLPAPI_EXPORT
716blpapi_UserHandle_t *blpapi_Session_createUserHandle(
717 blpapi_Session_t *session);
718
729BLPAPI_EXPORT
730blpapi_Identity_t *blpapi_Session_createIdentity(blpapi_Session_t *session);
731
742BLPAPI_EXPORT
743blpapi_AbstractSession_t *blpapi_Session_getAbstractSession(
744 blpapi_Session_t *session);
745
756BLPAPI_EXPORT
757blpapi_SubscriptionIterator_t *blpapi_SubscriptionItr_create(
758 blpapi_Session_t *session);
759
767BLPAPI_EXPORT
768void blpapi_SubscriptionItr_destroy(blpapi_SubscriptionIterator_t *iterator);
769
790BLPAPI_EXPORT
791int blpapi_SubscriptionItr_next(blpapi_SubscriptionIterator_t *iterator,
792 const char **subscriptionString,
793 blpapi_CorrelationId_t *correlationId,
794 int *status);
795
805BLPAPI_EXPORT
806int blpapi_SubscriptionItr_isValid(
807 const blpapi_SubscriptionIterator_t *iterator);
808
811
812#ifdef __cplusplus
813}
814
815#include <cassert>
816#include <cstring> // for std::memset
817
818namespace BloombergLP {
819namespace blpapi {
826
827class Session;
828
841
842 public:
843 virtual ~EventHandler() = 0;
844
845 virtual bool processEvent(const Event& event, Session *session) = 0;
856};
857
859extern "C" void blpapi_eventHandlerAdapter(
860 blpapi_Event_t *event, blpapi_Session_t *, void *userData);
867
869 enum Code {
871 = BLPAPI_SUBSCRIPTIONPREPROCESS_INVALID_SUBSCRIPTION_STRING,
873
875 = BLPAPI_SUBSCRIPTIONPREPROCESS_CORRELATIONID_ERROR
880 };
881
884 int code;
885 /*
886 * The error code that is one of `Code` enum values.
887 */
888 std::string description;
889
900};
901
902inline std::ostream& operator<<(
903 std::ostream& os, const SubscriptionPreprocessError& error)
904{
905 os << "{" << "correlationId: " << error.correlationId
906 << ", subscriptionString: " << error.subscriptionString << ", code: ";
907 if (error.code
909 os << "InvalidSubscriptionString";
910 } else if (error.code
912 os << "CorrelationIdError";
913 } else {
914 os << "UNKNOWN";
915 }
916
917 os << "(" << error.code << ")";
918 os << ", description: " << error.description << "}";
919
920 return os;
921}
922
924extern "C" inline void blpapi_SubscriptionPreprocess_handleError(
925 const blpapi_CorrelationId_t *correlationId,
926 const char *subscriptionString,
927 int errorCode,
928 const char *description,
929 void *userData)
930{
931 typedef std::vector<SubscriptionPreprocessError> Errors;
932 Errors *errors = reinterpret_cast<Errors *>(userData);
933 errors->emplace_back(CorrelationId(*correlationId),
934 subscriptionString,
935 errorCode,
936 description);
937}
939
961
962typedef std::vector<SubscriptionPreprocessError> SubscriptionPreprocessErrors;
963
1011class Session : public AbstractSession {
1012
1013 public:
1015
1016 private:
1017 blpapi_Session_t *d_handle_p;
1018 EventHandler *d_eventHandler_p;
1019
1020 // NOT IMPLEMENTED
1021 Session(const Session&);
1022 Session& operator=(const Session&);
1023
1025 blpapi_Event_t *event, blpapi_Session_t *, void *userData);
1026
1027 public:
1028 /*
1029 * The possible statuses a subscription may be in.
1030 */
1032 UNSUBSCRIBED = BLPAPI_SUBSCRIPTIONSTATUS_UNSUBSCRIBED,
1034 SUBSCRIBING = BLPAPI_SUBSCRIPTIONSTATUS_SUBSCRIBING,
1036 SUBSCRIBED = BLPAPI_SUBSCRIPTIONSTATUS_SUBSCRIBED,
1038 CANCELLED = BLPAPI_SUBSCRIPTIONSTATUS_CANCELLED,
1040 PENDING_CANCELLATION = BLPAPI_SUBSCRIPTIONSTATUS_PENDING_CANCELLATION
1041 };
1042
1043 explicit Session(const SessionOptions& options = SessionOptions(),
1044 EventHandler *eventHandler = 0,
1045 EventDispatcher *eventDispatcher = 0);
1078
1079 explicit Session(blpapi_Session_t *handle);
1080
1081 virtual ~Session();
1085
1086 virtual bool start();
1096
1097 virtual bool startAsync();
1107
1108 virtual void stop();
1119
1120 virtual void stopAsync();
1131
1132 virtual Event nextEvent(int timeout = 0);
1147
1148 virtual int tryNextEvent(Event *event);
1155
1156 virtual void subscribe(const SubscriptionList& subscriptionList,
1157 const Identity& identity,
1158 const char *requestLabel = 0,
1159 int requestLabelLen = 0);
1172
1174 const SubscriptionList& subscriptionList,
1175 const Identity& identity,
1177 const char *requestLabel = 0,
1178 int requestLabelLen = 0);
1197
1198 virtual void subscribe(const SubscriptionList& subscriptionList,
1199 const char *requestLabel = 0,
1200 int requestLabelLen = 0);
1215
1217 const SubscriptionList& subscriptionList,
1219 const char *requestLabel = 0,
1220 int requestLabelLen = 0);
1240
1241 virtual void unsubscribe(const SubscriptionList& subscriptionList);
1261
1262 virtual void resubscribe(const SubscriptionList& subscriptions);
1275
1277 const SubscriptionList& subscriptions,
1293
1294 virtual void resubscribe(const SubscriptionList& subscriptions,
1295 const char *requestLabel,
1296 int requestLabelLen);
1313
1315 const SubscriptionList& subscriptions,
1316 const char *requestLabel,
1317 int requestLabelLen,
1337
1338 virtual void resubscribe(
1339 const SubscriptionList& subscriptions, int resubscriptionId);
1353
1355 const SubscriptionList& subscriptions,
1356 int resubscriptionId,
1373
1374 virtual void resubscribe(const SubscriptionList& subscriptions,
1375 int resubscriptionId,
1376 const char *requestLabel,
1377 int requestLabelLen);
1395
1397 const SubscriptionList& subscriptions,
1398 int resubscriptionId,
1399 const char *requestLabel,
1400 int requestLabelLen,
1421
1422 virtual void setStatusCorrelationId(
1423 const Service& service, const CorrelationId& correlationID);
1424
1425 virtual void setStatusCorrelationId(const Service& service,
1426 const Identity& identity,
1427 const CorrelationId& correlationID);
1432
1433 virtual CorrelationId sendRequest(const Request& request,
1434 const CorrelationId& correlationId = CorrelationId(),
1435 EventQueue *eventQueue = 0,
1436 const char *requestLabel = 0,
1437 int requestLabelLen = 0);
1458
1459 virtual CorrelationId sendRequest(const Request& request,
1460 const Identity& user,
1461 const CorrelationId& correlationId = CorrelationId(),
1462 EventQueue *eventQueue = 0,
1463 const char *requestLabel = 0,
1464 int requestLabelLen = 0);
1484
1485 virtual CorrelationId sendRequest(const RequestTemplate& requestTemplate,
1486 const CorrelationId& correlationId = CorrelationId());
1503
1505 const char *subscriptionString,
1506 const CorrelationId& statusCid,
1507 const Identity& identity = Identity());
1583
1585 blpapi_Session_t *handle() const;
1587};
1588
1603class SubscriptionIterator {
1604
1605 blpapi_SubscriptionIterator_t *d_handle_p;
1606 const char *d_subscriptionString;
1607 CorrelationId d_correlationId;
1608 int d_status;
1609 bool d_isValid;
1610
1611 private:
1612 // NOT IMPLEMENTED
1613 SubscriptionIterator(const SubscriptionIterator&);
1614 SubscriptionIterator& operator=(const SubscriptionIterator&);
1615
1616 public:
1617 explicit SubscriptionIterator(Session *session);
1623
1628
1629 // MANIPULATORS
1630
1631 bool next();
1639
1640 // ACCESSORS
1641
1642 bool isValid() const;
1647
1648 const char *subscriptionString() const;
1655
1656 const CorrelationId& correlationId() const;
1660
1665
1667 blpapi_SubscriptionIterator_t *handle() const;
1669};
1670
1673
1674// ============================================================================
1675// INLINE FUNCTION DEFINITIONS
1676// ============================================================================
1677
1678// ------------------
1679// class EventHandler
1680// ------------------
1681
1683
1684// FREE FUNCTIONS
1686extern "C" inline void blpapi_eventHandlerAdapter(
1687 blpapi_Event_t *event, blpapi_Session_t *, void *userData)
1688{
1689 Session *session = reinterpret_cast<Session *>(userData);
1690 assert(session);
1691 assert(session->d_eventHandler_p);
1692 session->d_eventHandler_p->processEvent(Event(event), session);
1693}
1695
1696// -------------
1697// class Session
1698// -------------
1699
1700inline Session::Session(const SessionOptions& parameters,
1701 EventHandler *handler,
1702 EventDispatcher *dispatcher)
1703 : d_eventHandler_p(handler)
1704{
1705 if (dispatcher && !handler) {
1707 "Event dispatcher provided without handler.");
1708 }
1709 d_handle_p = blpapi_Session_create(parameters.handle(),
1710 handler ? &blpapi_eventHandlerAdapter : 0,
1711 dispatcher ? dispatcher->impl() : 0,
1712 this);
1713 initAbstractSessionHandle(blpapi_Session_getAbstractSession(d_handle_p));
1714}
1715
1716inline Session::Session(blpapi_Session_t *newHandle)
1717 : d_handle_p(newHandle)
1718{
1719 initAbstractSessionHandle(blpapi_Session_getAbstractSession(d_handle_p));
1720}
1721
1722inline Session::~Session() { blpapi_Session_destroy(d_handle_p); }
1723
1724inline bool Session::start()
1725{
1726 return blpapi_Session_start(d_handle_p) ? false : true;
1727}
1728
1730{
1731 return blpapi_Session_startAsync(d_handle_p) ? false : true;
1732}
1733
1734inline void Session::stop() { blpapi_Session_stop(d_handle_p); }
1735
1736inline void Session::stopAsync() { blpapi_Session_stopAsync(d_handle_p); }
1737
1738inline Event Session::nextEvent(int timeout)
1739{
1740 if (timeout < 0) {
1741 throw InvalidArgumentException("Timeout must be >= 0.");
1742 }
1743
1744 blpapi_Event_t *event = 0;
1745 ExceptionUtil::throwOnError(blpapi_Session_nextEvent(
1746 d_handle_p, &event, static_cast<unsigned>(timeout)));
1747 return Event(event);
1748}
1749
1751{
1752 blpapi_Event_t *impl = 0;
1753 int ret = blpapi_Session_tryNextEvent(d_handle_p, &impl);
1754 if (0 == ret) {
1755 assert(event);
1756
1757 *event = Event(impl);
1758 }
1759 return ret;
1760}
1761
1762inline void Session::subscribe(const SubscriptionList& subscriptions,
1763 const char *requestLabel,
1764 int requestLabelLen)
1765{
1766 ExceptionUtil::throwOnError(blpapi_Session_subscribe(d_handle_p,
1767 subscriptions.impl(),
1768 0, // identityHandle
1769 requestLabel,
1770 requestLabelLen));
1771}
1772
1774 const SubscriptionList& subscriptions,
1776 const char *requestLabel,
1777 int requestLabelLen)
1778{
1781 subscribe(subscriptions, requestLabel, requestLabelLen);
1782 } else {
1784 BLPAPI_CALL(blpapi_Session_subscribeEx)(d_handle_p,
1785 subscriptions.impl(),
1786 0, // identityHandle
1787 requestLabel,
1788 requestLabelLen,
1789 &blpapi_SubscriptionPreprocess_handleError,
1790 &errors));
1791 }
1792
1793 return errors;
1794}
1795
1796inline void Session::subscribe(const SubscriptionList& subscriptions,
1797 const Identity& identity,
1798 const char *requestLabel,
1799 int requestLabelLen)
1800{
1801 ExceptionUtil::throwOnError(blpapi_Session_subscribe(d_handle_p,
1802 subscriptions.impl(),
1803 identity.handle(),
1804 requestLabel,
1805 requestLabelLen));
1806}
1807
1809 const SubscriptionList& subscriptions,
1810 const Identity& identity,
1812 const char *requestLabel,
1813 int requestLabelLen)
1814{
1817 subscribe(subscriptions, identity, requestLabel, requestLabelLen);
1818 } else {
1820 BLPAPI_CALL(blpapi_Session_subscribeEx)(d_handle_p,
1821 subscriptions.impl(),
1822 identity.handle(),
1823 requestLabel,
1824 requestLabelLen,
1825 &blpapi_SubscriptionPreprocess_handleError,
1826 &errors));
1827 }
1828
1829 return errors;
1830}
1831
1832inline void Session::resubscribe(const SubscriptionList& subscriptions)
1833{
1834 ExceptionUtil::throwOnError(blpapi_Session_resubscribe(d_handle_p,
1835 subscriptions.impl(),
1836 0, // requestLabel
1837 0)); // requestLabelLen
1838}
1839
1841 const SubscriptionList& subscriptions,
1843{
1846 resubscribe(subscriptions);
1847 } else {
1849 BLPAPI_CALL(blpapi_Session_resubscribeEx)(d_handle_p,
1850 subscriptions.impl(),
1851 0, // requestLabel
1852 0, // requestLabelLen
1853 &blpapi_SubscriptionPreprocess_handleError,
1854 &errors));
1855 }
1856
1857 return errors;
1858}
1859
1860inline void Session::resubscribe(const SubscriptionList& subscriptions,
1861 const char *requestLabel,
1862 int requestLabelLen)
1863{
1864 ExceptionUtil::throwOnError(blpapi_Session_resubscribe(
1865 d_handle_p, subscriptions.impl(), requestLabel, requestLabelLen));
1866}
1867
1869 const SubscriptionList& subscriptions,
1870 const char *requestLabel,
1871 int requestLabelLen,
1873{
1876 resubscribe(subscriptions, requestLabel, requestLabelLen);
1877 } else {
1879 BLPAPI_CALL(blpapi_Session_resubscribeEx)(d_handle_p,
1880 subscriptions.impl(),
1881 requestLabel,
1882 requestLabelLen,
1883 &blpapi_SubscriptionPreprocess_handleError,
1884 &errors));
1885 }
1886
1887 return errors;
1888}
1889
1891 const SubscriptionList& subscriptions, int resubscriptionId)
1892{
1894 BLPAPI_CALL_SESSION_RESUBSCRIBEWITHID(d_handle_p,
1895 subscriptions.impl(),
1896 resubscriptionId,
1897 0, // requestLabel
1898 0)); // requestLabelLen
1899}
1900
1902 const SubscriptionList& subscriptions,
1903 int resubscriptionId,
1905{
1908 resubscribe(subscriptions, resubscriptionId);
1909 } else {
1911 BLPAPI_CALL(blpapi_Session_resubscribeWithIdEx)(d_handle_p,
1912 subscriptions.impl(),
1913 resubscriptionId,
1914 0, // requestLabel
1915 0, // requestLabelLen
1916 &blpapi_SubscriptionPreprocess_handleError,
1917 &errors));
1918 }
1919
1920 return errors;
1921}
1922
1923inline void Session::resubscribe(const SubscriptionList& subscriptions,
1924 int resubscriptionId,
1925 const char *requestLabel,
1926 int requestLabelLen)
1927{
1929 BLPAPI_CALL_SESSION_RESUBSCRIBEWITHID(d_handle_p,
1930 subscriptions.impl(),
1931 resubscriptionId,
1932 requestLabel,
1933 requestLabelLen));
1934}
1935
1937 const SubscriptionList& subscriptions,
1938 int resubscriptionId,
1939 const char *requestLabel,
1940 int requestLabelLen,
1942{
1945 resubscribe(subscriptions,
1946 resubscriptionId,
1947 requestLabel,
1948 requestLabelLen);
1949 } else {
1951 BLPAPI_CALL(blpapi_Session_resubscribeWithIdEx)(d_handle_p,
1952 subscriptions.impl(),
1953 resubscriptionId,
1954 requestLabel,
1955 requestLabelLen,
1956 &blpapi_SubscriptionPreprocess_handleError,
1957 &errors));
1958 }
1959
1960 return errors;
1961}
1962
1964{
1966 blpapi_Session_unsubscribe(d_handle_p, list.impl(), 0, 0));
1967}
1968
1970 const Service& service, const CorrelationId& correlationID)
1971{
1972 ExceptionUtil::throwOnError(blpapi_Session_setStatusCorrelationId(
1973 d_handle_p, service.handle(), 0, &correlationID.impl()));
1974}
1975
1976inline void Session::setStatusCorrelationId(const Service& service,
1977 const Identity& identity,
1978 const CorrelationId& correlationID)
1979{
1981 blpapi_Session_setStatusCorrelationId(d_handle_p,
1982 service.handle(),
1983 identity.handle(),
1984 &correlationID.impl()));
1985}
1986
1988 const Identity& identity,
1989 const CorrelationId& correlationId,
1990 EventQueue *eventQueue,
1991 const char *requestLabel,
1992 int requestLabelLen)
1993{
1994 CorrelationId retCorrelationId(correlationId);
1995
1996 ExceptionUtil::throwOnError(blpapi_Session_sendRequest(d_handle_p,
1997 request.handle(),
1998 &retCorrelationId.impl(),
1999 identity.handle(),
2000 eventQueue ? eventQueue->handle() : 0,
2001 requestLabel,
2002 requestLabelLen));
2003
2004 return retCorrelationId;
2005}
2006
2008 const CorrelationId& correlationId,
2009 EventQueue *eventQueue,
2010 const char *requestLabel,
2011 int requestLabelLen)
2012{
2013 CorrelationId retCorrelationId(correlationId);
2014
2015 ExceptionUtil::throwOnError(blpapi_Session_sendRequest(d_handle_p,
2016 request.handle(),
2017 &retCorrelationId.impl(),
2018 0,
2019 eventQueue ? eventQueue->handle() : 0,
2020 requestLabel,
2021 requestLabelLen));
2022
2023 return retCorrelationId;
2024}
2025
2027 const RequestTemplate& requestTemplate,
2028 const CorrelationId& correlationId)
2029{
2030 CorrelationId retCorrelationId(correlationId);
2031
2032 ExceptionUtil::throwOnError(BLPAPI_CALL(
2033 blpapi_Session_sendRequestTemplate)(
2034 d_handle_p, requestTemplate.impl(), &retCorrelationId.impl()));
2035
2036 return retCorrelationId;
2037}
2038
2040 const char *subscriptionString,
2041 const CorrelationId& correlationID,
2042 const Identity& identity)
2043{
2044 blpapi_RequestTemplate_t *requestTemplate = 0;
2045
2046 ExceptionUtil::throwOnError(BLPAPI_CALL(
2047 blpapi_Session_createSnapshotRequestTemplate)(&requestTemplate,
2048 d_handle_p,
2049 subscriptionString,
2050 identity.handle(),
2051 const_cast<blpapi_CorrelationId_t *>(&correlationID.impl())));
2052
2053 return RequestTemplate(requestTemplate);
2054}
2055
2057inline blpapi_Session_t *Session::handle() const { return d_handle_p; }
2059
2060// --------------------------
2061// class SubscriptionIterator
2062// --------------------------
2063
2064inline SubscriptionIterator::SubscriptionIterator(Session *session)
2065 : d_isValid(false)
2066{
2067 assert(session);
2068
2069 d_handle_p = blpapi_SubscriptionItr_create(session->handle());
2070}
2071
2073{
2074 blpapi_SubscriptionItr_destroy(d_handle_p);
2075}
2076
2078{
2079 blpapi_CorrelationId_t nextCorrelationIdImpl;
2080 d_isValid = !blpapi_SubscriptionItr_next(d_handle_p,
2081 &d_subscriptionString,
2082 &nextCorrelationIdImpl,
2083 &d_status);
2084
2085 d_correlationId = d_isValid ? CorrelationId(nextCorrelationIdImpl)
2086 : CorrelationId();
2087
2088 return d_isValid;
2089}
2090
2091inline bool SubscriptionIterator::isValid() const { return d_isValid; }
2092
2094inline blpapi_SubscriptionIterator_t *SubscriptionIterator::handle() const
2095{
2096 return d_handle_p;
2097}
2099
2101{
2102 if (!isValid()) {
2103 ExceptionUtil::throwOnError(BLPAPI_ERROR_ILLEGAL_STATE);
2104 }
2105
2106 return d_subscriptionString;
2107}
2108
2110{
2111 if (!isValid()) {
2112 ExceptionUtil::throwOnError(BLPAPI_ERROR_ILLEGAL_STATE);
2113 }
2114
2115 return d_correlationId;
2116}
2117
2120{
2121 if (!isValid()) {
2122 ExceptionUtil::throwOnError(BLPAPI_ERROR_ILLEGAL_STATE);
2123 }
2124
2125 return static_cast<Session::SubscriptionStatus>(d_status);
2126}
2127
2128} // close namespace blpapi
2129} // close namespace BloombergLP
2130
2131#endif // ifdef __cplusplus
2132
2133#endif // INCLUDED_BLPAPI_SESSION
A common interface shared between publisher and consumer sessions.
Provide functions for dispatchtbl.
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:306
Definition blpapi_eventdispatcher.h:184
Definition blpapi_session.h:840
virtual bool processEvent(const Event &event, Session *session)=0
virtual ~EventHandler()=0
Definition blpapi_session.h:1682
Definition blpapi_event.h:517
Definition blpapi_event.h:325
static void throwOnError(int errorCode)
Definition blpapi_exception.h:556
Definition blpapi_identity.h:217
Definition blpapi_exception.h:268
Definition blpapi_requesttemplate.h:177
Definition blpapi_request.h:214
Definition blpapi_service.h:619
Definition blpapi_sessionoptions.h:1141
Definition blpapi_session.h:1011
virtual ~Session()
Definition blpapi_session.h:1722
SubscriptionStatus
Definition blpapi_session.h:1031
@ SUBSCRIBING
Initiated but no updates received.
Definition blpapi_session.h:1034
@ CANCELLED
No longer active, terminated by Application.
Definition blpapi_session.h:1038
@ SUBSCRIBED
Updates are flowing.
Definition blpapi_session.h:1036
@ UNSUBSCRIBED
No longer active, terminated by API.
Definition blpapi_session.h:1032
@ PENDING_CANCELLATION
Definition blpapi_session.h:1040
virtual int tryNextEvent(Event *event)
Definition blpapi_session.h:1750
virtual bool startAsync()
Definition blpapi_session.h:1729
::BloombergLP::blpapi::EventHandler EventHandler
Definition blpapi_session.h:1014
virtual Event nextEvent(int timeout=0)
Definition blpapi_session.h:1738
virtual void stop()
Definition blpapi_session.h:1734
friend void blpapi_eventHandlerAdapter(blpapi_Event_t *event, blpapi_Session_t *, void *userData)
virtual RequestTemplate createSnapshotRequestTemplate(const char *subscriptionString, const CorrelationId &statusCid, const Identity &identity=Identity())
Definition blpapi_session.h:2039
virtual void setStatusCorrelationId(const Service &service, const CorrelationId &correlationID)
Definition blpapi_session.h:1969
virtual bool start()
Definition blpapi_session.h:1724
virtual CorrelationId sendRequest(const Request &request, const CorrelationId &correlationId=CorrelationId(), EventQueue *eventQueue=0, const char *requestLabel=0, int requestLabelLen=0)
Definition blpapi_session.h:2007
virtual void stopAsync()
Definition blpapi_session.h:1736
virtual void unsubscribe(const SubscriptionList &subscriptionList)
Definition blpapi_session.h:1963
virtual void resubscribe(const SubscriptionList &subscriptions)
Definition blpapi_session.h:1832
virtual void subscribe(const SubscriptionList &subscriptionList, const Identity &identity, const char *requestLabel=0, int requestLabelLen=0)
Definition blpapi_session.h:1796
const CorrelationId & correlationId() const
Definition blpapi_session.h:2109
~SubscriptionIterator()
Definition blpapi_session.h:2072
bool isValid() const
Definition blpapi_session.h:2091
bool next()
Definition blpapi_session.h:2077
Session::SubscriptionStatus subscriptionStatus() const
Definition blpapi_session.h:2119
const char * subscriptionString() const
Definition blpapi_session.h:2100
Definition blpapi_subscriptionlist.h:414
std::vector< SubscriptionPreprocessError > SubscriptionPreprocessErrors
Definition blpapi_session.h:962
Definition blpapi_abstractsession.h:452
std::ostream & operator<<(std::ostream &os, const CorrelationId &correlator)
Definition blpapi_correlationid.h:761
Definition blpapi_abstractsession.h:451
CorrelationId correlationId
Definition blpapi_session.h:882
SubscriptionPreprocessError(const CorrelationId &correlationId, const std::string &subscriptionString, int code, const char *description)
Definition blpapi_session.h:890
std::string description
Definition blpapi_session.h:888
int code
Definition blpapi_session.h:884
std::string subscriptionString
Definition blpapi_session.h:883
@ e_invalidSubscriptionString
Invalid subscription string.
Definition blpapi_session.h:870
@ e_correlationIdError
Definition blpapi_session.h:874
@ e_returnIndividualErrors
Definition blpapi_session.h:954
@ e_failOnFirstError
Definition blpapi_session.h:947