static void Main(string[] args) { var log = new Log(); var statistics = new Statistics(log); var programConfiguration = new ProgramConfiguration(); if (!programConfiguration.Initialize(args)) return; log.IsVerbose = programConfiguration.IsVerbose; INetworkNode networkNode; switch (programConfiguration.Direction) { case DirectionTypes.Sender: { networkNode = new Sender(log, statistics, programConfiguration); log.Info("Application initialized - press Escape to exit."); } break; case DirectionTypes.Receiver: { networkNode = new Receiver(log, statistics, programConfiguration); log.Info("Application initialized - press Escape to exit."); } break; default: throw new Exception("Invalid network node direction."); } networkNode.Start(); statistics.StartPrintStatistics(programConfiguration.Direction); while (Console.ReadKey(true).Key != ConsoleKey.Escape) { } log.Info("Application shutting down..."); }