Project #4 Sample - Remote Source Code Analyzer

Version 1.0,
Due Date: Already Completed - find code here
Note:
This is a demonstration project, which you are not expected to implement.
Instead, you will implement the projects linked on the Synchronous pages.

Purpose:

In this project we will add two new components to our Code Analyzer, built in Project #3, a Graphical User Interface (GUI), and communication channel for communicating with remote machines. The analysis processing remains the same.
The GUI will be built with Windows Presentation Foundation (WPF). It supports browsing for the path to analyze and setting analysis properties, like file patterns and display options. You are encouraged to use C# to build the GUI and to support access to a C++ communication channel, using a small C++\CLI layer to interoperate with the native C++ channel code.
The Communication channel sends messages between the GUI application and Code Analyzer console application1. The intent is to support Quality Assurance (QA) operations where the QA staff run code analyzses on large sets of packages in a remote server. The Code Analyzer resides on the remote machine and responds to commands from a local GUI used by QA.

Requirements:

Your Remote Code Analyzer Project:
  1. Shall be written in C#, using the .Net Framework, C++\CLI, and C++, using the standard C++ libraries. You may also use helper code provided in the course Repository.
  2. Shall use Visual Studio, Community Edition available at no cost.
  3. Shall provide a C++ message-passing communication channel.
  4. That channel Shall send Message class instances that have:
    • Source and Destination addresses
    • Message type
    • Author
    • Time-Date
    • String body:
      Expected to hold an XML string supplying information needed to execute a specific request.
  5. Shall support uploading and downloading files.
  6. Shall provide a Client, with GUI, in separate process, that allows users to exercise the complete functionality of the Code Analyzer in a remote machine.

  1. Messaging needs to support:
    • Sending, on request, directory information from the remote machine to the local GUI to support browsing for a path to analyze.
    • Sending a message from the local GUI with command-line arguments for the remote Code Analyzer.
    • Sending a file of results from the remote machine to the local GUI. You may find it effective to send a separate analysis message at the end of each file analysis.
  2. You will need to make modifications to your Project #3 Analyzer to use the communication channel instead of logging results to a local console.
  3. This could be done by sending the results as a string body of a message, rather than sending a file.
  4. A QA analysis might encompass hundreds of files, so sending these progress messages will improve the user experience.

What you need to know:

In order to successfully meet these requirements you will need to know:
  1. How to build a Windows Presentation Foundation (WPF) application.
  2. How to use sockets to build a message-passing communication system: Wk #6a and Wk #6b.
  3. How to use C++\CLI to support interoperation between C# code and native C++: Wk #7a and Wk #7b.