As a part of a module named ‘Systems Programming’ for the final year at University, we had to develop a client and server music streaming service. The client would only play the audio data that it received from the server, without knowing anything about the music file itself. To do so, the applications use the XAudio2 API and WinSock to stream from the server and to play on the client. A list of extensive features are below, however another important criteria for this project was to be able to have multiple of clients and to maintain a long up-time.
- The server was developed in C++ as a Windows Service, to run in a background.
- The client is a DLL developed in C++ which has all of the functionality of the application, whereas the UI was developed as a C# WPF.
- Ability to handle over 8 clients simultaneously with an up-time of over 10 hours.
- Server application ability to stream WAV and OGG files.
- Server application uses a config file to setup server address, port and music folder location.
- Client can play, pause, next and previous on command.
- Has the ability to auto-play the next song or loop.
- Can mute and fade in the song volumes, and adjust the volume.
- Displays a list of all stream-able songs from the server.
- Shows the amount of audio streamed from the server.
- Uses a buffer for the audio streaming.
- Direct3D11 basic visualisation.
- Using dynamic data structures such as vectors, there is zero self allocated memory to cause memory leaks.
- Strict RAII and PIMPL designs was used throughout.