using CryptoExchange.Net.Interfaces; using CryptoExchange.Net.Objects; using CryptoExchange.Net.Objects.Sockets; using CryptoExchange.Net.Sockets; using Microsoft.Extensions.Logging; using Moq; using System; using System.Collections.Generic; using System.Threading.Tasks; namespace CryptoExchange.Net.UnitTests.TestImplementations.Sockets { internal class TestSubscriptionWithResponseCheck<T> : Subscription<SubResponse, UnsubResponse> { private readonly Action<DataEvent<T>> _handler; private readonly string _channel; public override HashSet<string> ListenerIdentifiers { get; set; } public TestSubscriptionWithResponseCheck(string channel, Action<DataEvent<T>> handler) : base(Mock.Of<ILogger>(), false) { ListenerIdentifiers = new HashSet<string>() { channel }; _handler = handler; _channel = channel; } public override CallResult DoHandleMessage(SocketConnection connection, DataEvent<object> message) { var data = (T)message.Data; _handler.Invoke(message.As(data)); return new CallResult(null); } public override Type GetMessageType(IMessageAccessor message) => typeof(T); public override Query GetSubQuery(SocketConnection connection) => new TestChannelQuery(_channel, "subscribe", false, 1); public override Query GetUnsubQuery() => new TestChannelQuery(_channel, "unsubscribe", false, 1); } }