? This project involves writing a middleware TCP/IP client application that will implement a local API and interface with a web service API in order to transfer files.? ?
?
? The project will be written in C# and the qualified programmer will have experience and be familiar with:
?
? Using built-in .NET GUI components.
? TCP/IP client/server programming.
? Writing and reading XML.
? Familiarity with the Windows Systray.
## Deliverables
Following is a functional spec describing this project:
SendThisFile Daemon Functional Specification
Summary
File transfers using a SendThisFile client (e.g. Outlook plug-in, stand-alone client) will communicate with a daemon process using a client-side API that is described below. The daemon process will communicate with the SendThisFile file servers via a server-side API, also described below. This document identifies all functions provided by the daemon process, and all API calls that the daemon process must make to communicate with the SendThisFile file servers.
This daemon will be written in C# using industry standard best practices, and be compatible with .NET version X (to be determined). Persistence will be implemented with XML files.
Feature Requirements
**Launching the Daemon Process -** The daemon executable will be accessible via the system tray, identified by a SendThisFile icon. There can only be a single instance of the daemon process on a single machine. The executable can be started in three ways:
1.? ? ? ? ? Start? --> All programs? --> SendThisFile ? [login to view URL]
2.? ? ? ? ? Quick launch
3.? ? ? ? ? Start? --> All programs? --> Startup folder (by default the daemon should start on boot-up).
The daemon can be launched with an option command line parameter of “-debug??, which enables a debug menu option under Help and will display programmer debug statements.? Also when this is enabled debug statements will be written to a [login to view URL] file.
?
**Daemon User Interface** ??" When the daemon executable icon is clicked on the system tray, a user interface will open that contains the following information on various screens:
1.? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Status and progress information for all current transfers for all users on the machine.
2.? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A cancel icon for each transfer.
3.? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A button to cancel all transfers.
4.? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Sequential/concurrent toggle.
5.? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A speed throttle for each transfer.
6.? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A global speed throttle for all transfers.
7.? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A logging toggle.
8.? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A debugging toggle.
9.? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A screen to display the log file.
10.? ? ? ? ? ? ? ? ? ? ? ? A Send Log To Customer Support button.
11.? ? ? ? ? ? ? ? ? ? ? ? Network configuration menu.
12.? ? ? ? ? ? ? ? ? ? ? ? A reset to default settings button (which overwrites the current configuration XML file).
13.? ? ? ? ? ? ? ? ? ? ? ? A link to a help page, which opens a URL in their default browser.
**Daemon Right-click Menu -** By right-clicking the daemon executable on the system tray, a menu with the following options should appear:
1.? ? ? ? ? Open
2.? ? ? ? ? Cancel all transfers
3.? ? ? ? ? Exit
**System Tray Icons ??"** The system tray icon should have 2 different states represented by 2 different graphics that will be provided.? The states are:
1.? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Waiting (our logo with a solid yellow ring)
2.? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Transferring (our logo with a yellow ring cycling between yellow and green).
Data Flow Overview
**Basic data flow ??"**
1.? ? ? ? ? The client application will pass login information to the daemon.
2.? ? ? ? ? The daemon will pass the login information to the server-side API.
3.? ? ? ? ? The server-side API will respond with access status to the daemon.
4.? ? ? ? ? The daemon will communicate access status to the client.
5.? ? ? ? ? The client application will hand off file transfer information to the daemon.
6.? ? ? ? ? The daemon will request a unique transferid and server from the server-side API.
7.? ? ? ? ? The server-side API will respond with a unique transferid and file server.
8.? ? ? ? ? The daemon will transfer the file to the server-side API.?
9.? ? ? ? ? The file servers will respond with a status regarding the transfer.
10. The daemon will make a callback to the client application, returning the status of the transfer.