Make Core multi-user capable and clean up architecture
As planned for quite a long time, a quassel core should be able to handle multiple users simultaneously in order to, for example, allow shared hosting solutions. This also includes user authentification (BR #17).
As it turns out, this involves major changes in the Core architecture, an opportunity which I will use to also clean up things a bit. Things that come to mind:
- Core functionality needs to be split into global and user-specific parts (classes Core and CoreSession)
- Global data (class Global) needs to be handled per-user
- CoreProxy needs to be user-specific, so I'll transform it from a pseudo-singleton to a proper object, with one instance per user
- Connection handling moves from CoreProxy to Core
- User auth will be part of Core (BR #17)
A question that comes to mind: Do we ever end a user session? Even if all GUIs disconnect, the session should continue running. What happens if core executions ends - should we save active sessions and restart them when the core is restarted, or should we rather wait for a GUI to log in and explicitly get a session started for the particular user? An admin mode comes to mind, where active sessions can be monitored (stats) and sessions started/stopped...
If we plan to automatically restore sessions, does this involve reconnecting to all nets that where connected at shutdown, and joining all channels? Or should we only reconnect/join stuff that is marked as auto-connect and auto-join in the appropriate preferences?
- Architecture changes mostly complete:
- Core has been split in Core (static) and CoreSession (per-user objects)
- Connection stuff has been moved out of CoreProxy into Core
- Lots of cleanups, and we have finally real singletons!
- Global is now (externally) a static class -- changes throughout the code
- Monolithic Quassel works (or at least it seems to)
- Standalone Core and GUI disabled for now:
- While most of the new infrastructure is in place in Core, we still need GUI stuff for auth (BR #17)
- Syncing with Core as well as getting session states not done yet
Next steps will include the redesign of the GUI to make that cleaner as well (BR #41)