BLPAPI C++ 3.26.7
Loading...
Searching...
No Matches
blpapi_providersession.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_PROVIDERSESSION
39#define INCLUDED_BLPAPI_PROVIDERSESSION
40
155
156#ifndef INCLUDED_BLPAPI_ABSTRACTSESSION
158#endif
159
160#ifndef INCLUDED_BLPAPI_CALL
161#include <blpapi_call.h>
162#endif
163
164#ifndef INCLUDED_BLPAPI_CORRELATIONID
165#include <blpapi_correlationid.h>
166#endif
167
168#ifndef INCLUDED_BLPAPI_DEFS
169#include <blpapi_defs.h>
170#endif
171
172#ifndef INCLUDED_BLPAPI_EVENT
173#include <blpapi_event.h>
174#endif
175
176#ifndef INCLUDED_BLPAPI_EVENTDISPATCHER
178#endif
179
180#ifndef INCLUDED_BLPAPI_IDENTITY
181#include <blpapi_identity.h>
182#endif
183
184#ifndef INCLUDED_BLPAPI_REQUEST
185#include <blpapi_request.h>
186#endif
187
188#ifndef INCLUDED_BLPAPI_RESOLUTIONLIST
190#endif
191
192#ifndef INCLUDED_BLPAPI_SERVICE
193#include <blpapi_service.h>
194#endif
195
196#ifndef INCLUDED_BLPAPI_SESSIONOPTIONS
198#endif
199
200#ifndef INCLUDED_BLPAPI_SUBSCRIPTIONLIST
202#endif
203
204#ifndef INCLUDED_BLPAPI_TOPIC
205#include <blpapi_topic.h>
206#endif
207
208#ifndef INCLUDED_BLPAPI_TOPICLIST
209#include <blpapi_topiclist.h>
210#endif
211
212#ifndef INCLUDED_BLPAPI_TYPES
213#include <blpapi_types.h>
214#endif
215
216#include <stddef.h>
217
218#ifdef __cplusplus
219extern "C" {
220#endif
221
223
226
227struct blpapi_ServiceRegistrationOptions;
228typedef struct blpapi_ServiceRegistrationOptions
229 blpapi_ServiceRegistrationOptions_t;
230
238typedef void (*blpapi_ProviderEventHandler_t)(blpapi_Event_t *event,
239 blpapi_ProviderSession_t *session,
240 void *userData);
241
264BLPAPI_EXPORT
265blpapi_ProviderSession_t *blpapi_ProviderSession_create(
266 blpapi_SessionOptions_t *parameters,
267 blpapi_ProviderEventHandler_t handler,
268 blpapi_EventDispatcher_t *dispatcher,
269 void *userData);
270
280BLPAPI_EXPORT
281void blpapi_ProviderSession_destroy(blpapi_ProviderSession_t *session);
282
295BLPAPI_EXPORT
296int blpapi_ProviderSession_start(blpapi_ProviderSession_t *session);
297
308BLPAPI_EXPORT
309int blpapi_ProviderSession_startAsync(blpapi_ProviderSession_t *session);
310
324BLPAPI_EXPORT
325int blpapi_ProviderSession_stop(blpapi_ProviderSession_t *session);
326
339BLPAPI_EXPORT
340int blpapi_ProviderSession_stopAsync(blpapi_ProviderSession_t *session);
341
359BLPAPI_EXPORT
360int blpapi_ProviderSession_nextEvent(blpapi_ProviderSession_t *session,
361 blpapi_Event_t **eventPointer,
362 unsigned int timeoutInMilliseconds);
363
375BLPAPI_EXPORT
376int blpapi_ProviderSession_tryNextEvent(
377 blpapi_ProviderSession_t *session, blpapi_Event_t **eventPointer);
378
399BLPAPI_EXPORT
400int blpapi_ProviderSession_registerService(blpapi_ProviderSession_t *session,
401 const char *serviceName,
402 const blpapi_Identity_t *identity,
403 blpapi_ServiceRegistrationOptions_t *registrationOptions);
404
423BLPAPI_EXPORT
424int blpapi_ProviderSession_activateSubServiceCodeRange(
425 blpapi_ProviderSession_t *session,
426 const char *serviceName,
427 int begin,
428 int end,
429 int priority);
430
446BLPAPI_EXPORT
447int blpapi_ProviderSession_deactivateSubServiceCodeRange(
448 blpapi_ProviderSession_t *session,
449 const char *serviceName,
450 int begin,
451 int end);
452
472BLPAPI_EXPORT
473int blpapi_ProviderSession_registerServiceAsync(
474 blpapi_ProviderSession_t *session,
475 const char *serviceName,
476 const blpapi_Identity_t *identity,
477 blpapi_CorrelationId_t *correlationId,
478 blpapi_ServiceRegistrationOptions_t *registrationOptions);
479
499BLPAPI_EXPORT
500int blpapi_ProviderSession_deregisterService(
501 blpapi_ProviderSession_t *session, const char *serviceName);
502
523BLPAPI_EXPORT
524int blpapi_ProviderSession_resolve(blpapi_ProviderSession_t *session,
525 blpapi_ResolutionList_t *resolutionList,
526 int resolveMode,
527 const blpapi_Identity_t *identity);
528
547BLPAPI_EXPORT
548int blpapi_ProviderSession_resolveAsync(blpapi_ProviderSession_t *session,
549 const blpapi_ResolutionList_t *resolutionList,
550 int resolveMode,
551 const blpapi_Identity_t *identity);
552
572BLPAPI_EXPORT
573int blpapi_ProviderSession_createTopics(blpapi_ProviderSession_t *session,
574 blpapi_TopicList_t *topicList,
575 int resolveMode,
576 const blpapi_Identity_t *identity);
577
595BLPAPI_EXPORT
596int blpapi_ProviderSession_createTopicsAsync(blpapi_ProviderSession_t *session,
597 const blpapi_TopicList_t *topicList,
598 int resolveMode,
599 const blpapi_Identity_t *identity);
600
617BLPAPI_EXPORT
618int blpapi_ProviderSession_getTopic(blpapi_ProviderSession_t *session,
619 const blpapi_Message_t *message,
620 blpapi_Topic_t **topic);
621
639BLPAPI_EXPORT
640int blpapi_ProviderSession_createTopic(blpapi_ProviderSession_t *session,
641 const blpapi_Message_t *message,
642 blpapi_Topic_t **topic);
643
659BLPAPI_EXPORT
660int blpapi_ProviderSession_createServiceStatusTopic(
661 blpapi_ProviderSession_t *session,
662 const blpapi_Service_t *service,
663 blpapi_Topic_t **topic);
664
683BLPAPI_EXPORT
684int blpapi_ProviderSession_deleteTopics(blpapi_ProviderSession_t *session,
685 const blpapi_Topic_t **topics,
686 size_t numTopics);
687
705BLPAPI_EXPORT
706int blpapi_ProviderSession_terminateSubscriptionsOnTopics(
707 blpapi_ProviderSession_t *session,
708 const blpapi_Topic_t **topics,
709 size_t numTopics,
710 const char *message);
711
726BLPAPI_EXPORT
727int blpapi_ProviderSession_publish(
728 blpapi_ProviderSession_t *session, blpapi_Event_t *event);
729
746BLPAPI_EXPORT
747int blpapi_ProviderSession_sendResponse(blpapi_ProviderSession_t *session,
748 blpapi_Event_t *event,
749 int isPartialResponse);
750
760BLPAPI_EXPORT
761blpapi_AbstractSession_t *blpapi_ProviderSession_getAbstractSession(
762 blpapi_ProviderSession_t *session);
763
781BLPAPI_EXPORT
782int blpapi_ProviderSession_flushPublishedEvents(
783 blpapi_ProviderSession_t *session, int *allFlushed, int timeoutMsecs);
784
785// ServiceRegistrationOptions
786
797BLPAPI_EXPORT
798blpapi_ServiceRegistrationOptions_t *blpapi_ServiceRegistrationOptions_create(
799 void);
800
810BLPAPI_EXPORT
811blpapi_ServiceRegistrationOptions_t *
812blpapi_ServiceRegistrationOptions_duplicate(
813 const blpapi_ServiceRegistrationOptions_t *parameters);
814
822BLPAPI_EXPORT
823void blpapi_ServiceRegistrationOptions_destroy(
824 blpapi_ServiceRegistrationOptions_t *parameters);
825
834BLPAPI_EXPORT
835void blpapi_ServiceRegistrationOptions_copy(
836 blpapi_ServiceRegistrationOptions_t *lhs,
837 const blpapi_ServiceRegistrationOptions_t *rhs);
838
839// SUBSERVICE CODES
855BLPAPI_EXPORT
856int blpapi_ServiceRegistrationOptions_addActiveSubServiceCodeRange(
857 blpapi_ServiceRegistrationOptions_t *parameters,
858 int start,
859 int end,
860 int priority);
861
868BLPAPI_EXPORT
869void blpapi_ServiceRegistrationOptions_removeAllActiveSubServiceCodeRanges(
870 blpapi_ServiceRegistrationOptions_t *parameters);
871
887BLPAPI_EXPORT
888void blpapi_ServiceRegistrationOptions_setGroupId(
889 blpapi_ServiceRegistrationOptions_t *parameters,
890 const char *groupId,
891 unsigned int groupIdLength);
892
906BLPAPI_EXPORT
907int blpapi_ServiceRegistrationOptions_setServicePriority(
908 blpapi_ServiceRegistrationOptions_t *parameters, int priority);
909
919BLPAPI_EXPORT
920void blpapi_ServiceRegistrationOptions_setPartsToRegister(
921 blpapi_ServiceRegistrationOptions_t *parameters, int parts);
922
938BLPAPI_EXPORT
939int blpapi_ServiceRegistrationOptions_getGroupId(
940 blpapi_ServiceRegistrationOptions_t *parameters,
941 char *groupdIdBuffer,
942 int *groupIdLength);
943
951BLPAPI_EXPORT
952int blpapi_ServiceRegistrationOptions_getServicePriority(
953 blpapi_ServiceRegistrationOptions_t *parameters);
954
963BLPAPI_EXPORT
964int blpapi_ServiceRegistrationOptions_getPartsToRegister(
965 blpapi_ServiceRegistrationOptions_t *parameters);
966
969
970#ifdef __cplusplus
971}
972
973#include <cassert>
974
975namespace BloombergLP {
976namespace blpapi {
983
985extern "C" inline void blpapi_providerEventHandlerAdapter(
986 blpapi_Event_t *event,
987 blpapi_ProviderSession_t *session,
988 void *userData);
990
991class ProviderSession;
992// ==========================
993// class ProviderEventHandler
994// ==========================
995
997 public:
999
1000 virtual bool processEvent(const Event& event, ProviderSession *session)
1001 = 0;
1012};
1013
1025
1026 blpapi_ServiceRegistrationOptions_t *d_handle_p;
1027
1028 public:
1034 PRIORITY_LOW = BLPAPI_SERVICEREGISTRATIONOPTIONS_PRIORITY_LOW,
1036 PRIORITY_MEDIUM = BLPAPI_SERVICEREGISTRATIONOPTIONS_PRIORITY_MEDIUM,
1038 PRIORITY_HIGH = BLPAPI_SERVICEREGISTRATIONOPTIONS_PRIORITY_HIGH
1040 };
1041
1045
1046 PART_PUBLISHING = BLPAPI_REGISTRATIONPARTS_PUBLISHING,
1048
1049 PART_OPERATIONS = BLPAPI_REGISTRATIONPARTS_OPERATIONS,
1052
1054 = BLPAPI_REGISTRATIONPARTS_SUBSCRIBER_RESOLUTION,
1057
1059 = BLPAPI_REGISTRATIONPARTS_PUBLISHER_RESOLUTION,
1063
1064 PART_DEFAULT = BLPAPI_REGISTRATIONPARTS_DEFAULT
1067 };
1068
1073
1078
1083
1085 const ServiceRegistrationOptions& rhs);
1090
1091 void setGroupId(const char *groupId, unsigned int groupIdLength);
1102
1103 int setServicePriority(int priority);
1115
1116 void setPartsToRegister(int parts);
1123
1124 void addActiveSubServiceCodeRange(int begin, int end, int priority);
1134
1139
1140 int getGroupId(char *groupId, int *groupIdLength) const;
1149
1150 int getServicePriority() const;
1157
1158 int getPartsToRegister() const;
1163
1165 blpapi_ServiceRegistrationOptions_t *handle() const;
1167};
1168
1198class ProviderSession : public AbstractSession {
1199
1200 public:
1202
1203 private:
1204 blpapi_ProviderSession_t *d_handle_p;
1205 EventHandler *d_eventHandler_p;
1206
1207 private:
1208 friend void blpapi_providerEventHandlerAdapter(blpapi_Event_t *event,
1209 blpapi_ProviderSession_t *session,
1210 void *userData);
1211
1212 void dispatchEvent(const Event& event);
1213
1214 private:
1215 // NOT IMPLEMENTED
1216 ProviderSession(const ProviderSession&);
1217 ProviderSession& operator=(const ProviderSession&);
1218
1219 public:
1221 AUTO_REGISTER_SERVICES = BLPAPI_RESOLVEMODE_AUTO_REGISTER_SERVICES,
1223 DONT_REGISTER_SERVICES = BLPAPI_RESOLVEMODE_DONT_REGISTER_SERVICES
1226 };
1227
1228 explicit ProviderSession(const SessionOptions& options = SessionOptions(),
1229 EventHandler *eventHandler = 0,
1230 EventDispatcher *eventDispatcher = 0);
1264
1266 explicit ProviderSession(blpapi_ProviderSession_t *handle);
1268
1269 virtual ~ProviderSession();
1273
1274 // MANIPULATORS
1275 virtual bool start();
1279
1280 virtual bool startAsync();
1284
1285 virtual void stop();
1289
1290 virtual void stopAsync();
1294
1295 virtual Event nextEvent(int timeout = 0);
1299
1300 virtual int tryNextEvent(Event *event);
1304
1305 virtual bool registerService(const char *serviceName,
1306 const Identity& providerIdentity = Identity(),
1307 const ServiceRegistrationOptions& registrationOptions
1331
1332 virtual void activateSubServiceCodeRange(
1333 const char *serviceName, int begin, int end, int priority);
1345
1346 virtual void deactivateSubServiceCodeRange(
1347 const char *serviceName, int begin, int end);
1356
1357 virtual CorrelationId registerServiceAsync(const char *serviceName,
1358 const Identity& providerIdentity = Identity(),
1359 const CorrelationId& correlationId = CorrelationId(),
1360 const ServiceRegistrationOptions& registrationOptions
1385
1386 virtual bool deregisterService(const char *serviceName);
1402
1403 virtual void resolve(ResolutionList *resolutionList,
1404 ResolveMode resolveMode = DONT_REGISTER_SERVICES,
1405 const Identity& providerIdentity = Identity());
1429
1430 virtual void resolveAsync(const ResolutionList& resolutionList,
1431 ResolveMode resolveMode = DONT_REGISTER_SERVICES,
1432 const Identity& providerIdentity = Identity());
1454
1455 virtual Topic getTopic(const Message& message);
1464
1465 virtual Topic createServiceStatusTopic(const Service& service);
1471
1472 virtual void publish(const Event& event);
1476
1477 virtual void sendResponse(
1478 const Event& event, bool isPartialResponse = false);
1484
1485 virtual void createTopics(TopicList *topicList,
1486 ResolveMode resolveMode = DONT_REGISTER_SERVICES,
1487 const Identity& providerIdentity = Identity());
1504
1505 virtual void createTopicsAsync(const TopicList& topicList,
1506 ResolveMode resolveMode = DONT_REGISTER_SERVICES,
1507 const Identity& providerIdentity = Identity());
1521
1522 virtual void deleteTopic(const Topic& topic);
1538
1539 virtual void deleteTopics(const std::vector<Topic>& topics);
1544
1545 virtual void deleteTopics(const Topic *topics, size_t numTopics);
1551
1552 virtual void terminateSubscriptionsOnTopic(
1553 const Topic& topic, const char *message = 0);
1562
1563 virtual void terminateSubscriptionsOnTopics(
1564 const std::vector<Topic>& topics, const char *message = 0);
1572
1573 virtual void terminateSubscriptionsOnTopics(
1574 const Topic *topics, size_t numTopics, const char *message = 0);
1583
1584 virtual bool flushPublishedEvents(int timeoutMsecs);
1596
1598 blpapi_ProviderSession_t *handle() const;
1603
1605 virtual Topic createTopic(const Message& message);
1612};
1613
1616
1617namespace util {
1618
1622
1623constexpr const char *to_string(
1628
1629constexpr const char *to_string(
1634
1635constexpr const char *to_string(ProviderSession::ResolveMode resolveMode);
1639
1641
1642} // close namespace util
1643
1644//=============================================================================
1645// INLINE FUNCTION DEFINITIONS
1646//=============================================================================
1647
1648// ---------------------
1649// class ProviderSession
1650// ---------------------
1651
1652inline ProviderSession::ProviderSession(const SessionOptions& parameters,
1653 EventHandler *handler,
1654 EventDispatcher *dispatcher)
1655 : d_eventHandler_p(handler)
1656{
1657 if (dispatcher && !handler) {
1659 "Event dispatcher provided without handler.");
1660 }
1661 d_handle_p = blpapi_ProviderSession_create(parameters.handle(),
1663 dispatcher ? dispatcher->impl() : 0,
1664 this);
1665 initAbstractSessionHandle(
1666 blpapi_ProviderSession_getAbstractSession(d_handle_p));
1667}
1668
1670inline ProviderSession::ProviderSession(blpapi_ProviderSession_t *newHandle)
1671 : d_handle_p(newHandle)
1672{
1673 initAbstractSessionHandle(
1674 blpapi_ProviderSession_getAbstractSession(d_handle_p));
1675}
1677
1679{
1680 blpapi_ProviderSession_destroy(d_handle_p);
1681}
1682
1684{
1685 return blpapi_ProviderSession_start(d_handle_p) ? false : true;
1686}
1687
1689{
1690 return blpapi_ProviderSession_startAsync(d_handle_p) ? false : true;
1691}
1692
1694{
1695 blpapi_ProviderSession_stop(d_handle_p);
1696}
1697
1699{
1700 blpapi_ProviderSession_stopAsync(d_handle_p);
1701}
1702
1704{
1705 if (timeout < 0) {
1706 throw InvalidArgumentException("Timeout must be >= 0.");
1707 }
1708
1709 blpapi_Event_t *event = 0;
1710 ExceptionUtil::throwOnError(blpapi_ProviderSession_nextEvent(
1711 d_handle_p, &event, static_cast<unsigned>(timeout)));
1712 return Event(event);
1713}
1714
1716{
1717 assert(event);
1718
1719 blpapi_Event_t *impl = 0;
1720 int ret = blpapi_ProviderSession_tryNextEvent(d_handle_p, &impl);
1721 if (0 == ret) {
1722 *event = Event(impl);
1723 }
1724 return ret;
1725}
1726
1727inline bool ProviderSession::registerService(const char *serviceName,
1728 const Identity& identity,
1729 const ServiceRegistrationOptions& registrationOptions)
1730{
1731 return blpapi_ProviderSession_registerService(d_handle_p,
1732 serviceName,
1733 identity.handle(),
1734 registrationOptions.handle())
1735 ? false
1736 : true;
1737}
1738
1740 const char *serviceName, int begin, int end, int priority)
1741{
1743 BLPAPI_CALL_PROVIDERSESSION_ACTIVATESUBSERVICECODERANGE(
1744 d_handle_p, serviceName, begin, end, priority));
1745}
1746
1748 const char *serviceName, int begin, int end)
1749{
1751 BLPAPI_CALL_PROVIDERSESSION_DEACTIVATESUBSERVICECODERANGE(
1752 d_handle_p, serviceName, begin, end));
1753}
1754
1756 const char *serviceName,
1757 const Identity& identity,
1758 const CorrelationId& correlationId,
1759 const ServiceRegistrationOptions& registrationOptions)
1760{
1761 blpapi_CorrelationId_t retv = correlationId.impl();
1763 blpapi_ProviderSession_registerServiceAsync(d_handle_p,
1764 serviceName,
1765 identity.handle(),
1766 &retv,
1767 registrationOptions.handle()));
1768
1769 return CorrelationId(retv);
1770}
1771
1772inline bool ProviderSession::deregisterService(const char *serviceName)
1773{
1774 return BLPAPI_CALL_PROVIDERSESSION_DEREGISTERSERVICE(
1775 d_handle_p, serviceName)
1776 == 0
1777 ? true
1778 : false;
1779}
1780
1781inline void ProviderSession::resolve(ResolutionList *resolutionList,
1782 ResolveMode resolveMode,
1783 const Identity& identity)
1784{
1785 assert(resolutionList);
1786
1787 ExceptionUtil::throwOnError(blpapi_ProviderSession_resolve(d_handle_p,
1788 resolutionList->impl(),
1789 resolveMode,
1790 identity.handle()));
1791 return;
1792}
1793
1794inline void ProviderSession::resolveAsync(const ResolutionList& resolutionList,
1795 ResolveMode resolveMode,
1796 const Identity& identity)
1797{
1798 ExceptionUtil::throwOnError(blpapi_ProviderSession_resolveAsync(d_handle_p,
1799 resolutionList.impl(),
1800 resolveMode,
1801 identity.handle()));
1802 return;
1803}
1804
1806{
1807 blpapi_Topic_t *topic = 0;
1808 ExceptionUtil::throwOnError(blpapi_ProviderSession_createTopic(
1809 d_handle_p, message.impl(), &topic));
1810
1811 return Topic(topic);
1812}
1813
1815{
1816 blpapi_Topic_t *topic = 0;
1817 ExceptionUtil::throwOnError(blpapi_ProviderSession_getTopic(
1818 d_handle_p, message.impl(), &topic));
1819
1820 return Topic(topic);
1821}
1822
1824{
1825 blpapi_Topic_t *topic = 0;
1827 blpapi_ProviderSession_createServiceStatusTopic(
1828 d_handle_p, service.handle(), &topic));
1829
1830 return Topic(topic);
1831}
1832
1834 ResolveMode resolveMode,
1835 const Identity& identity)
1836{
1837 assert(topicList);
1838
1839 ExceptionUtil::throwOnError(blpapi_ProviderSession_createTopics(
1840 d_handle_p, topicList->impl(), resolveMode, identity.handle()));
1841 return;
1842}
1843
1845 ResolveMode resolveMode,
1846 const Identity& identity)
1847{
1848 ExceptionUtil::throwOnError(blpapi_ProviderSession_createTopicsAsync(
1849 d_handle_p, topicList.impl(), resolveMode, identity.handle()));
1850 return;
1851}
1852
1853inline void ProviderSession::deleteTopic(const Topic& topic)
1854{
1855 const blpapi_Topic_t *topicImpl = topic.impl();
1856 ExceptionUtil::throwOnError(BLPAPI_CALL_PROVIDERSESSION_DELETETOPICS(
1857 d_handle_p, &topicImpl, 1));
1858}
1859
1860inline void ProviderSession::deleteTopics(const std::vector<Topic>& topics)
1861{
1862 if (topics.size() == 0) {
1863 return;
1864 }
1865 std::vector<const blpapi_Topic_t *> topicImplList;
1866 topicImplList.reserve(topics.size());
1867 for (std::vector<Topic>::const_iterator it = topics.begin();
1868 it != topics.end();
1869 ++it) {
1870 topicImplList.push_back(it->impl());
1871 }
1872 ExceptionUtil::throwOnError(BLPAPI_CALL_PROVIDERSESSION_DELETETOPICS(
1873 d_handle_p, &topicImplList[0], topicImplList.size()));
1874}
1875
1877 const Topic *topics, size_t numTopics)
1878{
1879 if (numTopics == 0) {
1880 return;
1881 }
1882
1883 assert(topics);
1884
1885 std::vector<const blpapi_Topic_t *> topicImplList;
1886 topicImplList.reserve(numTopics);
1887 for (size_t i = 0; i < numTopics; ++i) {
1888 topicImplList.push_back(topics[i].impl());
1889 }
1890 ExceptionUtil::throwOnError(BLPAPI_CALL_PROVIDERSESSION_DELETETOPICS(
1891 d_handle_p, &topicImplList[0], topicImplList.size()));
1892}
1893
1895 const Topic& topic, const char *message)
1896{
1897 const blpapi_Topic_t *topicImpl = topic.impl();
1899 BLPAPI_CALL_PROVIDERSESSION_TERMINATESUBSCRIPTIONSONTOPICS(
1900 d_handle_p, &topicImpl, 1, message));
1901}
1902
1904 const std::vector<Topic>& topics, const char *message)
1905{
1906 if (topics.empty()) {
1907 return;
1908 }
1909 terminateSubscriptionsOnTopics(&topics.front(), topics.size(), message);
1910}
1911
1913 const Topic *topics, size_t numTopics, const char *message)
1914{
1915 if (numTopics == 0) {
1916 return;
1917 }
1918
1919 assert(topics);
1920
1921 std::vector<const blpapi_Topic_t *> topicImplList;
1922 topicImplList.reserve(numTopics);
1923 for (size_t i = 0; i < numTopics; ++i) {
1924 topicImplList.push_back(topics[i].impl());
1925 }
1927 BLPAPI_CALL_PROVIDERSESSION_TERMINATESUBSCRIPTIONSONTOPICS(
1928 d_handle_p,
1929 &topicImplList[0],
1930 topicImplList.size(),
1931 message));
1932}
1933
1934inline void ProviderSession::publish(const Event& event)
1935{
1937 blpapi_ProviderSession_publish(d_handle_p, event.impl()));
1938 return;
1939}
1940
1942 const Event& event, bool isPartialResponse)
1943{
1944 ExceptionUtil::throwOnError(blpapi_ProviderSession_sendResponse(
1945 d_handle_p, event.impl(), isPartialResponse));
1946 return;
1947}
1948
1950inline blpapi_ProviderSession_t *ProviderSession::handle() const
1951{
1952 return d_handle_p;
1953}
1955
1956inline void ProviderSession::dispatchEvent(const Event& event)
1957{
1958 assert(d_eventHandler_p);
1959
1960 d_eventHandler_p->processEvent(event, this);
1961}
1962
1963inline bool ProviderSession::flushPublishedEvents(int timeoutMsecs)
1964{
1965 int allFlushed = 0;
1966 int rc = BLPAPI_CALL(blpapi_ProviderSession_flushPublishedEvents)(
1967 d_handle_p, &allFlushed, timeoutMsecs);
1968 if (rc != 0) {
1970 }
1971 return allFlushed ? true : false;
1972}
1973
1974// --------------------------------
1975// class ServiceRegistrationOptions
1976// --------------------------------
1977
1979{
1980 d_handle_p = blpapi_ServiceRegistrationOptions_create();
1981}
1982
1984 const ServiceRegistrationOptions& original)
1985{
1986 d_handle_p
1987 = blpapi_ServiceRegistrationOptions_duplicate(original.handle());
1988}
1989
1991{
1992 blpapi_ServiceRegistrationOptions_destroy(d_handle_p);
1993}
1994
1996 const ServiceRegistrationOptions& rhs)
1997{
1998 blpapi_ServiceRegistrationOptions_copy(this->handle(), rhs.handle());
1999 return *this;
2000}
2001
2002// SUBSERVICE CODES
2004 int begin, int end, int priority)
2005{
2007 BLPAPI_CALL_SERVICEREGISTRATIONOPTIONS_ADDACTIVATESUBSERVICECODERANGE(
2008 d_handle_p, begin, end, priority));
2009}
2010
2012{
2013 BLPAPI_CALL_SERVICEREGISTRATIONOPTIONS_REMOVEALLACTIVESUBSERVICECODERANGES(
2014 d_handle_p);
2015}
2016
2018 const char *groupId, unsigned int groupIdLength)
2019{
2020 blpapi_ServiceRegistrationOptions_setGroupId(
2021 d_handle_p, groupId, groupIdLength);
2022}
2023
2025{
2026 return blpapi_ServiceRegistrationOptions_setServicePriority(
2027 d_handle_p, priority);
2028}
2029
2031{
2032 BLPAPI_CALL_SERVICEREGISTRATIONOPTIONS_SETPARTSTOREGISTER(
2033 d_handle_p, parts);
2034}
2035
2037 char *groupIdBuffer, int *groupIdLength) const
2038{
2039 return blpapi_ServiceRegistrationOptions_getGroupId(
2040 d_handle_p, groupIdBuffer, groupIdLength);
2041}
2042
2044{
2045 return blpapi_ServiceRegistrationOptions_getServicePriority(d_handle_p);
2046}
2047
2049{
2050 return BLPAPI_CALL_SERVICEREGISTRATIONOPTIONS_GETPARTSTOREGISTER(
2051 d_handle_p);
2052}
2053
2055inline blpapi_ServiceRegistrationOptions_t *
2056ServiceRegistrationOptions::handle() const
2057{
2058 return d_handle_p;
2059}
2061
2062// --------------------------
2063// class ProviderEventHandler
2064// --------------------------
2065
2067extern "C" inline void blpapi_providerEventHandlerAdapter(
2068 blpapi_Event_t *event, blpapi_ProviderSession_t *, void *userData)
2069{
2070 assert(userData);
2071
2072 reinterpret_cast<ProviderSession *>(userData)->dispatchEvent(Event(event));
2073}
2075
2076// --------------
2077// namespace util
2078// --------------
2079constexpr const char *util::to_string(
2081{
2082 switch (priority) {
2084 return "PRIORITY_LOW";
2086 return "PRIORITY_MEDIUM";
2088 return "PRIORITY_HIGH";
2089 }
2090 // Silence warnings on some compilers
2091 return "UNDEFINED";
2092}
2093
2094// --------------
2095// namespace util
2096// --------------
2097constexpr const char *util::to_string(
2099{
2100 switch (parts) {
2102 return "PART_PUBLISHING";
2104 return "PART_OPERATIONS";
2106 return "PART_SUBSCRIBER_RESOLUTION";
2108 return "PART_PUBLISHER_RESOLUTION";
2110 return "PART_DEFAULT";
2111 }
2112 // Silence warnings on some compilers
2113 return "UNDEFINED";
2114}
2115
2116// --------------
2117// namespace util
2118// --------------
2119constexpr const char *util::to_string(ProviderSession::ResolveMode resolveMode)
2120{
2121 switch (resolveMode) {
2123 return "AUTO_REGISTER_SERVICES";
2125 return "DONT_REGISTER_SERVICES";
2126 }
2127 // Silence warnings on some compilers
2128 return "UNDEFINED";
2129}
2130
2131} // close namespace blpapi
2132} // close namespace BloombergLP
2133
2134#endif // #ifdef __cplusplus
2135#endif // #ifndef INCLUDED_BLPAPI_PROVIDERSESSION
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 representation of a list of topics.
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 representation of a Topic.
Provide a representation of a list of topics.
Provide BLPAPI types.
Definition blpapi_correlationid.h:322
Definition blpapi_eventdispatcher.h:184
Definition blpapi_session.h:840
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_message.h:344
Definition blpapi_providersession.h:996
virtual ~ProviderEventHandler()
Definition blpapi_providersession.h:998
virtual bool processEvent(const Event &event, ProviderSession *session)=0
Definition blpapi_providersession.h:1198
virtual void deleteTopic(const Topic &topic)
Definition blpapi_providersession.h:1853
virtual void deleteTopics(const std::vector< Topic > &topics)
Definition blpapi_providersession.h:1860
virtual void publish(const Event &event)
Definition blpapi_providersession.h:1934
virtual ~ProviderSession()
Definition blpapi_providersession.h:1678
virtual int tryNextEvent(Event *event)
Definition blpapi_providersession.h:1715
virtual void resolve(ResolutionList *resolutionList, ResolveMode resolveMode=DONT_REGISTER_SERVICES, const Identity &providerIdentity=Identity())
Definition blpapi_providersession.h:1781
virtual void activateSubServiceCodeRange(const char *serviceName, int begin, int end, int priority)
Definition blpapi_providersession.h:1739
virtual bool registerService(const char *serviceName, const Identity &providerIdentity=Identity(), const ServiceRegistrationOptions &registrationOptions=ServiceRegistrationOptions())
Definition blpapi_providersession.h:1727
virtual bool startAsync()
Definition blpapi_providersession.h:1688
virtual Topic createServiceStatusTopic(const Service &service)
Definition blpapi_providersession.h:1823
virtual Topic createTopic(const Message &message)
Definition blpapi_providersession.h:1805
virtual void deactivateSubServiceCodeRange(const char *serviceName, int begin, int end)
Definition blpapi_providersession.h:1747
virtual Topic getTopic(const Message &message)
Definition blpapi_providersession.h:1814
virtual void sendResponse(const Event &event, bool isPartialResponse=false)
Definition blpapi_providersession.h:1941
virtual Event nextEvent(int timeout=0)
Definition blpapi_providersession.h:1703
ResolveMode
Definition blpapi_providersession.h:1220
@ DONT_REGISTER_SERVICES
Definition blpapi_providersession.h:1223
@ AUTO_REGISTER_SERVICES
Try to register services found in ResolutionList if necessary.
Definition blpapi_providersession.h:1221
virtual void stop()
Definition blpapi_providersession.h:1693
virtual void createTopics(TopicList *topicList, ResolveMode resolveMode=DONT_REGISTER_SERVICES, const Identity &providerIdentity=Identity())
Definition blpapi_providersession.h:1833
friend void blpapi_providerEventHandlerAdapter(blpapi_Event_t *event, blpapi_ProviderSession_t *session, void *userData)
virtual void createTopicsAsync(const TopicList &topicList, ResolveMode resolveMode=DONT_REGISTER_SERVICES, const Identity &providerIdentity=Identity())
Definition blpapi_providersession.h:1844
::BloombergLP::blpapi::ProviderEventHandler EventHandler
Definition blpapi_providersession.h:1201
virtual void terminateSubscriptionsOnTopic(const Topic &topic, const char *message=0)
Definition blpapi_providersession.h:1894
virtual bool start()
Definition blpapi_providersession.h:1683
virtual bool flushPublishedEvents(int timeoutMsecs)
Definition blpapi_providersession.h:1963
virtual bool deregisterService(const char *serviceName)
Definition blpapi_providersession.h:1772
virtual void stopAsync()
Definition blpapi_providersession.h:1698
virtual CorrelationId registerServiceAsync(const char *serviceName, const Identity &providerIdentity=Identity(), const CorrelationId &correlationId=CorrelationId(), const ServiceRegistrationOptions &registrationOptions=ServiceRegistrationOptions())
Definition blpapi_providersession.h:1755
virtual void resolveAsync(const ResolutionList &resolutionList, ResolveMode resolveMode=DONT_REGISTER_SERVICES, const Identity &providerIdentity=Identity())
Definition blpapi_providersession.h:1794
virtual void terminateSubscriptionsOnTopics(const std::vector< Topic > &topics, const char *message=0)
Definition blpapi_providersession.h:1903
Definition blpapi_resolutionlist.h:418
Definition blpapi_providersession.h:1024
int getGroupId(char *groupId, int *groupIdLength) const
Definition blpapi_providersession.h:2036
void removeAllActiveSubServiceCodeRanges()
Definition blpapi_providersession.h:2011
ServiceRegistrationOptions()
Definition blpapi_providersession.h:1978
void setGroupId(const char *groupId, unsigned int groupIdLength)
Definition blpapi_providersession.h:2017
ServiceRegistrationOptions & operator=(const ServiceRegistrationOptions &rhs)
Definition blpapi_providersession.h:1995
int getPartsToRegister() const
Definition blpapi_providersession.h:2048
int setServicePriority(int priority)
Definition blpapi_providersession.h:2024
~ServiceRegistrationOptions()
Definition blpapi_providersession.h:1990
int getServicePriority() const
Definition blpapi_providersession.h:2043
RegistrationParts
Definition blpapi_providersession.h:1044
@ PART_PUBLISHING
register to receive subscribe and unsubscribe messages
Definition blpapi_providersession.h:1046
@ PART_DEFAULT
Definition blpapi_providersession.h:1064
@ PART_OPERATIONS
Definition blpapi_providersession.h:1049
@ PART_PUBLISHER_RESOLUTION
Definition blpapi_providersession.h:1058
@ PART_SUBSCRIBER_RESOLUTION
Definition blpapi_providersession.h:1053
void setPartsToRegister(int parts)
Definition blpapi_providersession.h:2030
ServiceRegistrationPriority
Definition blpapi_providersession.h:1033
@ PRIORITY_MEDIUM
Medium priority (INT_MAX/2)
Definition blpapi_providersession.h:1036
@ PRIORITY_LOW
Low priority (0)
Definition blpapi_providersession.h:1034
@ PRIORITY_HIGH
High priority (INT_MAX)
Definition blpapi_providersession.h:1038
void addActiveSubServiceCodeRange(int begin, int end, int priority)
Definition blpapi_providersession.h:2003
Definition blpapi_service.h:616
Definition blpapi_sessionoptions.h:1141
Definition blpapi_topiclist.h:337
Definition blpapi_topic.h:177
constexpr const char * to_string(CorrelationId::ValueType valueType)
Definition blpapi_correlationid.h:830
Definition blpapi_abstractsession.h:448
Definition blpapi_abstractsession.h:447