Otherwise clients might connect to the server before everything is ready for them.
E.g. when restarting the server, the clients will immediately try to reconnect.
Clients might connect before the `PacketHandler` is initialized, which results in some packets not being processed by the server.
Same goes for the commands: Discord or the JsonApi might send in commands before all commands were added to the `CommandHandler`.
Without the `ClientJoined` action, clients might even be allowed connect if they are on the banlist.
Make and use a copy of the RemoteEndPoint at the start of the HandleSocket method, because in some cases when the socket is disposed the
RemoteEndPoint inside of it is cleared and isn't available for the following disconnect log entries.
Currently when a client connects that is already there, the old socket is closed, and the code tries to reuse the existing client object be exchanging
its socket.
Reusing the same client object and just changing its socket does cause issues though with copies of the client in other threads. In the situations
that I could reproduce, it always disconnected both sockets, the old one and then the new one.
Instead I make a copy of the client object now, remove the old object and add the new object to the collection.
Behavior: No DM'ing commands under any circumstance
if Config.LogChannel == null, commands can be in any non-private channel
if Config.LogChannel != null, commands can only be in the log channel
* add Dockerfile
* add docker-compose.yml
* Github workflow to build and deploy docker image
* workdir /data/ instead of /app/
* use a local directory instead of a named volume
This makes the settings.json more accessible from the outside by
default, but is less portable.
The -v command with $PWD might not work on native Windows shells, but
rather wants an absolute Windows path like C:\User\... or /c/User/...
And on Linux, because the /data/ directory and the settings.json will be
owned by root. Though that can be changed.
* more docker-compose command examples
* add linux/arm/v7 ; improve build & runtime
* fix: just arm not arm32
* test docker build for PRs
* back to the microsoft runtime