- Changed testing username from `tristan` to `bababooey`
- Set username based on the `AUTH_MESSAGE`'s value
- Print out current members of a channel when enumerating them
- Added support for `MEMBERSHIP_LEAVE`
- Fixed handling of `MEMBERSHIP_JOIN` which was not joining but enumerating and generating an enumeration reply
- Added support for joining then and proper support for `MEMBERSHIP_LIST` (enumeration)
- Added future TODO (maybe) for the `handle(TaggedMessage)` function
- Extract the `CommandType` at the top and use that instead of using a function call each time
- Added support for `MEMBERSHIP_JOIN` command type
- Added handling for unknown commands
- Added some testing channels
Server
- We now construct a `ChannelManager` on construction
- `getChannelNames(ulong, ubyte)` now uses the `ChannelManager` to enumerate the channels
- Added a `Mutex` which is initialized on struct construction
- Added methods `hasMember(string username)`, `removeMember(string username)` and `addMember(string username)`
ChannelManager
- Use `addMember(string)` and `removeMember(string)` for `membershipJoin(string, string)` and `membershipLeave` respectively
- Added proper handling of responses by setting the correct reply types, commands and so forth
- Re-use the tagged message, update payload and send response
- Moved logging global data static init to `renaissance.logging` module
Daemon
- Removed logging code from here
Connection
- Fixed logging import
Stream
- Fixed logging import
Server
- Fixed logging import
- Fixed a segmentation fault that would occur due to the `bindAddr` field not being set during construction as it should be; this is now fixed
- Also fixed another bug whereby we were starting the `Connection` thread within `connectionLoop()` but the `Connection.newConnection()` would call it already for us, thus creating two thread running decoder code
- `startListener()` now sets the state to running
- Documented some things to take care of in the future with regards to the `stop()` method and how `Connection` should behave upon failing an `addConnection()` call
- `stop()` now calls `stopListeners()` in order to stop any further connections from coming in
- Start the server
Connection
- Added a TODO
Stream
- Added a TODO
Package (`listeners`)
- Publically import the `StreamListener` listener
Server
- Added a field `isRunning` which is set to `true` when `start()` is called and `false` when `stop()` is called
- Added a private method, `stopListeners()`, which locksd the listener queue, then proceeds to call `stopListener()` on each `Listener` object in the queue, then ends by unlocking the listener queue lock
- Fixed bug inm `Server` whereby if a `Listener` was attempted to be added via `addListener(Listener)` then it would throw an exception; the condition needed to be negated
Listener
- Upon super-construction running, call `server.addListener(this)` to add ourselves as a listener to the associated server