public void HandleMessage(Message message)
{
Action namesRequest = () =>
{
if (!this.expectingNamesMessage)
{
this.users.Clear();
this.expectingNamesMessage = true;
this.marshal.Send(this.TabPage, new NamesMessage(this.Name));
}
};
if (message is JoinMessage)
{
namesRequest.Invoke();
}
else if (message is PartMessage)
{
PartMessage partMessage = message as PartMessage;
if (partMessage.NickName.Equals(this.marshal.Connection.Nickname, StringComparison.OrdinalIgnoreCase))
{
this.Dispose();
return;
}
else
{
IRCUser user = this.users.Find(i => i.NickName.Equals(partMessage.NickName, StringComparison.OrdinalIgnoreCase));
this.TabPage.RemoveUserFromList(user);
this.users.Remove(user);
}
}
else if (message is KickMessage)
{
KickMessage kickMessage = message as KickMessage;
IRCUser user = this.users.Find(i => i.NickName.Equals(kickMessage.NickName, StringComparison.OrdinalIgnoreCase));
this.TabPage.RemoveUserFromList(user);
this.users.Remove(user);
}
else if (message is NickMessage)
{
NickMessage nickMessage = message as NickMessage;
IRCUser user = this.users.Find(i => i.NickName.Equals(nickMessage.OldNickname, StringComparison.OrdinalIgnoreCase));
if (user != null)
{
this.TabPage.RemoveUserFromList(user);
user.NickName = nickMessage.NewNickname;
this.TabPage.AddUserToList(user, true);
}
else
{
return;
}
}
else if (message is QuitMessage)
{
QuitMessage quitMessage = message as QuitMessage;
IRCUser user = this.users.Find(i => i.NickName.Equals(quitMessage.NickName, StringComparison.OrdinalIgnoreCase));
if (user != null)
{
this.TabPage.RemoveUserFromList(user);
this.users.Remove(user);
}
else
{
return;
}
}
else if (message is ModeMessage)
{
namesRequest.Invoke();
}
GlobalSettings settings = GlobalSettings.Instance;
if (settings.DebugMode == GlobalSettings.Boolean.Yes)
{
this.TabPage.AppendMessage(message.Command, "[RAW]", message.ToString(), MessageType.WarningMessage);
}
this.TabPage.AppendMessage(message.Command, message.Source, message.Content, message.Type);
}