예제 #1
0
        // add an "active" ChatWindow param
        void userInput(ChatWindow query, ChatWindow channel, string line)
        {
            if (line.Length == 0)
            {
                return;
            }
            if (line[0] == '/')
            {
                string   command;
                string   trail;
                string[] args;
                args    = line.Split(" ".ToCharArray(), 2);
                command = args[0].Substring(1).ToUpperInvariant();
                if (args.Length == 2)
                {
                    trail = args[1]; args = trail.Split(' ');
                }
                else
                {
                    trail = ""; args = new string[0];
                }
                if (query != null)
                {
                    switch (command)
                    {
                    case "MSG":
                        if (args.Length > 1)
                        {
                            if (args[0].ToLowerInvariant() == query.GetTag().ToLowerInvariant())
                            {
                                trail = trail.Substring(args[0].Length + 1);
                                connection.Msg_PRIVMSG(args[0], trail);
                                query.WriteOutput(Color.Black, string.Format("<{0}> {1}", connection.NickName, trail));
                                return;
                            }
                        }
                        break;

                    case "ME":
                        if (args.Length > 0)
                        {
                            connection.Msg_CTCP_REQUEST_ACTION(query.GetTag(), trail);
                            query.WriteOutput(Color.Purple, string.Format("* {0} {1}", connection.NickName, trail));
                            return;
                        }
                        break;
                    }
                }
                if (channel != null)
                {
                    switch (command)
                    {
                    case "MSG":
                        if (args.Length > 1)
                        {
                            trail = trail.Substring(args[0].Length + 1);
                            connection.Msg_PRIVMSG(args[0], trail);
                            channel.WriteOutput(Color.Black, string.Format("-> *{0}* {1}", args[0], trail));
                            // if a query window exists, print with <> there
                            if (queryWindows.ContainsKey(args[0]))     // might have to do case insensitive dictionary
                            {
                                queryWindows[args[0]].WriteOutput(Color.Black, string.Format("<{0}> {1}", connection.NickName, trail));
                            }
                            return;
                        }
                        break;

                    case "ME":
                        if (args.Length > 0)
                        {
                            connection.Msg_CTCP_REQUEST_ACTION(channel.GetTag(), trail);
                            channel.WriteOutput(Color.Purple, string.Format("* {0} {1}", connection.NickName, trail));
                            return;
                        }
                        break;

                    case "PART":
                        if (args.Length == 0)
                        {
                            connection.Msg_PART(channel.GetTag());
                        }
                        else
                        {
                            connection.Msg_PART(channel.GetTag(), trail);
                        }
                        return;
                    }
                }
                switch (command)
                {
                case "SERVER":
                    if (args.Length == 0)
                    {
                        LocalErrorMessage("No server specified, you are making no sense.");
                    }
                    else
                    {
                        if (connection != null)
                        {
                            LocalInfoMessage("Disconnecting existing server connection, just for your information.");
                            if (connection.socket != null)
                            {
                                if (connection.socket.Connected)
                                {
                                    connection.Msg_QUIT(Program.Identifier);
                                }
                            }
                            connection.Close();
                        }
                        LocalInfoMessage(string.Format("Connecting to some new server, {0}.", trail));
                        if (args.Length == 1)
                        {
                            InitializeConnection(args[0], 6666);
                        }
                        else     // we already know it's higher than 0! :)
                        {
                            InitializeConnection(args[0], Convert.ToInt32(args[1]));
                        }
                        UpdateButtonText();
                    }
                    return;

                case "CTCP":
                    if (args.Length > 2)
                    {
                        connection.Msg_CTCP_REQUEST(args[0], args[1].ToUpperInvariant(), string.Join(" ", args, 2, args.Length - 2)); return;
                    }
                    else if (args.Length > 1)
                    {
                        connection.Msg_CTCP_REQUEST(args[0], args[1].ToUpperInvariant()); return;
                    }
                    break;

                case "PING":
                    if (args.Length > 0)
                    {
                        connection.Msg_CTCP_REQUEST_PING(args[0], System.Environment.TickCount.ToString());
                        return;
                    }
                    break;

                case "MSG":
                    if (args.Length > 1)
                    {
                        trail = trail.Substring(args[0].Length + 1);
                        connection.Msg_PRIVMSG(args[0], trail);
                        serverWindow.WriteOutput(Color.Black, string.Format("-> *{0}* {1}", args[0], trail));
                        // if a query window exists, print with <> there
                        if (queryWindows.ContainsKey(args[0]))     // might have to do case insensitive dictionary
                        {
                            queryWindows[args[0]].WriteOutput(Color.Black, string.Format("<{0}> {1}", connection.NickName, trail));
                        }
                        return;
                    }
                    break;

                case "TEST":
                    if (args.Length > 0)
                    {
                        serverWindow.WriteOutput(Color.Black, trail);
                        return;
                    }
                    break;
                }
                if (args.Length == 0)
                {
                    connection.Msg(command);
                }
                else
                {
                    connection.Msg(command + " " + trail);
                }
            }
            else
            {
                if (query != null)
                {
                    connection.Msg_PRIVMSG(query.GetTag(), line);
                    query.WriteOutput(Color.Black, string.Format("<{0}> {1}", connection.NickName, line));
                }
                else if (channel != null)
                {
                    connection.Msg_PRIVMSG(channel.GetTag(), line);
                    channel.WriteOutput(Color.Black, string.Format("<{0}> {1}", connection.NickName, line));
                }
                else
                {
                    LocalErrorMessage("Unable to send useless input to the server.");
                }
            }
        }