in mbp-with-mbo/src/main/java/com/epam/cme/mdp3/channel/LowLevelMdpChannel.java [235:271]
public void startFeed(FeedType feedType, Feed feed) throws MdpFeedException {
Map<FeedType, Pair<MdpFeedWorker, Thread>> currentFeed;
Map<FeedType, String> networkInterfaces;
if(mboEnabled && FeedType.S.equals(feedType)) {
throw new MdpFeedException("It is not allowed to use MBP snapshot feed when MBO is enabled");
}
if(Feed.A.equals(feed)){
currentFeed = feedsA;
networkInterfaces = feedANetworkInterfaces;
} else if(Feed.B.equals(feed)){
currentFeed = feedsB;
networkInterfaces = feedBNetworkInterfaces;
} else {
throw new IllegalArgumentException(String.format("%s feed is not supported", feed));
}
if (!currentFeed.containsKey(feedType)) {
synchronized (this) {
if (!currentFeed.containsKey(feedType)) {
MdpFeedWorker mdpFeedWorker = new MdpFeedWorker(channelCfg.getConnectionCfg(feedType, feed), networkInterfaces.get(feedType), rcvBufSize);
mdpFeedWorker.addListener(feedListener);
currentFeed.put(feedType, MutablePair.of(mdpFeedWorker, null));
}
}
}
Pair<MdpFeedWorker, Thread> feedThread = currentFeed.get(feedType);
MdpFeedWorker mdpFeedWorker = feedThread.getLeft();
if (!mdpFeedWorker.cancelShutdownIfStarted()) {
if (!mdpFeedWorker.isActive()) {
Thread thread = new Thread(mdpFeedWorker);
feedThread.setValue(thread);
thread.start();
}
}
}