T B H P N

Project #4 - Remote Code Repository

Spring 2018

Version 1.1, Due Date: Tuesday May 1st

Purpose:

A Code Repository is a Program responsible for managing source code resources, e.g., files and documents. A fully developed Repository will support file persistance, managment of versions, and the acquisition and publication of source and document files. A Remote Repository adds the capability to access the Repository's functionality over a communication channel, e.g., interprocess communication, inter-network communication, and communication across the internet.
In this project we will develop a Remote Code Repository, local Client, and communication channel that supports client access to the Repository from any internet enabled processor.
The communication channel will use sockets and support an HTTP like message structure. The channel could support: One way asynchronous communication is required, and file transfer using messages with binary bodies has already been implemented for Project #3 and that is sufficient to meet all requirements related to communication, below.
The Remote Code Repository will:
Clients of the Remote Code Repository will provide a Graphical User Interface (GUI) with means to:

Requirements:

Your Remote Repository:
  1. (1) Shall use Visual Studio 2017 and the standard C++ libraries, as provided in the ECS computer labs. You may also use C#, the .Net Windows Presentation Foundation framework, and C++\CLI for the graphical part of each Client.
  2. (5) Shall provide a Repository Server that provides functionality to check-in, check-out, and browse packages, specified by NoSql database queries.
  3. (5) Shall provide a Client program that can upload and download files3, and view Repository contents, as described in the Purpose section, above.
  4. (2) Shall provide a message-passing communication system, based on Sockets, used to access the Repository's functionality from another process or machine.
  5. (2) The communication system shall provide support for passing HTTP style messages using asynchronous one-way messaging.
  6. (2) The communication system shall also support sending and receiving blocks of bytes6 to support file transfer.
  7. (8) Shall include an automated unit test suite that demonstrates you meet all the requirements of this project4 including the transmission of files.

  1. Categories are the names of folders in which the Repository stores its source code and web files. You may define Categories in any way that seems sensible. For example, they could simply be the namespace(s) for the uploaded files, or a Client supplied name.
  2. You will find a demonstration of how to programmatically start an application here.
  3. The stream capablity is intended to send files, which could be either text or binary format. Stream size will be the file size.
  4. Transmitting and receiving byte streams will be used to send and receive files in either text or binary format.
  5. This is in addition to the construction tests you include as part of every package you submit.

What you need to know:

In order to successfully meet these requirements you will need to know:
  1. Details of the C++ language: http://CppReference.com including C++11 threading and concurrency models.
  2. C++\CLI or C# syntax in order to build the Client GUI.
  3. How sockets and the provided socket library work.
  4. All those things you learned while developing code for Projects #1, #2, and #3.