forked from lesderid/salty-ircd
Implement QUIT
This commit is contained in:
parent
053b0fdd05
commit
9758e5a545
|
@ -139,6 +139,15 @@ class Connection
|
||||||
{
|
{
|
||||||
connected = false;
|
connected = false;
|
||||||
send(Message(_server.name, "ERROR", ["Bye!"]));
|
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)
|
void onJoin(Message message)
|
||||||
|
|
|
@ -98,6 +98,38 @@ class Server
|
||||||
}
|
}
|
||||||
|
|
||||||
channel.members = channel.members.remove!(m => m == connection);
|
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)
|
void listen(ushort port = 6667)
|
||||||
|
|
Loading…
Reference in New Issue