public void CreateSubscriptionTypesTest() { //create default endpoint DXEndpoint.Create(); //try to create subscription with invalid event types parameters //all attempts to create subscription in this block must be failed with exception Assert.Catch(typeof(ArgumentException), () => { DXFeed.GetInstance().CreateSubscription <IDxOrder>(typeof(IDxCandle), typeof(IDxQuote)); }); Assert.Catch(typeof(ArgumentException), () => { DXFeed.GetInstance().CreateSubscription <IDxIndexedEvent>(typeof(IDxCandle), typeof(IDxQuote)); }); Assert.Catch(typeof(ArgumentException), () => { DXFeed.GetInstance().CreateSubscription <IDxLastingEvent>(typeof(IDxOrder), typeof(IDxQuote)); }); Assert.Catch(typeof(ArgumentException), () => { DXFeed.GetInstance().CreateSubscription <IDxMarketEvent>(typeof(IDxCandle)); }); Assert.Catch(typeof(ArgumentException), () => { DXFeed.GetInstance().CreateSubscription <IDxMarketEvent>(typeof(string)); }); var symbol = "SYMA"; var s = DXFeed.GetInstance().CreateSubscription <IDxEventType>(typeof(IDxOrder), typeof(IDxTrade)); s.AddSymbols(symbol); TestListener eventListener = new TestListener(); s.AddEventListener(eventListener); EventPlayer <IDxEventType> eventPlayer = new EventPlayer <IDxEventType>(s as DXFeedSubscription <IDxEventType>); var playedOrder = new PlayedOrder(symbol, 0, 0x4e54560000000006, 0, 0, 0, 0, 100, 25, Scope.Order, Side.Buy, 'A', OrderSource.NTV, "AAAA"); eventPlayer.PlayEvents(symbol, playedOrder); var playedTrade = new PlayedTrade(symbol, 0, 0, 0, 'B', 123.456, 100, 123, 1.1, 0, 2.2, 0.0, Direction.Undefined, false, Scope.Regional); eventPlayer.PlayEvents(symbol, playedTrade); Assert.AreEqual(eventListener.GetEventCount <IDxOrder>(symbol), 1); Assert.AreEqual(eventListener.GetEventCount <IDxTrade>(symbol), 1); //thread-safety case DXEndpoint.Create(); Parallel.For(ParallelFrom, ParallelTo, i => { Assert.DoesNotThrow(() => { DXFeed.GetInstance().CreateSubscription <IDxEventType>(typeof(IDxOrder), typeof(IDxTrade)); }); }); }
public void CreateTimeSeriesSubscriptionTypesTest() { //create default endpoint DXEndpoint.Create(); //try to create subscription with invalid event types parameters //all attempts to create subscription in this block must be failed with exception Assert.Catch(typeof(ArgumentException), () => { DXFeed.GetInstance().CreateTimeSeriesSubscription <IDxTimeSeriesEvent>(typeof(IDxCandle), typeof(IDxQuote)); }); Assert.Catch(typeof(ArgumentException), () => { DXFeed.GetInstance().CreateTimeSeriesSubscription <IDxTimeSeriesEvent>(typeof(IDxOrder), typeof(IDxQuote)); }); Assert.Catch(typeof(ArgumentException), () => { DXFeed.GetInstance().CreateTimeSeriesSubscription <IDxTimeSeriesEvent>(typeof(string)); }); var symbol = "SYMA"; var s = DXFeed.GetInstance().CreateTimeSeriesSubscription <IDxTimeSeriesEvent>(typeof(IDxCandle), typeof(IDxGreeks)); s.AddSymbols(symbol); TestListener eventListener = new TestListener(); s.AddEventListener(eventListener); EventPlayer <IDxTimeSeriesEvent> eventPlayer = new EventPlayer <IDxTimeSeriesEvent>(s as DXFeedSubscription <IDxTimeSeriesEvent>); var playedCandle = new PlayedCandle(symbol, Tools.DateToUnixTime(DateTime.Now), 123, 100, 12.34, 56.78, 9.0, 43.21, 1000, 999, 1001, 1002, 1, 777, 888, EventFlag.RemoveSymbol); eventPlayer.PlayEvents(symbol, playedCandle); var playedGreeks = new PlayedGreeks(symbol, EventFlag.RemoveSymbol, 1, Tools.DateToUnixTime(DateTime.Now), 456.789, 11, 555, 666, 777, 888, 999); eventPlayer.PlayEvents(symbol, playedGreeks); Assert.AreEqual(eventListener.GetEventCount <IDxCandle>(symbol), 1); Assert.AreEqual(eventListener.GetEventCount <IDxGreeks>(symbol), 1); //thread-safety case DXEndpoint.Create(); Parallel.For(ParallelFrom, ParallelTo, i => { Assert.DoesNotThrow(() => { DXFeed.GetInstance().CreateTimeSeriesSubscription <IDxTimeSeriesEvent>(typeof(IDxCandle), typeof(IDxGreeks)); }); }); }
public void CreateTimeSeriesSubscriptionTest() { var symbol = "SYMA"; var s = DXEndpoint.Create().Feed.CreateTimeSeriesSubscription <IDxCandle>(); s.AddSymbols(symbol); TestListener eventListener = new TestListener(); s.AddEventListener(eventListener); var playedCandle = new PlayedCandle(symbol, Tools.DateToUnixTime(DateTime.Now), 123, 100, 12.34, 56.78, 9.0, 43.21, 1000, 999, 1001, 1002, 1, 777, 888, EventFlag.RemoveSymbol); EventPlayer <IDxCandle> eventPlayer = new EventPlayer <IDxCandle>(s as DXFeedSubscription <IDxCandle>); eventPlayer.PlayEvents(symbol, playedCandle); Assert.AreEqual(eventListener.GetEventCount <IDxCandle>(symbol), 1); IDxCandle receivedCandle = eventListener.GetLastEvent <IDxCandle>().Event; Assert.AreEqual(symbol, receivedCandle.EventSymbol.ToString()); CompareCandles(playedCandle, receivedCandle); //thread-safety case DXEndpoint.Create(); Parallel.For(ParallelFrom, ParallelTo, i => { Assert.DoesNotThrow(() => { DXEndpoint.GetInstance().Feed.CreateTimeSeriesSubscription <IDxCandle>(); }); }); }
public void OnPlay(string debugReason, bool forceInterrupt, Cue cue, CueBehavior cueBehavior, Event[] aoEvents) { isPlaying = true; BroadcastMessageToPlayer(layer, player, runtimeTransform, cueBehavior, Cue.MessageEvent.OnPlay); if (cue != null && CueIsPlaylist(cue)) { InitializePerformanceInternal(debugReason + " / " + cue.name, layer, cue, player, runtimeTransform, forceInterrupt, OnPlaylistEnd); } else { Event[] eventsToPlay = cueBehavior != null ? cueBehavior.events : aoEvents; string eventsName = cue != null ? cue.name : (cueBehavior != null ? cueBehavior.name : aoEvents[0].name); player.SubscribeToPlayEnd(layer, OnEventEnd); player.PlayEvents(debugReason, eventsName, runtimeTransform, eventsToPlay, layer, cueBehavior != null ? cueBehavior.overrideDuration : -1, forceInterrupt); } }
public void CreateSubscriptionTest() { var symbol = "SYMA"; var s = DXEndpoint.Create().Feed.CreateSubscription <IDxOrder>(); s.AddSymbols(symbol); TestListener eventListener = new TestListener(); s.AddEventListener(eventListener); var playedOrder = new PlayedOrder(symbol, 0, 0x4e54560000000006, 0, 0, 0, 0, 100, 25, Scope.Order, Side.Buy, 'A', OrderSource.NTV, "AAAA"); EventPlayer <IDxOrder> eventPlayer = new EventPlayer <IDxOrder>(s as DXFeedSubscription <IDxOrder>); eventPlayer.PlayEvents(symbol, playedOrder); Assert.AreEqual(eventListener.GetEventCount <IDxOrder>(symbol), 1); IDxOrder receivedOrder = eventListener.GetLastEvent <IDxOrder>().Event; Assert.AreEqual(symbol, receivedOrder.EventSymbol); CompareOrders(playedOrder, receivedOrder); //try to create subscription on closed endpoint DXEndpoint.GetInstance().Close(); Assert.Catch(typeof(InvalidOperationException), () => { DXFeed.GetInstance().CreateSubscription <IDxOrder>(); }); //thread-safety case DXEndpoint.Create(); Parallel.For(ParallelFrom, ParallelTo, i => { Assert.DoesNotThrow(() => { DXFeed.GetInstance().CreateSubscription <IDxOrder>(); }); }); }
public void ResetFromTimeStampTest() { string symbol = "SYMA"; TestListener eventListener = new TestListener(); var s = DXEndpoint.Create().Feed.CreateTimeSeriesSubscription <IDxCandle>(); s.OnSubscriptionClosed += OnSubscriptionClosed; s.OnSymbolsAdded += OnSymbolsAdded; s.OnSymbolsRemoved += OnSymbolsRemoved; s.AddEventListener(eventListener); s.AddSymbols(symbol); Assert.AreEqual(long.MaxValue, s.FromTimeStamp); //try to change FromTimeStamp property isFiresOnSubscriptionClosed = false; isFiresOnSymbolsAdded = false; isFiresOnSymbolsRemoved = false; long fromTime = Tools.DateToUnixTime(DateTime.Now.AddMonths(-1)); s.FromTimeStamp = fromTime; Assert.AreEqual(fromTime, s.FromTimeStamp); Assert.True(s.GetSymbols().SetEquals(new object[] { symbol })); Assert.True(s.EventTypes.SetEquals(new Type[] { typeof(IDxCandle) })); Assert.False(isFiresOnSubscriptionClosed); Assert.False(isFiresOnSymbolsAdded); Assert.False(isFiresOnSymbolsRemoved); var playedCandle = new PlayedCandle(symbol, Tools.DateToUnixTime(DateTime.Now), 123, 100, 12.34, 56.78, 9.0, 43.21, 1000, 999, 1001, 1002, 1, 777, 888, EventFlag.RemoveSymbol); EventPlayer <IDxCandle> eventPlayer = new EventPlayer <IDxCandle>(s as DXFeedSubscription <IDxCandle>); eventPlayer.PlayEvents(symbol, playedCandle); Assert.AreEqual(eventListener.GetEventCount <IDxCandle>(symbol), 1); IDxCandle receivedCandle = eventListener.GetLastEvent <IDxCandle>().Event; Assert.AreEqual(symbol, receivedCandle.EventSymbol.ToString()); DXFeedTest.CompareCandles(playedCandle, receivedCandle); }
public void GetLastEventsPromisesTest() { //create default endpoint DXEndpoint.Create(); var symbols = new string[] { "SYMA", "SYMB" }; //try to create promise with invalid parameters Assert.Catch(typeof(ArgumentException), () => { try { Task.WaitAll(DXFeed.GetInstance().GetLastEventsPromises <IDxTrade>(null, CancellationToken.None).ToArray()); } catch (AggregateException ae) { foreach (var inner in ae.InnerExceptions) { throw inner; } } }); Assert.Catch(typeof(ArgumentException), () => { try { Task.WaitAll(DXFeed.GetInstance().GetLastEventsPromises <IDxTrade>(new object[] { null }, CancellationToken.None).ToArray()); } catch (AggregateException ae) { foreach (var inner in ae.InnerExceptions) { throw inner; } } }); //try to cancel promise CancellationTokenSource cancelSource = new CancellationTokenSource(); List <Task <IDxLastingEvent> > promises = DXFeed.GetInstance().GetLastEventsPromises <IDxTrade>(symbols, cancelSource.Token); cancelSource.CancelAfter(TimeSpan.FromSeconds(2)); try { Task.WaitAll(promises.ToArray()); } catch (AggregateException ae) { foreach (var inner in ae.InnerExceptions) { if (!(inner is OperationCanceledException)) { Assert.Fail("Unexpected exception: " + inner); } } } //try wait promise with timeout cancelSource = new CancellationTokenSource(TimeSpan.FromSeconds(2)); promises = DXFeed.GetInstance().GetLastEventsPromises <IDxTrade>(symbols, cancelSource.Token); try { Task.WaitAll(promises.ToArray()); } catch (AggregateException ae) { foreach (var inner in ae.InnerExceptions) { if (!(inner is OperationCanceledException)) { Assert.Fail("Unexpected exception: " + inner); } } } //try close endpoint while promise waiting Task closeEndpointTask = Task.Run(() => { Thread.Sleep(TimeSpan.FromSeconds(2)); DXEndpoint.GetInstance().Close(); }); promises = DXFeed.GetInstance().GetLastEventsPromises <IDxTrade>(symbols, CancellationToken.None); List <Task> allTasks = new List <Task>(); foreach (var p in promises) { allTasks.Add(p); } allTasks.Add(closeEndpointTask); try { Task.WaitAll(allTasks.ToArray()); } catch (AggregateException ae) { foreach (var inner in ae.InnerExceptions) { if (!(inner is OperationCanceledException)) { Assert.Fail("Unexpected exception: " + inner); } } } //try to get promise on closed endpoint promises = DXFeed.GetInstance().GetLastEventsPromises <IDxTrade>(symbols, CancellationToken.None); try { Task.WaitAll(promises.ToArray()); } catch (AggregateException ae) { foreach (var inner in ae.InnerExceptions) { if (!(inner is OperationCanceledException)) { Assert.Fail("Unexpected exception: " + inner); } } } //try to get last event succesfully var playedTrades = new PlayedTrade[] { new PlayedTrade(symbols[0], Tools.DateToUnixTime(DateTime.Now), 0, 0, 'B', 123.456, 100, 123, 1.1, 0, 2.2, 0.0, Direction.Undefined, false, Scope.Regional), new PlayedTrade(symbols[1], Tools.DateToUnixTime(DateTime.Now), 0, 0, 'B', 234.567, 101, 234, 3.2, 0, 4.3, 0.0, Direction.Undefined, false, Scope.Regional) }; Task eventPlayerTask = Task.Run(() => { Thread.Sleep(TimeSpan.FromSeconds(1)); foreach (var t in playedTrades) { EventPlayer <IDxTrade> eventPlayer = new EventPlayer <IDxTrade>(GetSubscriptionFromFeed <IDxTrade>(t.EventSymbol)); eventPlayer.PlayEvents(t.EventSymbol, t); } }); cancelSource = new CancellationTokenSource(TimeSpan.FromSeconds(10)); promises = DXEndpoint.Create().Feed.GetLastEventsPromises <IDxTrade>(symbols, cancelSource.Token); allTasks = new List <Task>(); foreach (var p in promises) { allTasks.Add(p); } allTasks.Add(eventPlayerTask); Assert.DoesNotThrow(() => { Task.WaitAll(allTasks.ToArray()); }); Dictionary <string, PlayedTrade> playedTradeDictionary = new Dictionary <string, PlayedTrade>(); foreach (var t in playedTrades) { playedTradeDictionary[t.EventSymbol] = t; } foreach (var p in promises) { IDxTrade lastTrade = p.Result as IDxTrade; Assert.True(playedTradeDictionary.ContainsKey(lastTrade.EventSymbol)); var playedTrade = playedTradeDictionary[lastTrade.EventSymbol]; playedTradeDictionary.Remove(lastTrade.EventSymbol); CompareTrades(playedTrade, lastTrade); } //thread-safety case DXEndpoint.Create(); List <Task> threadTasks = new List <Task>(); for (int i = 0; i < 10; i++) { var threadSymbols = new string[] { symbols[0] + i.ToString(), symbols[1] + i.ToString() }; var threadPlayedTrades = new PlayedTrade[] { new PlayedTrade(threadSymbols[0], Tools.DateToUnixTime(DateTime.Now), 0, 0, 'B', 123.456, 100, 123, 1.1, 0, 2.2, 0.0, Direction.Undefined, false, Scope.Regional), new PlayedTrade(threadSymbols[1], Tools.DateToUnixTime(DateTime.Now), 0, 0, 'B', 234.567, 101, 234, 3.2, 0, 4.3, 0.0, Direction.Undefined, false, Scope.Regional) }; HashSet <string> threadPlayedSymbols = new HashSet <string>(); foreach (var t in threadPlayedTrades) { threadTasks.Add(Task.Run(() => { Thread.Sleep(TimeSpan.FromSeconds(2)); var eventPlayer = new EventPlayer <IDxTrade>(GetSubscriptionFromFeed <IDxTrade>(t.EventSymbol)); eventPlayer.PlayEvents(t.EventSymbol, t); })); threadPlayedSymbols.Add(t.EventSymbol); } foreach (var p in DXEndpoint.GetInstance().Feed.GetLastEventsPromises <IDxTrade>(threadSymbols, new CancellationTokenSource(TimeSpan.FromSeconds(20)).Token)) { threadTasks.Add(p.ContinueWith((resultPromise) => { IDxTrade threadTrade = resultPromise.Result as IDxTrade; Assert.True(threadPlayedSymbols.Remove(threadTrade.EventSymbol)); })); } } ; Assert.DoesNotThrow(() => { Task.WaitAll(threadTasks.ToArray()); }); }
public void GetLastEventPromiseTest() { //create default endpoint DXEndpoint.Create(); var symbol = "SYMA"; //try to create promise with invalid parameters Assert.Catch(typeof(ArgumentException), () => { try { DXFeed.GetInstance().GetLastEventPromise <IDxTrade>(null, CancellationToken.None).Wait(); } catch (AggregateException ae) { foreach (var inner in ae.InnerExceptions) { throw inner; } } }); //try to cancel promise CancellationTokenSource cancelSource = new CancellationTokenSource(); Task <IDxLastingEvent> promise = DXFeed.GetInstance().GetLastEventPromise <IDxTrade>(symbol, cancelSource.Token); cancelSource.CancelAfter(TimeSpan.FromSeconds(2)); try { Task.WaitAll(promise); } catch (AggregateException ae) { foreach (var inner in ae.InnerExceptions) { if (!(inner is OperationCanceledException)) { Assert.Fail("Unexpected exception: " + inner); } } } //try wait promise with timeout cancelSource = new CancellationTokenSource(TimeSpan.FromSeconds(2)); promise = DXFeed.GetInstance().GetLastEventPromise <IDxTrade>(symbol, cancelSource.Token); try { Task.WaitAll(promise); } catch (AggregateException ae) { foreach (var inner in ae.InnerExceptions) { if (!(inner is OperationCanceledException)) { Assert.Fail("Unexpected exception: " + inner); } } } //try close endpoint while promise waiting Task closeEndpointTask = Task.Run(() => { Thread.Sleep(TimeSpan.FromSeconds(2)); DXEndpoint.GetInstance().Close(); }); promise = DXFeed.GetInstance().GetLastEventPromise <IDxTrade>(symbol, CancellationToken.None); try { Task.WaitAll(promise, closeEndpointTask); } catch (AggregateException ae) { foreach (var inner in ae.InnerExceptions) { if (!(inner is OperationCanceledException)) { Assert.Fail("Unexpected exception: " + inner); } } } //try to get promise on closed endpoint promise = DXFeed.GetInstance().GetLastEventPromise <IDxTrade>(symbol, CancellationToken.None); try { Task.WaitAll(promise); } catch (AggregateException ae) { foreach (var inner in ae.InnerExceptions) { if (!(inner is OperationCanceledException)) { Assert.Fail("Unexpected exception: " + inner); } } } //try to get last event succesfully var playedTrade = new PlayedTrade(symbol, Tools.DateToUnixTime(DateTime.Now), 0, 0, 'B', 123.456, 100, 123, 1.1, 0, 2.2, 0.0, Direction.Undefined, false, Scope.Regional); Task eventPlayerTask = Task.Run(() => { Thread.Sleep(TimeSpan.FromSeconds(1)); EventPlayer <IDxTrade> eventPlayer = new EventPlayer <IDxTrade>(GetSubscriptionFromFeed <IDxTrade>(symbol)); eventPlayer.PlayEvents(symbol, playedTrade); }); cancelSource = new CancellationTokenSource(TimeSpan.FromSeconds(10)); promise = DXEndpoint.Create().Feed.GetLastEventPromise <IDxTrade>(symbol, cancelSource.Token); Assert.DoesNotThrow(() => { Task.WaitAll(promise, eventPlayerTask); }); IDxTrade lastTrade = promise.Result as IDxTrade; Assert.AreEqual(symbol, lastTrade.EventSymbol); CompareTrades(playedTrade, lastTrade); //thread-safety case DXEndpoint.Create(); List <Task> tasks = new List <Task>(); for (int i = 0; i < 10; i++) { var threadSymbol = symbol + i.ToString(); var threadPlayedTrade = new PlayedTrade(threadSymbol, Tools.DateToUnixTime(DateTime.Now), 0, 0, 'B', 123.456, 100, 123, 1.1, 0, 2.2, 0.0, Direction.Undefined, false, Scope.Regional); tasks.Add(Task.Run(() => { Thread.Sleep(TimeSpan.FromSeconds(1)); var eventPlayer = new EventPlayer <IDxTrade>(GetSubscriptionFromFeed <IDxTrade>(threadSymbol)); eventPlayer.PlayEvents(threadSymbol, threadPlayedTrade); })); var threadPromise = DXEndpoint.GetInstance().Feed .GetLastEventPromise <IDxTrade>(threadSymbol, new CancellationTokenSource(TimeSpan.FromSeconds(5)).Token) .ContinueWith((resultPromise) => { IDxTrade threadTrade = resultPromise.Result as IDxTrade; Assert.AreEqual(threadSymbol, threadTrade.EventSymbol); }); tasks.Add(threadPromise); } ; Assert.DoesNotThrow(() => { Task.WaitAll(tasks.ToArray()); }); }