aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: d6b7c3312ebb47aa59c33156d9f023ca5867fd93 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# Snowcast

## Description

A music streaming server consisting of three programs: the server, the client controller, & the client listener.

## Getting Started

### Making the executables

* Ensure you have gcc installed, as that is what the Makefile uses.
* Run `make` in your terminal to make the 3 executables `./snowcast_server`, `./snowcast_control`, & `./snowcast_listener`!

### Executing program

Running the 3 executables without arguments will tell you the necessary arguments to get going.

* To run the server, type in `./snowcast_server` into your terminal.
* To run the controller, type `./snowcast_control` into your terminal.
* To run the listener, type `./snowcast_listener` into your terminal.

### Program Design

I did not implement origonal design doc, due to random malloc errors with the autograder. I rewrote the server, with the the design...

* A "select_thread" controls accepting new clients and responding to commands from clients. It redirects the logic to separate helper functions to send replies.
* The station information is held by an array. Each station has a thread that broadcasts to the listeners every half-second (at half the rate per second). At the bottom of this half-second, the station file is read into a buffer and threads are created off of this buffer, waiting to be released. At the top of this half-second, the station thread then bradcasts a `cond` variable to start all threads that send the station.
* The `users` pointer containing the user data (along with the separate stations pointer) has a mutex `users_mutex` that allows safe-thread write and deletion. This pointer is also dynamic, using realloc when more memory is needed. There are a few memory optimizations implemented (see `init_user(...)`).
* The code is well documented, so many smaller design choices can be read there :)

## Acknowledgments

* [Beej's Guide to Network Programming](https://beej.us/guide/bgnet/)
* [Lecture Example Code](https://github.com/brown-csci1680/lecture-examples/tree/main)