A simple chat server demonstrating asynchronous I/O (via threads) and STM.
What it does:
Listens for connections on port 1234.
When a client connects, it asks for their name.
If another client with the same name is already disconnected, that client is kicked out to make way for the new client.
Any lines the client sends are broadcast to all other clients.
Connect and disconnect notices are broadcast as well.