Esempio n. 1
0
        static async Task Main(string[] args)
        {
            //Get configuration
            var networkAddress = NetworkAddress.Parse(ConfigurationManager.AppSettings["Network"]);
            var broadcastPort  = int.Parse(ConfigurationManager.AppSettings["BroadcastUdpPort"]);
            var unicastPort    = int.Parse(ConfigurationManager.AppSettings["UnicastTcpPort"]);

            localAddress = networkAddress.GetLocalAddress();

            //This client exposes all of the high-level functionality
            var collaborationClient = new CollaborationClient(networkAddress, broadcastPort, unicastPort);

            collaborationClient.CollaborationRequestAccepted          += OnCollaborationRequestAccepted;
            collaborationClient.CollaborationRequestDeclined          += OnCollaborationRequestDeclined;
            collaborationClient.StopCollaborationRequested            += OnStopCollaborationRequested;
            collaborationClient.SubscriptionRequested                 += OnSubscriptionRequested;
            collaborationClient.SubscriberNotifiedToStopCollaborating += OnSubscriberNotifiedToStopCollaborating;

            //Start listening per collaboration requests broadcasts
            var broadcastListenTask = StartListeningForCollaborationRequests(collaborationClient, listeningCancellationTokenSource.Token);
            //And also listen for subscription requests
            var subscriptionListenTask = StartListeningForSubscriptions(collaborationClient, listeningCancellationTokenSource.Token);

            //Then, read commands from the user
            HandleUserInput(collaborationClient);

            //When it's time to close the app, cancel any pending work and shutdown the hosts
            workCancellationTokenSource?.Cancel();
            await Task.WhenAll(broadcastListenTask, subscriptionListenTask);
        }
Esempio n. 2
0
        private static async Task StartListeningForCollaborationRequests(CollaborationClient client, CancellationToken token)
        {
            Uri uri = client.ListenForCollaborationRequests();

            Console.WriteLine($"Started listening on incoming collaboration requests on address {uri}");
            try
            {
                await Task.Delay(-1, token);
            }
            catch (OperationCanceledException)
            {
            }
            finally
            {
                client.StopListeningForCollaborationRequests();
            }
        }
Esempio n. 3
0
        private static void HandleUserInput(CollaborationClient client)
        {
            ConsoleKeyInfo input;

            WriteInstructions();

            while ((input = Console.ReadKey()).Key != ConsoleKey.Enter)
            {
                Console.WriteLine();
                switch (input.Key)
                {
                case ConsoleKey.R:
                    //Let's generate some random filename
                    //TODO: this needs to be modified with appropriate logic
                    var filename = Guid.NewGuid().ToString().Split('-').Last() + ".ext";
                    try
                    {
                        var collaboration = client.BroadcastCollaborationRequestForFile(filename);
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine($"Collaboration request broadcast successfully for file {collaboration.Filename}, starting work now...");
                        Console.ResetColor();
                        workCancellationTokenSource = new CancellationTokenSource();
                        PerformWorkOnFile(collaboration.Filename, workCancellationTokenSource.Token);
                    } catch (Exception exc)
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine(exc.Message);
                        Console.ResetColor();
                    }
                    break;

                case ConsoleKey.S:
                    workCancellationTokenSource?.Cancel();
                    client.StopCollaboration();
                    Console.WriteLine("Work stopped");
                    WriteInstructions();
                    break;
                }
            }
            listeningCancellationTokenSource.Cancel();
        }
 public CollaborationRequestService(CollaborationClient client)
 {
     this.client = client;
 }
 public SubscriptionService(CollaborationClient client)
 {
     this.client = client;
 }