Implement QUIT

This commit is contained in:
Les De Ridder 2017-03-14 17:18:35 +01:00
parent 053b0fdd05
commit 9758e5a545
No known key found for this signature in database
GPG Key ID: 5EC132DFA85DB372
2 changed files with 41 additions and 0 deletions

View File

@ -139,6 +139,15 @@ class Connection
{
connected = false;
send(Message(_server.name, "ERROR", ["Bye!"]));
if(message.parameters.length > 0)
{
_server.quit(this, message.parameters[0]);
}
else
{
_server.quit(this, null);
}
}
void onJoin(Message message)

View File

@ -98,6 +98,38 @@ class Server
}
channel.members = channel.members.remove!(m => m == connection);
if(channel.members.length == 0)
{
channels = channels.remove!(c => c == channel);
}
}
void quit(Connection connection, string quitMessage)
{
Connection[] peers;
foreach(channel; connection.channels)
{
peers ~= channel.members;
channel.members = channel.members.remove!(m => m == connection);
if(channel.members.length == 0)
{
channels = channels.remove!(c => c == channel);
}
}
peers = peers.sort().uniq.filter!(c => c != connection).array;
foreach(peer; peers)
{
if(quitMessage !is null)
{
peer.send(Message(connection.mask, "QUIT", [quitMessage], true));
}
else
{
peer.send(Message(connection.mask, "QUIT"));
}
}
}
void listen(ushort port = 6667)