forked from lesderid/salty-ircd
Implement QUIT
This commit is contained in:
parent
053b0fdd05
commit
9758e5a545
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue