55 lines
1.7 KiB
C#
55 lines
1.7 KiB
C#
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
using ServerCommon;
|
|
|
|
using System.Collections.Concurrent;
|
|
|
|
namespace BrokerCore.Services;
|
|
|
|
public class OrderStrategyProvider : IOrderStrategyProvider
|
|
{
|
|
private readonly IServiceProvider m_service_provider;
|
|
private readonly ConcurrentDictionary<CaliverseItemType, Type> m_creation_strategy_map;
|
|
private readonly ConcurrentDictionary<CaliverseItemType, Type> m_completion_strategy_map;
|
|
|
|
public OrderStrategyProvider(IServiceProvider serviceProvider)
|
|
{
|
|
m_service_provider = serviceProvider;
|
|
|
|
// 전략 맵핑 초기화
|
|
m_creation_strategy_map = new ConcurrentDictionary<CaliverseItemType, Type>
|
|
{
|
|
[CaliverseItemType.Currency] = typeof(CurrencyExchangeCreationStrategy),
|
|
[CaliverseItemType.CaliverseProduct] = typeof(ProductExchangeCreationStrategy)
|
|
};
|
|
|
|
m_completion_strategy_map = new ConcurrentDictionary<CaliverseItemType, Type>
|
|
{
|
|
[CaliverseItemType.Currency] = typeof(CurrencyOrderCompletionStrategy),
|
|
[CaliverseItemType.CaliverseProduct] = typeof(ProductOrderCompletionStrategy)
|
|
};
|
|
}
|
|
|
|
public IOrderCreationStrategy? getCreationStrategy(CaliverseItemType itemType)
|
|
{
|
|
if (m_creation_strategy_map.TryGetValue(itemType, out var strategy_type))
|
|
{
|
|
return m_service_provider.GetService(strategy_type) as IOrderCreationStrategy;
|
|
}
|
|
|
|
// 기본 전략 반환
|
|
return m_service_provider.GetService<CurrencyExchangeCreationStrategy>();
|
|
}
|
|
|
|
public IOrderCompletionStrategy? getCompletionStrategy(CaliverseItemType itemType)
|
|
{
|
|
if (m_completion_strategy_map.TryGetValue(itemType, out var strategy_type))
|
|
{
|
|
return m_service_provider.GetService(strategy_type) as IOrderCompletionStrategy;
|
|
}
|
|
|
|
// 기본 전략 반환
|
|
return m_service_provider.GetService<CurrencyOrderCompletionStrategy>();
|
|
}
|
|
}
|