Esempio n. 1
0
        public void TestUpdateOnlyLastValue()
        {
            var target = TestTableHelper.CreateReactiveTable();
            var source = new ReactiveBatchedPassThroughTable(target, new DefaultThreadMarshaller(), true);

            var rowUpdates = new RowUpdateHandler();

            target.RowUpdates().Subscribe(rowUpdates.OnRowUpdate);
            var columnUpdates = new ColumnUpdateHandler();

            target.ColumnUpdates().Subscribe(columnUpdates.OnColumnUpdate);

            TestAdd(source, target, rowUpdates);

            columnUpdates.LastColumnsUpdated.Clear();

            source.SetValue(TestTableColumns.StringColumn, 0, "Changed");
            Assert.AreEqual("Blah", target.GetValue <string>(TestTableColumns.StringColumn, 0));
            source.SetValue(TestTableColumns.StringColumn, 0, "Changed2");
            Assert.AreEqual("Blah", target.GetValue <string>(TestTableColumns.StringColumn, 0));

            source.SynchroniseChanges();

            // Check that there was only one col update fro the StringColumn
            Assert.AreEqual(1, columnUpdates.LastColumnsUpdated.Count);
            Assert.AreEqual(columnUpdates.LastColumnsUpdated.Last(), TestTableColumns.StringColumn);
            // And that the value is the last one
            Assert.AreEqual("Changed2", target.GetValue <string>(TestTableColumns.StringColumn, 0));
        }
Esempio n. 2
0
        private static void TestAdd(ReactiveBatchedPassThroughTable source, ReactiveTable target, RowUpdateHandler updateHandler)
        {
            var sourceRow1 = source.AddRow();

            Assert.AreEqual(0, target.RowCount);

            TestTableHelper.SetAndTestValueNotPresent(source, target, sourceRow1, updateHandler.LastRowUpdated, 101, TestTableColumns.IdColumn);
            TestTableHelper.SetAndTestValueNotPresent(source, target, sourceRow1, updateHandler.LastRowUpdated, "Blah", TestTableColumns.StringColumn);
            TestTableHelper.SetAndTestValueNotPresent(source, target, sourceRow1, updateHandler.LastRowUpdated, 4324m, TestTableColumns.DecimalColumn);

            var sourceRow2 = source.AddRow();

            Assert.AreEqual(0, target.RowCount);

            TestTableHelper.SetAndTestValueNotPresent(source, target, sourceRow2, updateHandler.LastRowUpdated, 102, TestTableColumns.IdColumn);
            TestTableHelper.SetAndTestValueNotPresent(source, target, sourceRow2, updateHandler.LastRowUpdated, "Blah2", TestTableColumns.StringColumn);
            TestTableHelper.SetAndTestValueNotPresent(source, target, sourceRow2, updateHandler.LastRowUpdated, 42m, TestTableColumns.DecimalColumn);

            source.SynchroniseChanges();
            Assert.AreEqual(2, target.RowCount);

            TestTableHelper.TestValue(target, updateHandler.RowsUpdated[0], 101, TestTableColumns.IdColumn);
            TestTableHelper.TestValue(target, updateHandler.RowsUpdated[0], "Blah", TestTableColumns.StringColumn);
            TestTableHelper.TestValue(target, updateHandler.RowsUpdated[0], 4324m, TestTableColumns.DecimalColumn);

            TestTableHelper.TestValue(target, updateHandler.RowsUpdated[1], 102, TestTableColumns.IdColumn);
            TestTableHelper.TestValue(target, updateHandler.RowsUpdated[1], "Blah2", TestTableColumns.StringColumn);
            TestTableHelper.TestValue(target, updateHandler.RowsUpdated[1], 42m, TestTableColumns.DecimalColumn);
        }
Esempio n. 3
0
        public void TestDelete()
        {
            var target = TestTableHelper.CreateReactiveTable();
            var source = new ReactiveBatchedPassThroughTable(target, new DefaultThreadMarshaller());

            var updateHandler = new RowUpdateHandler();

            target.RowUpdates().Subscribe(updateHandler.OnRowUpdate);

            TestAdd(source, target, updateHandler);

            source.DeleteRow(0);
            Assert.AreEqual(2, target.RowCount);

            source.SynchroniseChanges();
            Assert.AreEqual(1, target.RowCount);
            Assert.AreEqual(102, target.GetValue <int>(TestTableColumns.IdColumn, 1));

            source.DeleteRow(1);
            Assert.AreEqual(1, target.RowCount);

            source.SynchroniseChanges();
            Assert.AreEqual(0, target.RowCount);

            source.AddRow();
            Assert.AreEqual(0, target.RowCount);

            source.SynchroniseChanges();
            Assert.AreEqual(1, target.RowCount);
        }
Esempio n. 4
0
        public void Start(Dispatcher dispatcher)
        {
            var currenciesWire = new ReactiveBatchedPassThroughTable(_currencies, new WpfThreadMarshaller(dispatcher), _synchroniseTablesDelay);

            Task.Run(() => StartReceiving(currenciesWire, FxTableDefinitions.CurrencyPair.ColumnsToFieldIds, (int)ServerPorts.Currencies));

            var ratesWire = new ReactiveBatchedPassThroughTable(_fxRates, new WpfThreadMarshaller(dispatcher), _synchroniseTablesDelay);

            Task.Run(() => StartReceiving(ratesWire, FxTableDefinitions.FxRates.ColumnsToFieldIds, (int)ServerPorts.FxRates));
        }
Esempio n. 5
0
        public void TestAdd()
        {
            var target = TestTableHelper.CreateReactiveTable();
            var source = new ReactiveBatchedPassThroughTable(target, new DefaultThreadMarshaller());

            var updateHandler = new RowUpdateHandler();

            target.RowUpdates().Subscribe(updateHandler.OnRowUpdate);

            TestAdd(source, target, updateHandler);
        }
Esempio n. 6
0
        private void SetupFeedServer(IReactiveTable feedsAndClients, ReactiveBatchedPassThroughTable feedsTable, IReactiveTableProcessor <IReactiveTable> tableEncoder)
        {
//            feedsAndClients.Subscribe(update => Console.WriteLine(update.ToString()));

            var server = new ReactiveTableTcpServer <IReactiveTable>(() => tableEncoder,
                                                                     new IPEndPoint(IPAddress.Loopback, (int)ServerPorts.BrokerFeed),
                                                                     _finished,
                                                                     s => FilterFeedsForClientTable(s, feedsAndClients),
                                                                     () => UpdateClients(feedsTable));

            // Start the server in a new thread
            Task.Run(() => server.Start(GetEncoderState()));
        }
        private IWritableReactiveTable SetupAccountTable(IWritableReactiveTable accounts,
                                                         List <IReactiveColumn> baseAccountColumns,
                                                         Dispatcher dispatcher)
        {
            baseAccountColumns.ForEach(col => accounts.AddColumn(col));

            // Create the wire table
            var accountsWire = new ReactiveBatchedPassThroughTable(accounts, new WpfThreadMarshaller(dispatcher), _synchroniseTablesDelay);

            //            var accountsWire = new ReactiveTable(accounts);
            //            new BatchedTableSynchroniser(accountsWire, accounts, new WpfThreadMarshaller(dispatcher), _synchroniseTablesDelay);

            return(accountsWire);
        }
Esempio n. 8
0
        public void Start(Dispatcher dispatcher)
        {
            // Connect up to receive the feeds
            var feedsWire = new ReactiveBatchedPassThroughTable(_feeds,
                                                                new WpfThreadMarshaller(dispatcher),
                                                                _synchroniseTablesDelay);
            var tableDecoder = GetTableDecoder();

            Task.Run(() => StartReceiving(feedsWire, BrokerTableDefinition.ColumnsToFieldIds, (int)ServerPorts.BrokerFeed, tableDecoder));

            // Subscribe to the feeds we want
            var currencyPairsWire = _currencyPairs;// new ReactivePassThroughTable(_currencyPairs, new ThreadPoolThreadMarshaller());
            var tableEncoder      = GetTableEncoder();

            Task.Run(() => SetupFeedSubscription(currencyPairsWire, tableEncoder));
        }
        private IWritableReactiveTable SetupPersonTable(IWritableReactiveTable people,
                                                        List <IReactiveColumn> baseColumns,
                                                        Dispatcher dispatcher)
        {
            // Wire up the two tables before the dynamic columns
            var peopleWire = new ReactiveBatchedPassThroughTable(people, new WpfThreadMarshaller(dispatcher), _synchroniseTablesDelay);

            //            var PeopleWire = new ReactiveTable(People);
            //            new BatchedTableSynchroniser(PeopleWire, People, new WpfThreadMarshaller(dispatcher), _synchroniseTablesDelay);

            people.AddColumn(new ReactiveCalculatedColumn2 <string, int, string>(
                                 PersonColumns.IdNameColumn,
                                 (IReactiveColumn <int>)baseColumns[0],
                                 (IReactiveColumn <string>)baseColumns[1],
                                 (idVal, nameVal) => idVal + nameVal));

            return(peopleWire);
        }
Esempio n. 10
0
        public void Start()
        {
            Console.WriteLine("Starting broker service");
            _finished.Reset();

            var feedsOutputTable = new ReactiveTable();

            BrokerTableDefinition.SetupFeedTable(feedsOutputTable);
            var feeds = new ReactiveBatchedPassThroughTable(feedsOutputTable, new DefaultThreadMarshaller());

            var clientsTable = new ReactiveTable();

            BrokerTableDefinition.SetupClientFeedTable(clientsTable);

            SetupClientCcyPairServer(clientsTable, GetTableDecoder());
            SetupFeedServer(GetFeedsAndClients(clientsTable, feedsOutputTable), feeds, GetTableEncoder());

            StartBrokerFeeds(feeds);
            Console.WriteLine("Broker service started");
        }
Esempio n. 11
0
        public void TestUpdate()
        {
            var target = TestTableHelper.CreateReactiveTable();
            var source = new ReactiveBatchedPassThroughTable(target, new DefaultThreadMarshaller());

            var rowUpdates = new RowUpdateHandler();

            target.RowUpdates().Subscribe(rowUpdates.OnRowUpdate);
            var columnUpdates = new ColumnUpdateHandler();

            target.ColumnUpdates().Subscribe(columnUpdates.OnColumnUpdate);

            TestAdd(source, target, rowUpdates);

            source.SetValue(TestTableColumns.StringColumn, 0, "Changed");
            Assert.AreEqual("Blah", target.GetValue <string>(TestTableColumns.StringColumn, 0));

            source.SynchroniseChanges();

            Assert.AreEqual("Changed", target.GetValue <string>(TestTableColumns.StringColumn, 0));
        }
Esempio n. 12
0
        private void TestSyncrhonisedBatchPassThrough(int rowCount)
        {
            var uiTable   = TableTestHelper.CreateReactiveTable();
            var delay     = TimeSpan.FromMilliseconds(250);
            var wireTable = new ReactiveBatchedPassThroughTable(uiTable, new DefaultThreadMarshaller(), delay);

            for (var i = 0; i < rowCount; i++)
            {
                var rowIndex = wireTable.AddRow();
                wireTable.SetValue(TestTableColumns.IdColumn, rowIndex, i);
                wireTable.SetValue(TestTableColumns.StringColumn, rowIndex, $"Entry {i}");
                wireTable.SetValue(TestTableColumns.DecimalColumn, rowIndex, (decimal)i);
            }

            while (wireTable.GetRowUpdateCount() > 0)
            {
                Thread.Sleep(100);
            }
            Thread.Sleep(600);

            Assert.AreEqual(uiTable.RowCount, wireTable.RowCount);
        }
Esempio n. 13
0
 /// <summary>
 /// Push all the changes to the clients
 /// </summary>
 /// <param name="passThroughTable"></param>
 private static void UpdateClients(ReactiveBatchedPassThroughTable passThroughTable)
 {
     passThroughTable.SynchroniseChanges();
 }