Skip to content

Commit 0c79f62

Browse files
committed
IMessageAdapter. SupportedMarketDataTypes -> GetSupportedMarketDataTypes
1 parent 85916ca commit 0c79f62

9 files changed

Lines changed: 49 additions & 43 deletions

Algo/BasketMessageAdapter.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,8 @@ IEnumerable<MessageTypes> IMessageAdapter.SupportedInMessages
376376

377377
IEnumerable<MessageTypes> IMessageAdapter.NotSupportedResultMessages => GetSortedAdapters().SelectMany(a => a.NotSupportedResultMessages).Distinct();
378378

379-
IEnumerable<DataType> IMessageAdapter.SupportedMarketDataTypes => GetSortedAdapters().SelectMany(a => a.SupportedMarketDataTypes).Distinct();
379+
IEnumerable<DataType> IMessageAdapter.GetSupportedMarketDataTypes(SecurityId securityId, DateTimeOffset? from, DateTimeOffset? to)
380+
=> GetSortedAdapters().SelectMany(a => a.GetSupportedMarketDataTypes(securityId, from, to)).Distinct();
380381

381382
IEnumerable<Level1Fields> IMessageAdapter.CandlesBuildFrom => GetSortedAdapters().SelectMany(a => a.CandlesBuildFrom).Distinct();
382383

@@ -690,12 +691,12 @@ IMessageAdapter ApplyOwnInner(MessageAdapterWrapper a)
690691
adapter = ApplyOwnInner(new SubscriptionSecurityAllMessageAdapter(adapter));
691692
}
692693

693-
if (GenerateOrderBookFromLevel1 && adapter.SupportedMarketDataTypes.Contains(DataType.Level1) && !adapter.SupportedMarketDataTypes.Contains(DataType.MarketDepth))
694+
if (GenerateOrderBookFromLevel1 && adapter.GetSupportedMarketDataTypes().Contains(DataType.Level1) && !adapter.GetSupportedMarketDataTypes().Contains(DataType.MarketDepth))
694695
{
695696
adapter = ApplyOwnInner(new Level1DepthBuilderAdapter(adapter));
696697
}
697698

698-
if (Level1Extend && !adapter.SupportedMarketDataTypes.Contains(DataType.Level1))
699+
if (Level1Extend && !adapter.GetSupportedMarketDataTypes().Contains(DataType.Level1))
699700
{
700701
adapter = ApplyOwnInner(new Level1ExtendBuilderAdapter(adapter));
701702
}

Algo/Candles/CandleHelper.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public static DataType TryGetCandlesBuildFrom(this IMessageAdapter adapter, Mark
3838
if (buildFrom is not null && !DataType.CandleSources.Contains(buildFrom))
3939
buildFrom = null;
4040

41-
buildFrom ??= adapter.SupportedMarketDataTypes.Intersect(DataType.CandleSources).OrderBy(t =>
41+
buildFrom ??= adapter.GetSupportedMarketDataTypes(subscription.SecurityId, subscription.From, subscription.To).Intersect(DataType.CandleSources).OrderBy(t =>
4242
{
4343
// by priority
4444
if (t == DataType.Ticks)
@@ -53,7 +53,7 @@ public static DataType TryGetCandlesBuildFrom(this IMessageAdapter adapter, Mark
5353
return 4;
5454
}).FirstOrDefault();
5555

56-
if (buildFrom == null || !adapter.SupportedMarketDataTypes.Contains(buildFrom))
56+
if (buildFrom == null || !adapter.GetSupportedMarketDataTypes(subscription.SecurityId, subscription.From, subscription.To).Contains(buildFrom))
5757
return null;
5858

5959
return buildFrom;

Algo/Storages/StorageMessageAdapter.cs

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,18 @@ public class StorageMessageAdapter(IMessageAdapter innerAdapter, StorageProcesso
1313
private readonly StorageProcessor _storageProcessor = storageProcessor ?? throw new ArgumentNullException(nameof(storageProcessor));
1414

1515
/// <inheritdoc />
16-
public override IEnumerable<DataType> SupportedMarketDataTypes
16+
public override IEnumerable<DataType> GetSupportedMarketDataTypes(SecurityId securityId, DateTimeOffset? from, DateTimeOffset? to)
1717
{
18-
get
19-
{
20-
var dataTypes = base.SupportedMarketDataTypes;
18+
var dataTypes = base.GetSupportedMarketDataTypes(securityId, from, to);
2119

22-
var settings = _storageProcessor.Settings;
20+
var settings = _storageProcessor.Settings;
2321

24-
var drive = settings.Drive ?? settings.StorageRegistry.DefaultDrive;
22+
var drive = settings.Drive ?? settings.StorageRegistry.DefaultDrive;
2523

26-
if (drive != null)
27-
dataTypes = dataTypes.Concat(drive.GetAvailableDataTypes(default, settings.Format).Where(dt => dt.IsMarketData)).Distinct();
24+
if (drive != null)
25+
dataTypes = dataTypes.Concat(drive.GetAvailableDataTypes(default, settings.Format).Where(dt => dt.IsMarketData)).Distinct();
2826

29-
return dataTypes;
30-
}
27+
return dataTypes;
3128
}
3229

3330
/// <inheritdoc />

Algo/Testing/HistoryMessageAdapter.cs

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -160,27 +160,26 @@ protected override void DisposeManaged()
160160
base.DisposeManaged();
161161
}
162162

163-
private readonly HashSet<DataType> _supportedMarketDataTypes = [];
163+
private readonly Dictionary<SecurityId, HashSet<DataType>> _supportedMarketDataTypes = [];
164164

165165
/// <inheritdoc />
166-
public override IEnumerable<DataType> SupportedMarketDataTypes
166+
public override IEnumerable<DataType> GetSupportedMarketDataTypes(SecurityId securityId, DateTimeOffset? from, DateTimeOffset? to)
167167
{
168-
get
168+
return _supportedMarketDataTypes.SafeAdd(securityId, key =>
169169
{
170-
if (_supportedMarketDataTypes.IsEmpty())
171-
{
172-
var drive = DriveInternal;
170+
var drive = DriveInternal;
173171

174-
if (drive == null)
175-
return [];
172+
if (drive == null)
173+
return [];
176174

177-
_supportedMarketDataTypes.AddRange(drive.GetAvailableDataTypes(default, StorageFormat));
178-
_supportedMarketDataTypes.AddRange(_historySources.Select(s => s.Key.dataType));
179-
_supportedMarketDataTypes.AddRange(_generators.Select(t => t.Key.dataType));
180-
}
175+
var dataTypes = new HashSet<DataType>();
176+
177+
dataTypes.AddRange(drive.GetAvailableDataTypes(securityId, StorageFormat));
178+
dataTypes.AddRange(_historySources.Select(s => s.Key.dataType));
179+
dataTypes.AddRange(_generators.Select(t => t.Key.dataType));
181180

182-
return _supportedMarketDataTypes;
183-
}
181+
return dataTypes;
182+
});
184183
}
185184

186185
/// <inheritdoc />

Algo/Testing/MarketEmulator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3579,7 +3579,7 @@ private void RecalcPnL(DateTimeOffset time, ICollection<Message> messages)
35793579
];
35803580
IEnumerable<MessageTypes> IMessageAdapter.SupportedInMessages { get; set; }
35813581
IEnumerable<MessageTypes> IMessageAdapter.NotSupportedResultMessages { get; } = [];
3582-
IEnumerable<DataType> IMessageAdapter.SupportedMarketDataTypes { get; } =
3582+
IEnumerable<DataType> IMessageAdapter.GetSupportedMarketDataTypes(SecurityId securityId, DateTimeOffset? from, DateTimeOffset? to) =>
35833583
[
35843584
DataType.OrderLog,
35853585
DataType.Ticks,

Messages/Extensions.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,7 @@ public static bool IsMessageSupported(this IMessageAdapter adapter, MessageTypes
482482
}
483483

484484
/// <summary>
485-
/// Add time-frames into <see cref="IMessageAdapter.SupportedMarketDataTypes"/>.
485+
/// Add time-frames into <see cref="IMessageAdapter.GetSupportedMarketDataTypes"/>.
486486
/// </summary>
487487
/// <param name="adapter">Adapter.</param>
488488
/// <param name="timeFrames">Time-frames.</param>
@@ -499,7 +499,7 @@ public static void AddSupportedCandleTimeFrames(this MessageAdapter adapter, IEn
499499
}
500500

501501
/// <summary>
502-
/// Add market data type into <see cref="IMessageAdapter.SupportedMarketDataTypes"/>.
502+
/// Add market data type into <see cref="IMessageAdapter.GetSupportedMarketDataTypes"/>.
503503
/// </summary>
504504
/// <param name="adapter">Adapter.</param>
505505
/// <param name="dataType">Data type info.</param>
@@ -512,7 +512,7 @@ public static void AddSupportedMarketDataType(this MessageAdapter adapter, DataT
512512
}
513513

514514
/// <summary>
515-
/// Remove market data type from <see cref="IMessageAdapter.SupportedMarketDataTypes"/>.
515+
/// Remove market data type from <see cref="IMessageAdapter.GetSupportedMarketDataTypes"/>.
516516
/// </summary>
517517
/// <param name="adapter">Adapter.</param>
518518
/// <param name="type">Market data type.</param>
@@ -876,7 +876,7 @@ public static bool IsCandlesSupported(this IMessageAdapter adapter, MarketDataMe
876876
if (subscription == null)
877877
throw new ArgumentNullException(nameof(subscription));
878878

879-
return adapter.SupportedMarketDataTypes.Contains(subscription.DataType2);
879+
return adapter.GetSupportedMarketDataTypes(subscription.SecurityId, subscription.From, subscription.To).Contains(subscription.DataType2);
880880
}
881881

882882
/// <summary>
@@ -892,7 +892,7 @@ public static IEnumerable<TimeSpan> GetTimeFrames(this IMessageAdapter adapter,
892892
if (adapter is null)
893893
throw new ArgumentNullException(nameof(adapter));
894894

895-
return adapter.SupportedMarketDataTypes.Where(dt => dt.IsTFCandles).Select(dt => dt.Arg).OfType<TimeSpan>();
895+
return adapter.GetSupportedMarketDataTypes(securityId, from, to).Where(dt => dt.IsTFCandles).Select(dt => dt.Arg).OfType<TimeSpan>();
896896
}
897897

898898
/// <summary>
@@ -969,19 +969,19 @@ public static bool IsMarketDataTypeSupported(this IMessageAdapter adapter, DataT
969969
if (adapter == null)
970970
throw new ArgumentNullException(nameof(adapter));
971971

972-
return adapter.SupportedMarketDataTypes.Contains(type);
972+
return adapter.GetSupportedMarketDataTypes().Contains(type);
973973
}
974974

975975
/// <summary>
976-
/// Remove all market data types from <see cref="IMessageAdapter.SupportedMarketDataTypes"/>.
976+
/// Remove all market data types from <see cref="IMessageAdapter.GetSupportedMarketDataTypes"/>.
977977
/// </summary>
978978
/// <param name="adapter">Adapter.</param>
979979
public static void RemoveSupportedAllMarketDataTypes(this MessageAdapter adapter)
980980
{
981981
if (adapter == null)
982982
throw new ArgumentNullException(nameof(adapter));
983983

984-
adapter.SupportedMarketDataTypes = Array.Empty<DataType>();
984+
adapter.SupportedMarketDataTypes = [];
985985
}
986986

987987
/// <summary>
@@ -2190,7 +2190,7 @@ public static TimeSpan GetHistoryStepSize(this IMessageAdapter adapter, Security
21902190

21912191
if (dataType.IsTFCandles)
21922192
{
2193-
if (!adapter.CheckTimeFrameByRequest && !adapter.SupportedMarketDataTypes.Contains(dataType))
2193+
if (!adapter.CheckTimeFrameByRequest && !adapter.GetSupportedMarketDataTypes(securityId).Contains(dataType))
21942194
return TimeSpan.Zero;
21952195

21962196
var tf = dataType.GetTimeFrame();

Messages/IMessageAdapter.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,13 @@ public interface IMessageAdapter : IMessageChannel, IPersistable, ILogReceiver
2828
IEnumerable<MessageTypes> NotSupportedResultMessages { get; }
2929

3030
/// <summary>
31-
/// Supported by adapter market data types.
31+
/// Get supported by adapter message types.
3232
/// </summary>
33-
IEnumerable<DataType> SupportedMarketDataTypes { get; }
33+
/// <param name="securityId"><see cref="SecurityId"/></param>
34+
/// <param name="from">Start date for request. If <see langword="null"/>, then all available messages will be returned.</param>
35+
/// <param name="to">End date for request. If <see langword="null"/>, then all available messages will be returned.</param>
36+
/// <returns>Supported by adapter market data types.</returns>
37+
IEnumerable<DataType> GetSupportedMarketDataTypes(SecurityId securityId = default, DateTimeOffset? from = default, DateTimeOffset? to = default);
3438

3539
/// <summary>
3640
/// Possible options for candles building.

Messages/IMessageAdapterWrapper.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,8 @@ public virtual IEnumerable<MessageTypes> SupportedInMessages
261261
public virtual IEnumerable<MessageTypes> NotSupportedResultMessages => InnerAdapter.NotSupportedResultMessages;
262262

263263
/// <inheritdoc />
264-
public virtual IEnumerable<DataType> SupportedMarketDataTypes => InnerAdapter.SupportedMarketDataTypes;
264+
public virtual IEnumerable<DataType> GetSupportedMarketDataTypes(SecurityId securityId, DateTimeOffset? from, DateTimeOffset? to)
265+
=> InnerAdapter.GetSupportedMarketDataTypes(securityId, from, to);
265266

266267
/// <inheritdoc />
267268
public TimeSpan HeartbeatInterval

Messages/MessageAdapter.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public virtual IEnumerable<MessageTypeInfo> PossibleSupportedMessages
8989

9090
/// <inheritdoc />
9191
[Browsable(false)]
92-
public virtual IEnumerable<DataType> SupportedMarketDataTypes
92+
internal IEnumerable<DataType> SupportedMarketDataTypes
9393
{
9494
get => _supportedMarketDataTypes.Cache;
9595
set
@@ -108,6 +108,10 @@ public virtual IEnumerable<DataType> SupportedMarketDataTypes
108108
}
109109
}
110110

111+
/// <inheritdoc />
112+
public virtual IEnumerable<DataType> GetSupportedMarketDataTypes(SecurityId securityId, DateTimeOffset? from, DateTimeOffset? to)
113+
=> SupportedMarketDataTypes;
114+
111115
/// <inheritdoc />
112116
[Browsable(false)]
113117
public virtual IEnumerable<Level1Fields> CandlesBuildFrom => [];

0 commit comments

Comments
 (0)