# Barath - Coding Assignment
- Feel free to use the programming language of your choice
## Part 1
### Create Sender App
- The Sender App logic increments a counter every second (infinetely or until interruption)
- The Sender App sends each count number to the Receiver App
- The Sender App has associated an arbitrary string appID that is sent along each count to the Reciever App
- The Sender App has associated another NodeID that represents the if is the main app or the failover app NodeID
Suggested payload to be sent to the Receiver:
```json=
{
"count": int, // 0,1,2,3,4 ...
"appID": string,
"nodeID": string
}
```
### Create Receiver App
- The Receiver App logic just receives the payload from the Sender App.
- The Receiver App prints each payload received
## Part 2
### Deploy with Atomic Failover System
Main App == Master App
Failover App == Slave App
In this exercise we would like to build a failover system to maximize application uptime with the following sequence:
- Sender App is running, incrementing counter and sending message to Receiver app
- Receiver App is running and printing the messages
- Sender App is stopped/interrrupted
- Failover Sender App starts in the count that was left of
- Provide proof that Failover App didn't start before Main App was stopped
And following restrictions:
- **appID** value is the same for both the main and the failover
- **nodeID** value is different for both the main and the failover, think about it as the host identifier
- Failover should be fully automated
- There **cannot** be two instances of the App running at the same time, meaning, there **cannot** be two messages received at the Receiver App with the same count and the same appID but different nodeID.