Пример #1
0
            public TestActor()
            {
                _dataTransfer = DataTransferManager.New(Context);
                _dataTransfer.SubscribeToEvent <TransferCompled>();
                _dataTransfer.SubscribeToEvent <TransferFailed>();
                _dataTransfer.SubscribeToEvent <IncomingDataTransfer>();

                Receive <IncomingDataTransfer>(d => d.Accept(() => File.Create(TargetFile)));

                Receive <TransferMessages.TransferCompled>(c =>
                {
                    if (_currentTransfer == null)
                    {
                        return;
                    }

                    try
                    {
                        switch (c)
                        {
                        case TransferCompled _:
                            ZipFile.Open(TargetFile, ZipArchiveMode.Read).Dispose();
                            Console.WriteLine("Tranfer Beended");
                            break;

                        case TransferFailed failed:
                            Console.WriteLine($"Transfer Fehler: {failed.Reason}");
                            break;
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e);
                    }
                    finally
                    {
                        Self.Tell(_currentTransfer);
                    }
                });



                var toDo = new Queue <Action <ManualResetEvent> >();

                toDo.Enqueue(Init);
                toDo.Enqueue(RegisterTest);
                toDo.Enqueue(RegisterTest);
                toDo.Enqueue(TransferTest);
                toDo.Enqueue(TransferTest);
                toDo.Enqueue(CleanTest);

                Receive <ManualResetEvent>(evt =>
                {
                    if (_cancel || toDo.Count == 0)
                    {
                        evt.Set();
                        return;
                    }

                    var op = toDo.Dequeue();
                    op(evt);
                    Thread.Sleep(2000);
                });
            }