Exemplo n.º 1
0
 private void LocalUserOnLeftChannel(object sender, IrcChannelEventArgs e)
 {
     LeftChannel?.Invoke(e.Channel);
 }
Exemplo n.º 2
0
        private void DataReceived(object o, MessageEventArgs e)
        {
            string originNick;
            var    commands = e.message.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);

            // Servers like to send commands split in separate messages
            if (lastMessage != null)
            {
                commands[0] = lastMessage + commands[0];
            }

            if (!e.message.EndsWith("\n"))
            {
                lastMessage = commands[commands.Length - 1];
                commands    = commands.Take(commands.Length - 1).ToArray();
            }
            else
            {
                lastMessage = null;
            }

            foreach (var command in commands)
            {
                Console.WriteLine(command);
                var message = command.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                if (message[0].Contains('!'))
                {
                    originNick = message[0].Substring(1, message[0].IndexOf('!') - 1);
                }
                else
                {
                    originNick = message[0].Substring(1);
                }

                if (message.Length > 1)
                {
                    if (message[0].Equals("PING"))
                    {
                        MsgPong(message[1]);
                    }

                    switch (message[1][0])
                    {
                    //Successful connection
                    case '0':
                        Connected?.Invoke(this, new EventArgs());
                        break;

                    //ERR message
                    case '4':
                        Error?.Invoke(this, new MessageEventArgs(command.Substring(command.LastIndexOf(':') + 1)));
                        break;
                    }

                    switch (message[1])
                    {
                    case "353":
                        AddUsers(command);
                        break;

                    //End of names list, guaranteed to get after joining channel
                    case "366":
                        JoinChannel(command);
                        break;

                    case "PART":
                        if (originNick.Equals(nick))
                        {
                            LeftChannel?.Invoke(this, new MessageEventArgs(command.Substring(command.IndexOf('#'))));
                        }
                        else
                        {
                            UserLeft?.Invoke(this, new ChannelEventArgs(command.Substring(command.IndexOf('#') + 1), originNick));
                        }
                        break;

                    case "JOIN":
                        if (originNick != nick)
                        {
                            UserJoined?.Invoke(this, new ChannelEventArgs(command.Substring(command.IndexOf('#')), originNick));
                        }
                        break;

                    case "PRIVMSG":
                        ReceivedMessage?.Invoke(this, new PrivateMessageEventArgs(message[2], originNick, command.Substring(1 + command.IndexOf(':', command.IndexOf("PRIVMSG")))));
                        break;
                    }
                }
            }
        }