I wrote this from scratch in a night, using only ANSI-C and POSIX standard libraries.
It's an extremely minimal talk/irc client. All messages are broadcast to all users.
$ ./server
$ ./client -n luser1
>>> --=[ luser2 signed on ]=--
sup y'all
>>> --=[ luser2 signed off ]=--
$ ./client -n luser2
>>> luser1: sup y'all
^C
- Better message format. Messages with payloads that are more complicated than a string are difficult to create.
- Async send(). Right now it's doing a blocking send and assuming that all data gets written. Fixing this would mean storing more state about the outgoing message, which is done in a completely ad-hock and hacky way for the reads.
- Better client-side UI. I'd like to have a std scrolling chat log and fixed-position input. Also, colors.
- signal handling and graceful shutdown.
- better error handling in general.
- I'd start over and write it with proven event, console, and data structure libraries.
- more commands: direct message, moderation.
- plug-in architecture for adding commands.