001    package org.otfeed.protocol.request;
002    
003    import org.otfeed.IConnection;
004    import org.otfeed.IRequest;
005    import org.otfeed.command.SnapshotCommand;
006    import org.otfeed.command.TickStreamCommand;
007    import org.otfeed.command.VolumeStyleEnum;
008    import org.otfeed.event.ICompletionDelegate;
009    import org.otfeed.event.IDataDelegate;
010    import org.otfeed.event.OTBBO;
011    import org.otfeed.event.OTMMQuote;
012    import org.otfeed.event.OTQuote;
013    import org.otfeed.event.OTTrade;
014    
015    /**
016     * Synthetic request: issues {@link SnapshotRequest}, followed by {@link TickStreamExRequest}.
017     */
018    public class TickStreamWithSnapshotRequest extends AbstractStreamWithSnapshotRequest implements IRequest {
019            
020            private final SnapshotCommand snapshotCommand;
021            private final TickStreamCommand streamCommand;
022            
023            public TickStreamWithSnapshotRequest(IConnection connection,
024                            String exchangeCode,
025                            String symbolCode,
026                            VolumeStyleEnum volumeStyle,
027                            IDataDelegate<OTQuote> quoteDelegate,
028                            IDataDelegate<OTTrade> tradeDelegate,
029                            IDataDelegate<OTMMQuote> mmQuoteDelegate,
030                            IDataDelegate<OTBBO> bboDelegate,
031                            ICompletionDelegate completionDelegate
032                            ) {
033                    super(connection, completionDelegate);
034    
035                    snapshotCommand = new SnapshotCommand(exchangeCode, symbolCode, volumeStyle);
036                    snapshotCommand.setQuoteDelegate(quoteDelegate);
037                    snapshotCommand.setTradeDelegate(tradeDelegate);
038                    snapshotCommand.setMmQuoteDelegate(mmQuoteDelegate);
039                    snapshotCommand.setBboDelegate(bboDelegate);
040    
041                    streamCommand = new TickStreamCommand(exchangeCode, symbolCode, volumeStyle);
042                    streamCommand.setQuoteDelegate(quoteDelegate);
043                    streamCommand.setTradeDelegate(tradeDelegate);
044                    streamCommand.setMmQuoteDelegate(mmQuoteDelegate);
045                    streamCommand.setBboDelegate(bboDelegate);
046            }
047    
048            @Override
049            IRequest prepareSnapshotRequest(IConnection connection, ICompletionDelegate d) {
050                    snapshotCommand.setCompletionDelegate(d);
051                    return connection.prepareRequest(snapshotCommand);
052            }
053    
054            @Override
055            IRequest prepareStreamRequest(IConnection connection, ICompletionDelegate d) {
056                    streamCommand.setCompletionDelegate(d);
057                    return connection.prepareRequest(streamCommand);
058            }
059    }