BLPAPI C++ 3.26.6
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
498BLPAPI_EXPORT
499int blpapi_ProviderSession_deregisterService(
500 blpapi_ProviderSession_t *session, const char *serviceName);
501
522BLPAPI_EXPORT
523int blpapi_ProviderSession_resolve(blpapi_ProviderSession_t *session,
524 blpapi_ResolutionList_t *resolutionList,
525 int resolveMode,
526 const blpapi_Identity_t *identity);
527
546BLPAPI_EXPORT
547int blpapi_ProviderSession_resolveAsync(blpapi_ProviderSession_t *session,
548 const blpapi_ResolutionList_t *resolutionList,
549 int resolveMode,
550 const blpapi_Identity_t *identity);
551
571BLPAPI_EXPORT
572int blpapi_ProviderSession_createTopics(blpapi_ProviderSession_t *session,
573 blpapi_TopicList_t *topicList,
574 int resolveMode,
575 const blpapi_Identity_t *identity);
576
594BLPAPI_EXPORT
595int blpapi_ProviderSession_createTopicsAsync(blpapi_ProviderSession_t *session,
596 const blpapi_TopicList_t *topicList,
597 int resolveMode,
598 const blpapi_Identity_t *identity);
599
616BLPAPI_EXPORT
617int blpapi_ProviderSession_getTopic(blpapi_ProviderSession_t *session,
618 const blpapi_Message_t *message,
619 blpapi_Topic_t **topic);
620
638BLPAPI_EXPORT
639int blpapi_ProviderSession_createTopic(blpapi_ProviderSession_t *session,
640 const blpapi_Message_t *message,
641 blpapi_Topic_t **topic);
642
658BLPAPI_EXPORT
659int blpapi_ProviderSession_createServiceStatusTopic(
660 blpapi_ProviderSession_t *session,
661 const blpapi_Service_t *service,
662 blpapi_Topic_t **topic);
663
682BLPAPI_EXPORT
683int blpapi_ProviderSession_deleteTopics(blpapi_ProviderSession_t *session,
684 const blpapi_Topic_t **topics,
685 size_t numTopics);
686
704BLPAPI_EXPORT
705int blpapi_ProviderSession_terminateSubscriptionsOnTopics(
706 blpapi_ProviderSession_t *session,
707 const blpapi_Topic_t **topics,
708 size_t numTopics,
709 const char *message);
710
725BLPAPI_EXPORT
726int blpapi_ProviderSession_publish(
727 blpapi_ProviderSession_t *session, blpapi_Event_t *event);
728
745BLPAPI_EXPORT
746int blpapi_ProviderSession_sendResponse(blpapi_ProviderSession_t *session,
747 blpapi_Event_t *event,
748 int isPartialResponse);
749
759BLPAPI_EXPORT
760blpapi_AbstractSession_t *blpapi_ProviderSession_getAbstractSession(
761 blpapi_ProviderSession_t *session);
762
780BLPAPI_EXPORT
781int blpapi_ProviderSession_flushPublishedEvents(
782 blpapi_ProviderSession_t *session, int *allFlushed, int timeoutMsecs);
783
784// ServiceRegistrationOptions
785
796BLPAPI_EXPORT
797blpapi_ServiceRegistrationOptions_t *blpapi_ServiceRegistrationOptions_create(
798 void);
799
809BLPAPI_EXPORT
810blpapi_ServiceRegistrationOptions_t *
811blpapi_ServiceRegistrationOptions_duplicate(
812 const blpapi_ServiceRegistrationOptions_t *parameters);
813
821BLPAPI_EXPORT
822void blpapi_ServiceRegistrationOptions_destroy(
823 blpapi_ServiceRegistrationOptions_t *parameters);
824
833BLPAPI_EXPORT
834void blpapi_ServiceRegistrationOptions_copy(
835 blpapi_ServiceRegistrationOptions_t *lhs,
836 const blpapi_ServiceRegistrationOptions_t *rhs);
837
838// SUBSERVICE CODES
854BLPAPI_EXPORT
855int blpapi_ServiceRegistrationOptions_addActiveSubServiceCodeRange(
856 blpapi_ServiceRegistrationOptions_t *parameters,
857 int start,
858 int end,
859 int priority);
860
867BLPAPI_EXPORT
868void blpapi_ServiceRegistrationOptions_removeAllActiveSubServiceCodeRanges(
869 blpapi_ServiceRegistrationOptions_t *parameters);
870
886BLPAPI_EXPORT
887void blpapi_ServiceRegistrationOptions_setGroupId(
888 blpapi_ServiceRegistrationOptions_t *parameters,
889 const char *groupId,
890 unsigned int groupIdLength);
891
905BLPAPI_EXPORT
906int blpapi_ServiceRegistrationOptions_setServicePriority(
907 blpapi_ServiceRegistrationOptions_t *parameters, int priority);
908
918BLPAPI_EXPORT
919void blpapi_ServiceRegistrationOptions_setPartsToRegister(
920 blpapi_ServiceRegistrationOptions_t *parameters, int parts);
921
937BLPAPI_EXPORT
938int blpapi_ServiceRegistrationOptions_getGroupId(
939 blpapi_ServiceRegistrationOptions_t *parameters,
940 char *groupdIdBuffer,
941 int *groupIdLength);
942
950BLPAPI_EXPORT
951int blpapi_ServiceRegistrationOptions_getServicePriority(
952 blpapi_ServiceRegistrationOptions_t *parameters);
953
962BLPAPI_EXPORT
963int blpapi_ServiceRegistrationOptions_getPartsToRegister(
964 blpapi_ServiceRegistrationOptions_t *parameters);
965
968
969#ifdef __cplusplus
970}
971
972#include <cassert>
973
974namespace BloombergLP {
975namespace blpapi {
982
984extern "C" inline void blpapi_providerEventHandlerAdapter(
985 blpapi_Event_t *event,
986 blpapi_ProviderSession_t *session,
987 void *userData);
989
990class ProviderSession;
991// ==========================
992// class ProviderEventHandler
993// ==========================
994
996 public:
998
999 virtual bool processEvent(const Event& event, ProviderSession *session)
1000 = 0;
1011};
1012
1024
1025 blpapi_ServiceRegistrationOptions_t *d_handle_p;
1026
1027 public:
1033 PRIORITY_LOW = BLPAPI_SERVICEREGISTRATIONOPTIONS_PRIORITY_LOW,
1035 PRIORITY_MEDIUM = BLPAPI_SERVICEREGISTRATIONOPTIONS_PRIORITY_MEDIUM,
1037 PRIORITY_HIGH = BLPAPI_SERVICEREGISTRATIONOPTIONS_PRIORITY_HIGH
1039 };
1040
1044
1045 PART_PUBLISHING = BLPAPI_REGISTRATIONPARTS_PUBLISHING,
1047
1048 PART_OPERATIONS = BLPAPI_REGISTRATIONPARTS_OPERATIONS,
1051
1053 = BLPAPI_REGISTRATIONPARTS_SUBSCRIBER_RESOLUTION,
1056
1058 = BLPAPI_REGISTRATIONPARTS_PUBLISHER_RESOLUTION,
1062
1063 PART_DEFAULT = BLPAPI_REGISTRATIONPARTS_DEFAULT
1066 };
1067
1072
1077
1082
1084 const ServiceRegistrationOptions& rhs);
1089
1090 void setGroupId(const char *groupId, unsigned int groupIdLength);
1101
1102 int setServicePriority(int priority);
1114
1115 void setPartsToRegister(int parts);
1122
1123 void addActiveSubServiceCodeRange(int begin, int end, int priority);
1133
1138
1139 int getGroupId(char *groupId, int *groupIdLength) const;
1148
1149 int getServicePriority() const;
1156
1157 int getPartsToRegister() const;
1162
1164 blpapi_ServiceRegistrationOptions_t *handle() const;
1166};
1167
1197class ProviderSession : public AbstractSession {
1198
1199 public:
1201
1202 private:
1203 blpapi_ProviderSession_t *d_handle_p;
1204 EventHandler *d_eventHandler_p;
1205
1206 private:
1207 friend void blpapi_providerEventHandlerAdapter(blpapi_Event_t *event,
1208 blpapi_ProviderSession_t *session,
1209 void *userData);
1210
1211 void dispatchEvent(const Event& event);
1212
1213 private:
1214 // NOT IMPLEMENTED
1215 ProviderSession(const ProviderSession&);
1216 ProviderSession& operator=(const ProviderSession&);
1217
1218 public:
1220 AUTO_REGISTER_SERVICES = BLPAPI_RESOLVEMODE_AUTO_REGISTER_SERVICES,
1222 DONT_REGISTER_SERVICES = BLPAPI_RESOLVEMODE_DONT_REGISTER_SERVICES
1225 };
1226
1227 explicit ProviderSession(const SessionOptions& options = SessionOptions(),
1228 EventHandler *eventHandler = 0,
1229 EventDispatcher *eventDispatcher = 0);
1263
1265 explicit ProviderSession(blpapi_ProviderSession_t *handle);
1267
1268 virtual ~ProviderSession();
1272
1273 // MANIPULATORS
1274 virtual bool start();
1278
1279 virtual bool startAsync();
1283
1284 virtual void stop();
1288
1289 virtual void stopAsync();
1293
1294 virtual Event nextEvent(int timeout = 0);
1298
1299 virtual int tryNextEvent(Event *event);
1303
1304 virtual bool registerService(const char *serviceName,
1305 const Identity& providerIdentity = Identity(),
1306 const ServiceRegistrationOptions& registrationOptions
1330
1331 virtual void activateSubServiceCodeRange(
1332 const char *serviceName, int begin, int end, int priority);
1344
1345 virtual void deactivateSubServiceCodeRange(
1346 const char *serviceName, int begin, int end);
1355
1356 virtual CorrelationId registerServiceAsync(const char *serviceName,
1357 const Identity& providerIdentity = Identity(),
1358 const CorrelationId& correlationId = CorrelationId(),
1359 const ServiceRegistrationOptions& registrationOptions
1384
1385 virtual bool deregisterService(const char *serviceName);
1401
1402 virtual void resolve(ResolutionList *resolutionList,
1403 ResolveMode resolveMode = DONT_REGISTER_SERVICES,
1404 const Identity& providerIdentity = Identity());
1428
1429 virtual void resolveAsync(const ResolutionList& resolutionList,
1430 ResolveMode resolveMode = DONT_REGISTER_SERVICES,
1431 const Identity& providerIdentity = Identity());
1453
1454 virtual Topic getTopic(const Message& message);
1463
1464 virtual Topic createServiceStatusTopic(const Service& service);
1470
1471 virtual void publish(const Event& event);
1475
1476 virtual void sendResponse(
1477 const Event& event, bool isPartialResponse = false);
1483
1484 virtual void createTopics(TopicList *topicList,
1485 ResolveMode resolveMode = DONT_REGISTER_SERVICES,
1486 const Identity& providerIdentity = Identity());
1503
1504 virtual void createTopicsAsync(const TopicList& topicList,
1505 ResolveMode resolveMode = DONT_REGISTER_SERVICES,
1506 const Identity& providerIdentity = Identity());
1520
1521 virtual void deleteTopic(const Topic& topic);
1537
1538 virtual void deleteTopics(const std::vector<Topic>& topics);
1543
1544 virtual void deleteTopics(const Topic *topics, size_t numTopics);
1550
1551 virtual void terminateSubscriptionsOnTopic(
1552 const Topic& topic, const char *message = 0);
1561
1562 virtual void terminateSubscriptionsOnTopics(
1563 const std::vector<Topic>& topics, const char *message = 0);
1571
1572 virtual void terminateSubscriptionsOnTopics(
1573 const Topic *topics, size_t numTopics, const char *message = 0);
1582
1583 virtual bool flushPublishedEvents(int timeoutMsecs);
1595
1597 blpapi_ProviderSession_t *handle() const;
1602
1604 virtual Topic createTopic(const Message& message);
1611};
1612
1615
1616//=============================================================================
1617// INLINE FUNCTION DEFINITIONS
1618//=============================================================================
1619
1620// ---------------------
1621// class ProviderSession
1622// ---------------------
1623
1624inline ProviderSession::ProviderSession(const SessionOptions& parameters,
1625 EventHandler *handler,
1626 EventDispatcher *dispatcher)
1627 : d_eventHandler_p(handler)
1628{
1629 if (dispatcher && !handler) {
1631 "Event dispatcher provided without handler.");
1632 }
1633 d_handle_p = blpapi_ProviderSession_create(parameters.handle(),
1635 dispatcher ? dispatcher->impl() : 0,
1636 this);
1637 initAbstractSessionHandle(
1638 blpapi_ProviderSession_getAbstractSession(d_handle_p));
1639}
1640
1642inline ProviderSession::ProviderSession(blpapi_ProviderSession_t *newHandle)
1643 : d_handle_p(newHandle)
1644{
1645 initAbstractSessionHandle(
1646 blpapi_ProviderSession_getAbstractSession(d_handle_p));
1647}
1649
1651{
1652 blpapi_ProviderSession_destroy(d_handle_p);
1653}
1654
1656{
1657 return blpapi_ProviderSession_start(d_handle_p) ? false : true;
1658}
1659
1661{
1662 return blpapi_ProviderSession_startAsync(d_handle_p) ? false : true;
1663}
1664
1666{
1667 blpapi_ProviderSession_stop(d_handle_p);
1668}
1669
1671{
1672 blpapi_ProviderSession_stopAsync(d_handle_p);
1673}
1674
1676{
1677 if (timeout < 0) {
1678 throw InvalidArgumentException("Timeout must be >= 0.");
1679 }
1680
1681 blpapi_Event_t *event = 0;
1682 ExceptionUtil::throwOnError(blpapi_ProviderSession_nextEvent(
1683 d_handle_p, &event, static_cast<unsigned>(timeout)));
1684 return Event(event);
1685}
1686
1688{
1689 assert(event);
1690
1691 blpapi_Event_t *impl = 0;
1692 int ret = blpapi_ProviderSession_tryNextEvent(d_handle_p, &impl);
1693 if (0 == ret) {
1694 *event = Event(impl);
1695 }
1696 return ret;
1697}
1698
1699inline bool ProviderSession::registerService(const char *serviceName,
1700 const Identity& identity,
1701 const ServiceRegistrationOptions& registrationOptions)
1702{
1703 return blpapi_ProviderSession_registerService(d_handle_p,
1704 serviceName,
1705 identity.handle(),
1706 registrationOptions.handle())
1707 ? false
1708 : true;
1709}
1710
1712 const char *serviceName, int begin, int end, int priority)
1713{
1715 BLPAPI_CALL_PROVIDERSESSION_ACTIVATESUBSERVICECODERANGE(
1716 d_handle_p, serviceName, begin, end, priority));
1717}
1718
1720 const char *serviceName, int begin, int end)
1721{
1723 BLPAPI_CALL_PROVIDERSESSION_DEACTIVATESUBSERVICECODERANGE(
1724 d_handle_p, serviceName, begin, end));
1725}
1726
1728 const char *serviceName,
1729 const Identity& identity,
1730 const CorrelationId& correlationId,
1731 const ServiceRegistrationOptions& registrationOptions)
1732{
1733 blpapi_CorrelationId_t retv = correlationId.impl();
1735 blpapi_ProviderSession_registerServiceAsync(d_handle_p,
1736 serviceName,
1737 identity.handle(),
1738 &retv,
1739 registrationOptions.handle()));
1740
1741 return CorrelationId(retv);
1742}
1743
1744inline bool ProviderSession::deregisterService(const char *serviceName)
1745{
1746 return BLPAPI_CALL_PROVIDERSESSION_DEREGISTERSERVICE(
1747 d_handle_p, serviceName)
1748 == 0
1749 ? true
1750 : false;
1751}
1752
1753inline void ProviderSession::resolve(ResolutionList *resolutionList,
1754 ResolveMode resolveMode,
1755 const Identity& identity)
1756{
1757 assert(resolutionList);
1758
1759 ExceptionUtil::throwOnError(blpapi_ProviderSession_resolve(d_handle_p,
1760 resolutionList->impl(),
1761 resolveMode,
1762 identity.handle()));
1763 return;
1764}
1765
1766inline void ProviderSession::resolveAsync(const ResolutionList& resolutionList,
1767 ResolveMode resolveMode,
1768 const Identity& identity)
1769{
1770 ExceptionUtil::throwOnError(blpapi_ProviderSession_resolveAsync(d_handle_p,
1771 resolutionList.impl(),
1772 resolveMode,
1773 identity.handle()));
1774 return;
1775}
1776
1778{
1779 blpapi_Topic_t *topic = 0;
1780 ExceptionUtil::throwOnError(blpapi_ProviderSession_createTopic(
1781 d_handle_p, message.impl(), &topic));
1782
1783 return Topic(topic);
1784}
1785
1787{
1788 blpapi_Topic_t *topic = 0;
1789 ExceptionUtil::throwOnError(blpapi_ProviderSession_getTopic(
1790 d_handle_p, message.impl(), &topic));
1791
1792 return Topic(topic);
1793}
1794
1796{
1797 blpapi_Topic_t *topic = 0;
1799 blpapi_ProviderSession_createServiceStatusTopic(
1800 d_handle_p, service.handle(), &topic));
1801
1802 return Topic(topic);
1803}
1804
1806 ResolveMode resolveMode,
1807 const Identity& identity)
1808{
1809 assert(topicList);
1810
1811 ExceptionUtil::throwOnError(blpapi_ProviderSession_createTopics(
1812 d_handle_p, topicList->impl(), resolveMode, identity.handle()));
1813 return;
1814}
1815
1817 ResolveMode resolveMode,
1818 const Identity& identity)
1819{
1820 ExceptionUtil::throwOnError(blpapi_ProviderSession_createTopicsAsync(
1821 d_handle_p, topicList.impl(), resolveMode, identity.handle()));
1822 return;
1823}
1824
1825inline void ProviderSession::deleteTopic(const Topic& topic)
1826{
1827 const blpapi_Topic_t *topicImpl = topic.impl();
1828 ExceptionUtil::throwOnError(BLPAPI_CALL_PROVIDERSESSION_DELETETOPICS(
1829 d_handle_p, &topicImpl, 1));
1830}
1831
1832inline void ProviderSession::deleteTopics(const std::vector<Topic>& topics)
1833{
1834 if (topics.size() == 0) {
1835 return;
1836 }
1837 std::vector<const blpapi_Topic_t *> topicImplList;
1838 topicImplList.reserve(topics.size());
1839 for (std::vector<Topic>::const_iterator it = topics.begin();
1840 it != topics.end();
1841 ++it) {
1842 topicImplList.push_back(it->impl());
1843 }
1844 ExceptionUtil::throwOnError(BLPAPI_CALL_PROVIDERSESSION_DELETETOPICS(
1845 d_handle_p, &topicImplList[0], topicImplList.size()));
1846}
1847
1849 const Topic *topics, size_t numTopics)
1850{
1851 if (numTopics == 0) {
1852 return;
1853 }
1854
1855 assert(topics);
1856
1857 std::vector<const blpapi_Topic_t *> topicImplList;
1858 topicImplList.reserve(numTopics);
1859 for (size_t i = 0; i < numTopics; ++i) {
1860 topicImplList.push_back(topics[i].impl());
1861 }
1862 ExceptionUtil::throwOnError(BLPAPI_CALL_PROVIDERSESSION_DELETETOPICS(
1863 d_handle_p, &topicImplList[0], topicImplList.size()));
1864}
1865
1867 const Topic& topic, const char *message)
1868{
1869 const blpapi_Topic_t *topicImpl = topic.impl();
1871 BLPAPI_CALL_PROVIDERSESSION_TERMINATESUBSCRIPTIONSONTOPICS(
1872 d_handle_p, &topicImpl, 1, message));
1873}
1874
1876 const std::vector<Topic>& topics, const char *message)
1877{
1878 if (topics.empty()) {
1879 return;
1880 }
1881 terminateSubscriptionsOnTopics(&topics.front(), topics.size(), message);
1882}
1883
1885 const Topic *topics, size_t numTopics, const char *message)
1886{
1887 if (numTopics == 0) {
1888 return;
1889 }
1890
1891 assert(topics);
1892
1893 std::vector<const blpapi_Topic_t *> topicImplList;
1894 topicImplList.reserve(numTopics);
1895 for (size_t i = 0; i < numTopics; ++i) {
1896 topicImplList.push_back(topics[i].impl());
1897 }
1899 BLPAPI_CALL_PROVIDERSESSION_TERMINATESUBSCRIPTIONSONTOPICS(
1900 d_handle_p,
1901 &topicImplList[0],
1902 topicImplList.size(),
1903 message));
1904}
1905
1906inline void ProviderSession::publish(const Event& event)
1907{
1909 blpapi_ProviderSession_publish(d_handle_p, event.impl()));
1910 return;
1911}
1912
1914 const Event& event, bool isPartialResponse)
1915{
1916 ExceptionUtil::throwOnError(blpapi_ProviderSession_sendResponse(
1917 d_handle_p, event.impl(), isPartialResponse));
1918 return;
1919}
1920
1922inline blpapi_ProviderSession_t *ProviderSession::handle() const
1923{
1924 return d_handle_p;
1925}
1927
1928inline void ProviderSession::dispatchEvent(const Event& event)
1929{
1930 assert(d_eventHandler_p);
1931
1932 d_eventHandler_p->processEvent(event, this);
1933}
1934
1935inline bool ProviderSession::flushPublishedEvents(int timeoutMsecs)
1936{
1937 int allFlushed = 0;
1938 int rc = BLPAPI_CALL(blpapi_ProviderSession_flushPublishedEvents)(
1939 d_handle_p, &allFlushed, timeoutMsecs);
1940 if (rc != 0) {
1942 }
1943 return allFlushed ? true : false;
1944}
1945
1946// --------------------------------
1947// class ServiceRegistrationOptions
1948// --------------------------------
1949
1951{
1952 d_handle_p = blpapi_ServiceRegistrationOptions_create();
1953}
1954
1956 const ServiceRegistrationOptions& original)
1957{
1958 d_handle_p
1959 = blpapi_ServiceRegistrationOptions_duplicate(original.handle());
1960}
1961
1963{
1964 blpapi_ServiceRegistrationOptions_destroy(d_handle_p);
1965}
1966
1968 const ServiceRegistrationOptions& rhs)
1969{
1970 blpapi_ServiceRegistrationOptions_copy(this->handle(), rhs.handle());
1971 return *this;
1972}
1973
1974// SUBSERVICE CODES
1976 int begin, int end, int priority)
1977{
1979 BLPAPI_CALL_SERVICEREGISTRATIONOPTIONS_ADDACTIVATESUBSERVICECODERANGE(
1980 d_handle_p, begin, end, priority));
1981}
1982
1984{
1985 BLPAPI_CALL_SERVICEREGISTRATIONOPTIONS_REMOVEALLACTIVESUBSERVICECODERANGES(
1986 d_handle_p);
1987}
1988
1990 const char *groupId, unsigned int groupIdLength)
1991{
1992 blpapi_ServiceRegistrationOptions_setGroupId(
1993 d_handle_p, groupId, groupIdLength);
1994}
1995
1997{
1998 return blpapi_ServiceRegistrationOptions_setServicePriority(
1999 d_handle_p, priority);
2000}
2001
2003{
2004 BLPAPI_CALL_SERVICEREGISTRATIONOPTIONS_SETPARTSTOREGISTER(
2005 d_handle_p, parts);
2006}
2007
2009 char *groupIdBuffer, int *groupIdLength) const
2010{
2011 return blpapi_ServiceRegistrationOptions_getGroupId(
2012 d_handle_p, groupIdBuffer, groupIdLength);
2013}
2014
2016{
2017 return blpapi_ServiceRegistrationOptions_getServicePriority(d_handle_p);
2018}
2019
2021{
2022 return BLPAPI_CALL_SERVICEREGISTRATIONOPTIONS_GETPARTSTOREGISTER(
2023 d_handle_p);
2024}
2025
2027inline blpapi_ServiceRegistrationOptions_t *
2028ServiceRegistrationOptions::handle() const
2029{
2030 return d_handle_p;
2031}
2033
2034// --------------------------
2035// class ProviderEventHandler
2036// --------------------------
2037
2039extern "C" inline void blpapi_providerEventHandlerAdapter(
2040 blpapi_Event_t *event, blpapi_ProviderSession_t *, void *userData)
2041{
2042 assert(userData);
2043
2044 reinterpret_cast<ProviderSession *>(userData)->dispatchEvent(Event(event));
2045}
2047
2048} // close namespace blpapi
2049} // close namespace BloombergLP
2050
2051#endif // #ifdef __cplusplus
2052#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:306
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:995
virtual ~ProviderEventHandler()
Definition blpapi_providersession.h:997
virtual bool processEvent(const Event &event, ProviderSession *session)=0
Definition blpapi_providersession.h:1197
virtual void deleteTopic(const Topic &topic)
Definition blpapi_providersession.h:1825
virtual void deleteTopics(const std::vector< Topic > &topics)
Definition blpapi_providersession.h:1832
virtual void publish(const Event &event)
Definition blpapi_providersession.h:1906
virtual ~ProviderSession()
Definition blpapi_providersession.h:1650
virtual int tryNextEvent(Event *event)
Definition blpapi_providersession.h:1687
virtual void resolve(ResolutionList *resolutionList, ResolveMode resolveMode=DONT_REGISTER_SERVICES, const Identity &providerIdentity=Identity())
Definition blpapi_providersession.h:1753
virtual void activateSubServiceCodeRange(const char *serviceName, int begin, int end, int priority)
Definition blpapi_providersession.h:1711
virtual bool registerService(const char *serviceName, const Identity &providerIdentity=Identity(), const ServiceRegistrationOptions &registrationOptions=ServiceRegistrationOptions())
Definition blpapi_providersession.h:1699
virtual bool startAsync()
Definition blpapi_providersession.h:1660
virtual Topic createServiceStatusTopic(const Service &service)
Definition blpapi_providersession.h:1795
virtual Topic createTopic(const Message &message)
Definition blpapi_providersession.h:1777
virtual void deactivateSubServiceCodeRange(const char *serviceName, int begin, int end)
Definition blpapi_providersession.h:1719
virtual Topic getTopic(const Message &message)
Definition blpapi_providersession.h:1786
virtual void sendResponse(const Event &event, bool isPartialResponse=false)
Definition blpapi_providersession.h:1913
virtual Event nextEvent(int timeout=0)
Definition blpapi_providersession.h:1675
ResolveMode
Definition blpapi_providersession.h:1219
@ DONT_REGISTER_SERVICES
Definition blpapi_providersession.h:1222
@ AUTO_REGISTER_SERVICES
Try to register services found in ResolutionList if necessary.
Definition blpapi_providersession.h:1220
virtual void stop()
Definition blpapi_providersession.h:1665
virtual void createTopics(TopicList *topicList, ResolveMode resolveMode=DONT_REGISTER_SERVICES, const Identity &providerIdentity=Identity())
Definition blpapi_providersession.h:1805
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:1816
::BloombergLP::blpapi::ProviderEventHandler EventHandler
Definition blpapi_providersession.h:1200
virtual void terminateSubscriptionsOnTopic(const Topic &topic, const char *message=0)
Definition blpapi_providersession.h:1866
virtual bool start()
Definition blpapi_providersession.h:1655
virtual bool flushPublishedEvents(int timeoutMsecs)
Definition blpapi_providersession.h:1935
virtual bool deregisterService(const char *serviceName)
Definition blpapi_providersession.h:1744
virtual void stopAsync()
Definition blpapi_providersession.h:1670
virtual CorrelationId registerServiceAsync(const char *serviceName, const Identity &providerIdentity=Identity(), const CorrelationId &correlationId=CorrelationId(), const ServiceRegistrationOptions &registrationOptions=ServiceRegistrationOptions())
Definition blpapi_providersession.h:1727
virtual void resolveAsync(const ResolutionList &resolutionList, ResolveMode resolveMode=DONT_REGISTER_SERVICES, const Identity &providerIdentity=Identity())
Definition blpapi_providersession.h:1766
virtual void terminateSubscriptionsOnTopics(const std::vector< Topic > &topics, const char *message=0)
Definition blpapi_providersession.h:1875
Definition blpapi_resolutionlist.h:418
Definition blpapi_providersession.h:1023
int getGroupId(char *groupId, int *groupIdLength) const
Definition blpapi_providersession.h:2008
void removeAllActiveSubServiceCodeRanges()
Definition blpapi_providersession.h:1983
ServiceRegistrationOptions()
Definition blpapi_providersession.h:1950
void setGroupId(const char *groupId, unsigned int groupIdLength)
Definition blpapi_providersession.h:1989
ServiceRegistrationOptions & operator=(const ServiceRegistrationOptions &rhs)
Definition blpapi_providersession.h:1967
int getPartsToRegister() const
Definition blpapi_providersession.h:2020
int setServicePriority(int priority)
Definition blpapi_providersession.h:1996
~ServiceRegistrationOptions()
Definition blpapi_providersession.h:1962
int getServicePriority() const
Definition blpapi_providersession.h:2015
RegistrationParts
Definition blpapi_providersession.h:1043
@ PART_PUBLISHING
register to receive subscribe and unsubscribe messages
Definition blpapi_providersession.h:1045
@ PART_DEFAULT
Definition blpapi_providersession.h:1063
@ PART_OPERATIONS
Definition blpapi_providersession.h:1048
@ PART_PUBLISHER_RESOLUTION
Definition blpapi_providersession.h:1057
@ PART_SUBSCRIBER_RESOLUTION
Definition blpapi_providersession.h:1052
void setPartsToRegister(int parts)
Definition blpapi_providersession.h:2002
ServiceRegistrationPriority
Definition blpapi_providersession.h:1032
@ PRIORITY_MEDIUM
Medium priority (INT_MAX/2)
Definition blpapi_providersession.h:1035
@ PRIORITY_LOW
Low priority (0)
Definition blpapi_providersession.h:1033
@ PRIORITY_HIGH
High priority (INT_MAX)
Definition blpapi_providersession.h:1037
void addActiveSubServiceCodeRange(int begin, int end, int priority)
Definition blpapi_providersession.h:1975
Definition blpapi_service.h:619
Definition blpapi_sessionoptions.h:1141
Definition blpapi_topiclist.h:336
Definition blpapi_topic.h:177
Definition blpapi_abstractsession.h:452
Definition blpapi_abstractsession.h:451