static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            var random  = new Random();
            var subject = new SimpleCalculator(random.Next(-20, 100), random.Next(-10, 50));

            var sum            = new SumObserver();
            var multiplication = new MultiplicationObserver();

            subject.Attach(multiplication);
            subject.Attach(sum);

            subject.Attach(new DivisionObserver());
            subject.Attach(new SubtractionObserver());

            Console.WriteLine("\nExemplo sorteando os observadores");
            for (int i = 0; i < 2; i++)
            {
                subject.Operation = (Operation)random.Next(0, 3);
                subject.Notify(subject);
            }

            Console.WriteLine("\nExemplo com todos os observadores");
            for (int i = 0; i < 4; i++)
            {
                subject.Operation = (Operation)i;
                subject.Notify(subject);
            }

            subject.Detach(sum);
            subject.Detach(multiplication);

            Console.WriteLine("\nExemplo após remover os observadores de Soma e Multiplicação");
            for (int i = 0; i < 4; i++)
            {
                subject.Operation = (Operation)i;
                subject.Notify(subject);
            }

            Console.ReadKey();
        }
Beispiel #2
0
        public void CouldCreateTwoRepositoriesAndBroadcastMessages()
        {
            using (var repo = new DataRepository("../SeriesRepositoryTests", 100))
                using (var repo2 = new DataRepository("../SeriesRepositoryTests", 100)) {
                    for (int rounds = 0; rounds < 1000; rounds++)
                    {
                        var sw = new Stopwatch();


                        // this read and write series have the same underlying instance inside the repo
                        // the reead series are just wrapped with .ReadOnly()
                        var observable = repo2.Broadcast <int>("test_CouldCreateTwoRepositoriesAndBroadcastMessages").Result;

                        var observer = repo.Broadcast <int>("test_CouldCreateTwoRepositoriesAndBroadcastMessages").Result;
                        var count    = 1000000;

                        sw.Start();

                        var sum = new SumObserver(count);

                        var unsubscribe = observable.Subscribe(sum);

                        for (int i = 0; i < count; i++)
                        {
                            observer.OnNext(i);
                        }

                        sum.Tcs.Task.Wait();

                        Console.WriteLine("Sum: " + sum.Tcs.Task.Result);

                        sw.Stop();
                        Trace.WriteLine($"Elapsed msec: {sw.ElapsedMilliseconds}");
                        Trace.WriteLine($"Round: {rounds}");
                        unsubscribe.Dispose();
                    }
                }
        }