Implemented Dijkstra's algorithm for Naive Routing.
Incorporate shortest path routing in SmartRouter.
Spawn a thread to connect to each neighboring router. Note that routers might start at different times, so we have to retry.
Add fault tolerance. Router reconnects to server if connection lost. Server closes connection if router is down.