Ejemplo n.º 1
0
 private void handleJoin(BroadcastChatClient client, string channel)
 {
     if (!channel.StartsWith("#"))
     {
         client.SendErrorChannelName(channel);
     }
     else
     {
         if (!server.Channels.ContainsKey(channel))
         {
             server.Channels.Add(channel, new BroadcastChatChannel(channel));
         }
         if (server.Channels[channel].Clients.ContainsKey(client.Nick))
         {
             client.SendErrorInChannel(channel);
         }
         else if (server.Channels[channel].BannedClients.ContainsKey(client.Nick))
         {
             client.SendErrorBanned(channel);
         }
         else
         {
             var chan = server.Channels[channel];
             chan.SendJoin(client);
             client.SendTopic(chan.Name, chan.TopicSetter, chan.Topic);
             handleUserList(client, channel);
         }
     }
 }
Ejemplo n.º 2
0
 private void handleUnban(BroadcastChatClient client, string channel, string target)
 {
     if (!server.Channels.ContainsKey(channel))
     {
         client.SendErrorNoChannel(channel);
     }
     else if (!server.Channels[channel].Clients.ContainsKey(client.Nick))
     {
         client.SendErrorNotInChannel(channel);
     }
     else if (!server.Channels[channel].Clients.ContainsKey(target))
     {
         client.SendErrorUserNotInChannel(channel, target);
     }
     else if (!server.Channels[channel].OperClients.ContainsKey(client.Nick))
     {
         client.SendErrorNotChanOper(channel, target);
     }
     else if (!server.Channels[channel].BannedClients.ContainsKey(target))
     {
         client.SendErrorUserAlreadyBanned(channel, target);
     }
     else
     {
         server.Channels[channel].SendUnban(client.Nick, target);
     }
 }
 public void SendChanOperTake(BroadcastChatClient cl, string target)
 {
     foreach (var client in Clients.Values)
     {
         client.SendChanOperTake(Name, cl.Nick, target);
     }
     OperClients.Remove(target);
 }
 public void SendChanOperGive(BroadcastChatClient cl, string target)
 {
     foreach (var client in Clients.Values)
     {
         client.SendChanOperGive(Name, cl.Nick, target);
     }
     OperClients.Add(target, Clients[target]);
 }
 public void SendBan(string banner, BroadcastChatClient banned)
 {
     foreach (var client in Clients.Values)
     {
         client.SendBan(Name, banner, banned.Nick);
     }
     BannedClients.Add(banned.Nick, banned);
 }
 public void SendTopic(BroadcastChatClient cl, string newTopic)
 {
     foreach (var client in Clients.Values)
     {
         client.SendTopic(Name, cl.Nick, newTopic);
     }
     Topic       = newTopic;
     TopicSetter = cl.Nick;
 }
Ejemplo n.º 7
0
 private void handlePrivMsg(BroadcastChatClient client, string receiver, string message)
 {
     if (!server.Clients.ContainsKey(receiver))
     {
         client.SendErrorNoNick(receiver);
     }
     else
     {
         server.Clients[receiver].SendPrivMsg(client.Nick, message);
     }
 }
Ejemplo n.º 8
0
 private void handleWhois(BroadcastChatClient client, string nick)
 {
     if (!server.Clients.ContainsKey(nick))
     {
         client.SendErrorNoNick(nick);
     }
     else
     {
         client.SendWhois(server.Clients[nick]);
     }
 }
Ejemplo n.º 9
0
        private void handleChanList(BroadcastChatClient client)
        {
            StringBuilder sb = new StringBuilder();

            foreach (string chan in server.Channels.Keys)
            {
                sb.AppendFormat("{0} ", chan);
            }

            client.SendChanList(sb.ToString());
        }
 public void SendQuit(BroadcastChatClient cl, string reason)
 {
     Clients.Remove(cl.Nick);
     if (OperClients.ContainsKey(cl.Nick))
     {
         OperClients.Remove(cl.Nick);
     }
     foreach (var client in Clients.Values)
     {
         client.SendQuit(Name, cl.Nick, reason);
     }
 }
 public void SendJoin(BroadcastChatClient cl)
 {
     if (Clients.Count == 0)
     {
         OperClients.Add(cl.Nick, cl);
     }
     Clients.Add(cl.Nick, cl);
     cl.Channels.Add(Name, this);
     foreach (var client in Clients.Values)
     {
         client.SendJoin(Name, cl.Nick);
     }
 }
 public void SendKick(string kicker, BroadcastChatClient kicked)
 {
     foreach (var client in Clients.Values)
     {
         client.SendKick(Name, kicked.Nick, kicker);
     }
     Clients.Remove(kicked.Nick);
     if (OperClients.ContainsKey(kicked.Nick))
     {
         OperClients.Remove(kicked.Nick);
     }
     kicked.Channels.Remove(Name);
 }
Ejemplo n.º 13
0
 private void handleLeave(BroadcastChatClient client, string channel, string reason)
 {
     if (!client.Channels.ContainsKey(channel))
     {
         client.SendErrorNotInChannel(channel);
     }
     else if (!server.Channels.ContainsKey(channel))
     {
         client.SendErrorNoChannel(channel);
     }
     else
     {
         server.Channels[channel].SendLeave(client.Nick, reason);
         client.Channels.Remove(channel);
     }
 }
Ejemplo n.º 14
0
 private void handleTopic(BroadcastChatClient client, string channel, string newTopic)
 {
     if (!server.Channels.ContainsKey(channel))
     {
         client.SendErrorNoChannel(channel);
     }
     else if (!server.Channels[channel].Clients.ContainsKey(client.Nick))
     {
         client.SendErrorNotInChannel(channel);
     }
     else if (!server.Channels[channel].OperClients.ContainsKey(client.Nick))
     {
         client.SendErrorNotChanOper(channel, client.Nick);
     }
     else
     {
         server.Channels[channel].SendTopic(client, newTopic);
     }
 }
Ejemplo n.º 15
0
 private void handleChanMsg(BroadcastChatClient client, string channel, string message)
 {
     if (!server.Channels.ContainsKey(channel))
     {
         client.SendErrorNoChannel(channel);
     }
     else if (!client.Channels.ContainsKey(channel))
     {
         client.SendErrorNotInChannel(channel);
     }
     else if (server.Channels[channel].BannedClients.ContainsKey(client.Nick))
     {
         client.SendErrorBanned(channel);
     }
     else
     {
         server.Channels[channel].SendChanMsg(client.Nick, message);
     }
 }
Ejemplo n.º 16
0
 private void handleUserList(BroadcastChatClient client, string channel)
 {
     if (!server.Channels.ContainsKey(channel))
     {
         client.SendErrorNoChannel(channel);
     }
     else if (!client.Channels.ContainsKey(channel))
     {
         client.SendErrorNotInChannel(channel);
     }
     else
     {
         StringBuilder sb = new StringBuilder();
         foreach (string cl in server.Channels[channel].Clients.Keys)
         {
             sb.AppendFormat(server.Channels[channel].OperClients.ContainsKey(cl) ? "@{0} " : "{0} ", cl);
         }
         client.SendUserList(channel, sb.ToString());
     }
 }
Ejemplo n.º 17
0
 private void handleBanList(BroadcastChatClient client, string channel)
 {
     if (!server.Channels.ContainsKey(channel))
     {
         client.SendErrorNoChannel(channel);
     }
     else if (!server.Channels[channel].Clients.ContainsKey(client.Nick))
     {
         client.SendErrorNotInChannel(channel);
     }
     else
     {
         StringBuilder sb = new StringBuilder();
         foreach (string nick in server.Channels[channel].BannedClients.Keys)
         {
             sb.AppendFormat("{0} ", nick);
         }
         client.SendBanList(channel, sb.ToString());
     }
 }
Ejemplo n.º 18
0
 private void handleChanOper(BroadcastChatClient client, string channel, string mod, string target)
 {
     if (!server.Channels.ContainsKey(channel))
     {
         client.SendErrorNoChannel(channel);
     }
     else if (!server.Channels[channel].Clients.ContainsKey(client.Nick))
     {
         client.SendErrorNotInChannel(channel);
     }
     else if (!server.Channels[channel].OperClients.ContainsKey(client.Nick))
     {
         client.SendErrorNotChanOper(channel, client.Nick);
     }
     else if (mod.ToUpper() == "GIVE")
     {
         if (server.Channels[channel].OperClients.ContainsKey(target))
         {
             client.SendErrorAlreadyChanOper(channel, target);
         }
         else
         {
             server.Channels[channel].SendChanOperGive(client, target);
         }
     }
     else if (mod.ToUpper() == "TAKE")
     {
         if (!server.Channels[channel].OperClients.ContainsKey(target))
         {
             client.SendErrorNotChanOper(channel, target);
         }
         else
         {
             server.Channels[channel].SendChanOperTake(client, target);
         }
     }
     else
     {
         client.SendErrorExpected(mod.ToUpper(), "GIVE", "TAKE");
     }
 }
Ejemplo n.º 19
0
 private void handleNick(BroadcastChatClient client, string newNick)
 {
     if (server.Clients.ContainsKey(newNick))
     {
         client.SendErrorNickExists(newNick);
     }
     else
     {
         if (client.Nick == null)
         {
             server.Clients.Add(newNick, client);
         }
         else
         {
             var temp = server.Clients[client.Nick];
             server.Clients.Remove(client.Nick);
             server.Clients.Add(newNick, client);
         }
         client.ChangeNick(newNick);
     }
 }
Ejemplo n.º 20
0
 private void handleKick(BroadcastChatClient client, string channel, string kicked)
 {
     if (!server.Channels.ContainsKey(channel))
     {
         client.SendErrorNoChannel(channel);
     }
     else if (!server.Clients.ContainsKey(kicked))
     {
         client.SendErrorNoNick(kicked);
     }
     else if (!server.Channels[channel].Clients.ContainsKey(kicked))
     {
         client.SendErrorUserNotInChannel(channel, kicked);
     }
     else if (!server.Channels[channel].OperClients.ContainsKey(client.Nick))
     {
         client.SendErrorNotChanOper(channel, client.Nick);
     }
     else
     {
         server.Channels[channel].SendKick(client.Nick, server.Clients[kicked]);
     }
 }
 public ClientConnectedEventArgs(BroadcastChatClient client)
 {
     Client = client;
 }
 public ClientMessageReceivedEventArgs(BroadcastChatClient client, string message)
 {
     Client  = client;
     Message = message;
 }
Ejemplo n.º 23
0
 private void handleQuit(BroadcastChatClient client, string reason)
 {
     client.Quit(reason);
 }
Ejemplo n.º 24
0
        public void HandleMessage(BroadcastChatClient client, string msg)
        {
            // If we get a blank message, do nothing.
            if (msg.Trim() == string.Empty || msg == null)
            {
                return;
            }

            string[] parts = msg.Split(' ');

            // We can't have clients doing anything until we know who they are.
            if (client.Nick == null && parts[0].ToUpper() != "NICK")
            {
                client.SendErrorNickNotSet();
                return;
            }

            client.TimeOfLastMessage = client.Watch.Elapsed;

            switch (parts[0].ToUpper())
            {
            case "BAN":
                if (parts.Length < 3)
                {
                    client.SendErrorArgLength(parts[0].ToUpper(), 3, parts.Length);
                }
                else
                {
                    handleBan(client, parts[1], parts[2]);
                }
                break;

            case "BANLIST":
                if (parts.Length < 2)
                {
                    client.SendErrorArgLength(parts[0].ToUpper(), 2, parts.Length);
                }
                else
                {
                    handleBanList(client, parts[1]);
                }
                break;

            case "CHANLIST":
                handleChanList(client);
                break;

            case "CHANMSG":
                if (parts.Length < 3)
                {
                    client.SendErrorArgLength(parts[0].ToUpper(), 3, parts.Length);
                }
                else
                {
                    handleChanMsg(client, parts[1], sliceArray(parts, 2, parts.Length, " "));
                }
                break;

            case "CHANOPER":
                if (parts.Length < 4)
                {
                    client.SendErrorArgLength(parts[0].ToUpper(), 4, parts.Length);
                }
                else
                {
                    handleChanOper(client, parts[1], parts[2], parts[3]);
                }
                break;

            case "JOIN":
                if (parts.Length < 2)
                {
                    client.SendErrorArgLength(parts[0].ToUpper(), 2, parts.Length);
                }
                else
                {
                    handleJoin(client, parts[1]);
                }
                break;

            case "KICK":
                if (parts.Length < 3)
                {
                    client.SendErrorArgLength(parts[0].ToUpper(), 3, parts.Length);
                }
                else
                {
                    handleKick(client, parts[1], parts[2]);
                }
                break;

            case "LEAVE":
                if (parts.Length < 3)
                {
                    client.SendErrorArgLength(parts[0].ToUpper(), 3, parts.Length);
                }
                else
                {
                    handleLeave(client, parts[1], sliceArray(parts, 2, parts.Length, " "));
                }
                break;

            case "NICK":
                if (parts.Length < 2)
                {
                    client.SendErrorArgLength(parts[0].ToUpper(), 2, parts.Length);
                }
                else
                {
                    handleNick(client, parts[1]);
                }
                break;

            case "PRIVMSG":
                if (parts.Length < 3)
                {
                    client.SendErrorArgLength(parts[0].ToUpper(), 3, parts.Length);
                }
                else
                {
                    handlePrivMsg(client, parts[1], sliceArray(parts, 2, parts.Length, " "));
                }
                break;

            case "QUIT":
                if (parts.Length < 2)
                {
                    client.SendErrorArgLength(parts[0].ToUpper(), 2, parts.Length);
                }
                else
                {
                    handleQuit(client, sliceArray(parts, 1, parts.Length, " "));
                }
                break;

            case "TOPIC":
                if (parts.Length < 3)
                {
                    client.SendErrorArgLength(parts[0].ToUpper(), 3, parts.Length);
                }
                else
                {
                    handleTopic(client, parts[1], sliceArray(parts, 2, parts.Length, " "));
                }
                break;

            case "UNBAN":
                if (parts.Length < 3)
                {
                    client.SendErrorArgLength(parts[0].ToUpper(), 3, parts.Length);
                }
                else
                {
                    handleUnban(client, parts[1], parts[2]);
                }
                break;

            case "USERLIST":
                if (parts.Length < 2)
                {
                    client.SendErrorArgLength(parts[0].ToUpper(), 2, parts.Length);
                }
                else
                {
                    handleUserList(client, parts[1]);
                }
                break;

            case "WHOIS":
                if (parts.Length < 2)
                {
                    client.SendErrorArgLength(parts[0].ToUpper(), 2, parts.Length);
                }
                else
                {
                    handleWhois(client, parts[1]);
                }
                break;

            // If the first word in the message is not a command, send an error message.
            default:
                client.SendErrorNotACommand(parts[0].ToUpper());
                break;
            }
        }