예제 #1
0
        private void SendTelnetAlphaWordList(TelnetServerCommandEventArgs pEventArgs, string pSearchString)
        {
            bool tmpListingCompleted = false;

            int tmpMatchCount = 0;

            MutiTimeSpan tmpSearchTimer = new MutiTimeSpan();

            if (_WordList.Count > 0)
            {
                _TelnetServer.SendData(" Word List:", pEventArgs.Socket);
                _TelnetServer.SendLineFeed(pEventArgs.Socket);
                _TelnetServer.SendData("--- Number - Word ------------------------------- Alphagram -------------=====", pEventArgs.Socket);
                _TelnetServer.SendLineFeed(pEventArgs.Socket);

                tmpListingCompleted = !_WordList.FindFirstByAlphagram(pSearchString);

                while (!tmpListingCompleted)
                {
                    //This display function is assuming that the words are no longer than 28 characters which is safe for scrabble words
                    _TelnetServer.SendData(String.Format(" {0,8}.   {1,-32}     {2}", _WordList.CurrentItemKey, _WordList.CurrentWord, _WordList.CurrentWordAlphagram), pEventArgs.Socket);
                    _TelnetServer.SendLineFeed(pEventArgs.Socket);
                    tmpMatchCount++;

                    //Bail out of the listing if it's the end of the list
                    tmpListingCompleted = _WordList.EOL;

                    //This is to not display the last node if it isn't a match and we hit the EOL
                    tmpListingCompleted = !_WordList.FindNextByAlphagram(pSearchString);
                }

                _TelnetServer.SendData("==========================================================================-----", pEventArgs.Socket);
                _TelnetServer.SendLineFeed(pEventArgs.Socket);
                _TelnetServer.SendData(tmpMatchCount.ToString() + " Word(s) Matched the Pattern " + pSearchString, pEventArgs.Socket);
                _TelnetServer.SendLineFeed(pEventArgs.Socket);

                tmpSearchTimer.TimeStamp();

                _TelnetServer.SendData("Effective Time To Search: " + tmpSearchTimer.TimeDifference.ToString() + "ms", pEventArgs.Socket);
                _TelnetServer.SendLineFeed(pEventArgs.Socket);
            }
            else
            {
                _TelnetServer.SendData("The word list is empty.", pEventArgs.Socket);
                _TelnetServer.SendLineFeed(pEventArgs.Socket);
            }
        }
예제 #2
0
 private void SendTelnetHelp(TelnetServerCommandEventArgs e)
 {
     _TelnetServer.SendData("Available Commands:", e.Socket);
     _TelnetServer.SendLineFeed(e.Socket);
     _TelnetServer.SendData("--------------------------------------------------------------------------=====", e.Socket);
     _TelnetServer.SendLineFeed(e.Socket);
     _TelnetServer.SendData(" ADD [some word]       - Add the word [some word] to the list", e.Socket);
     _TelnetServer.SendLineFeed(e.Socket);
     _TelnetServer.SendData(" ALPHA [some text]     - Generate an alphagram of [some text]", e.Socket);
     _TelnetServer.SendLineFeed(e.Socket);
     _TelnetServer.SendData(" COUNT                 - Show the number of words in the list", e.Socket);
     _TelnetServer.SendLineFeed(e.Socket);
     _TelnetServer.SendData(" EXIT                  - Close the telnet session", e.Socket);
     _TelnetServer.SendLineFeed(e.Socket);
     _TelnetServer.SendData(" HELP                  - You're lookin' at it", e.Socket);
     _TelnetServer.SendLineFeed(e.Socket);
     _TelnetServer.SendData(" INFO                  - Some list statistics", e.Socket);
     _TelnetServer.SendLineFeed(e.Socket);
     _TelnetServer.SendData(" LIST [some pattern]   - List words in the list ('LIST ALL' for all words)", e.Socket);
     _TelnetServer.SendLineFeed(e.Socket);
     _TelnetServer.SendData("                         Where <some pattern> is a pattern to list", e.Socket);
     _TelnetServer.SendLineFeed(e.Socket);
     _TelnetServer.SendData("                         Wildcards are allowed (i.e. '*tion' or 'a*' or '*ire*'", e.Socket);
     _TelnetServer.SendLineFeed(e.Socket);
     _TelnetServer.SendData(" LOAD [some file]      - Load a file of CR separated words into the word list", e.Socket);
     _TelnetServer.SendLineFeed(e.Socket);
     _TelnetServer.SendData("                         The default file is 'Scrabble.txt'", e.Socket);
     _TelnetServer.SendLineFeed(e.Socket);
     _TelnetServer.SendData(" QUIT                  - Close the telnet session and halt the application", e.Socket);
     _TelnetServer.SendLineFeed(e.Socket);
     _TelnetServer.SendData(" LOAD [some file]      - Load a file of CR separated words into the word list", e.Socket);
     _TelnetServer.SendLineFeed(e.Socket);
     _TelnetServer.SendData(" SEARCH [some word]    - Search the list of words for a word", e.Socket);
     _TelnetServer.SendLineFeed(e.Socket);
     _TelnetServer.SendData(" SEARCHALPHA [word]    - Search the list of words for a word by Alphagram", e.Socket);
     _TelnetServer.SendLineFeed(e.Socket);
     _TelnetServer.SendData(" WORD [number]         - Display the word at index # [number]", e.Socket);
     _TelnetServer.SendLineFeed(e.Socket);
     _TelnetServer.SendData("==========================================================================-----", e.Socket);
     _TelnetServer.SendLineFeed(e.Socket);
 }
예제 #3
0
        /// <summary>
        /// This gets called whenever a command is recieved from
        /// </summary>
        /// <param name="pSender">The telnet server instance</param>
        /// <param name="pEventArgs">The event args, including the socket</param>
        private void TelnetCommandRecieved(object pSender, TelnetServerCommandEventArgs pEventArgs)
        {
            //A command has arrived from a telnet client.  Parse it.
            //Tokenize the command string
            string [] tmpCommandArguments = pEventArgs.Command.Split(' ');

            if (tmpCommandArguments.Length > 0)
            {
                switch (tmpCommandArguments[0].ToUpper())
                {
                case "ADD":
                    if (tmpCommandArguments.Length > 1)
                    {
                        System.Text.StringBuilder tmpSearchString = new System.Text.StringBuilder();

                        for (int tmpCounter = 1; tmpCounter < tmpCommandArguments.Length; tmpCounter++)
                        {
                            //Add back the spaces to make the search meaningful.
                            if (tmpSearchString.Length > 0)
                            {
                                tmpSearchString.Append(" ");
                            }

                            tmpSearchString.Append(tmpCommandArguments[tmpCounter].ToString());
                        }

                        _TelnetServer.SendData("Adding [" + tmpSearchString.ToString() + "] to the word list.", pEventArgs.Socket);
                        _TelnetServer.SendLineFeed(pEventArgs.Socket);

                        _WordList.AddWord(tmpSearchString.ToString());

                        _TelnetServer.SendData("There are now " + _WordList.Count + " items in the word list.", pEventArgs.Socket);
                        _TelnetServer.SendLineFeed(pEventArgs.Socket);
                    }
                    else
                    {
                        _TelnetServer.SendData("Use: ADD [word]", pEventArgs.Socket);
                        _TelnetServer.SendLineFeed(pEventArgs.Socket);
                    }
                    break;

                case "AL":
                case "ALP":
                case "ALPH":
                case "ALPHA":
                    if (tmpCommandArguments.Length > 1)
                    {
                        System.Text.StringBuilder tmpSearchString = new System.Text.StringBuilder();

                        for (int tmpCounter = 1; tmpCounter < tmpCommandArguments.Length; tmpCounter++)
                        {
                            //Add back the spaces to make the search meaningful.
                            if (tmpSearchString.Length > 0)
                            {
                                tmpSearchString.Append(" ");
                            }

                            tmpSearchString.Append(tmpCommandArguments[tmpCounter].ToString());
                        }

                        _TelnetServer.SendData("Generating Alphagram from [" + tmpSearchString.ToString() + "]", pEventArgs.Socket);
                        _TelnetServer.SendData(" resulting in [" + GenerateAlphagram(tmpSearchString.ToString()) + "]", pEventArgs.Socket);
                        _TelnetServer.SendLineFeed(pEventArgs.Socket);
                        _TelnetServer.SendLineFeed(pEventArgs.Socket);
                    }
                    else
                    {
                        _TelnetServer.SendData("Use: ALPHA [some text]", pEventArgs.Socket);
                        _TelnetServer.SendLineFeed(pEventArgs.Socket);
                    }
                    break;

                case "CO":
                case "COU":
                case "COUN":
                case "COUNT":
                    _TelnetServer.SendData("There are " + _WordList.Count + " items in the word list.", pEventArgs.Socket);
                    _TelnetServer.SendLineFeed(pEventArgs.Socket);
                    break;

                case "EXIT":
                    //Kill the socket
                    pEventArgs.Socket.Kill();
                    break;

                case "?":
                case "H":
                case "HE":
                case "HEL":
                case "HELP":
                    SendTelnetHelp(pEventArgs);
                    break;

                case "INFO":
                    _TelnetServer.SendData("         Linked List Information", pEventArgs.Socket);
                    _TelnetServer.SendLineFeed(pEventArgs.Socket);
                    _TelnetServer.SendData("-------------------------------------------", pEventArgs.Socket);
                    _TelnetServer.SendLineFeed(pEventArgs.Socket);
                    _TelnetServer.SendData("         List Count: " + _WordList.Count, pEventArgs.Socket);
                    _TelnetServer.SendLineFeed(pEventArgs.Socket);
                    if (_WordList.Count > 0)
                    {
                        _TelnetServer.SendData(String.Format("       Current Item: ({0}) {1} ... Alphagram[{2}]", _WordList.CurrentItemKey, _WordList.CurrentWord, _WordList.CurrentWordAlphagram), pEventArgs.Socket);
                        _TelnetServer.SendLineFeed(pEventArgs.Socket);
                    }
                    _TelnetServer.SendData("          Add Count: " + _WordList.StatisticAddCount, pEventArgs.Socket);
                    _TelnetServer.SendLineFeed(pEventArgs.Socket);
                    _TelnetServer.SendData("       Delete Count: " + _WordList.StatisticDeleteCount, pEventArgs.Socket);
                    _TelnetServer.SendLineFeed(pEventArgs.Socket);
                    _TelnetServer.SendData("       Search Count: " + _WordList.StatisticSearchCount, pEventArgs.Socket);
                    _TelnetServer.SendLineFeed(pEventArgs.Socket);
                    _TelnetServer.SendData(" Search Match Count: " + _WordList.StatisticSearchMatchCount, pEventArgs.Socket);
                    _TelnetServer.SendLineFeed(pEventArgs.Socket);
                    _TelnetServer.SendData("   Navigation Count: " + _WordList.StatisticNavigationCount, pEventArgs.Socket);
                    _TelnetServer.SendLineFeed(pEventArgs.Socket);
                    break;

                case "LS":
                case "LI":
                case "LIS":
                case "LIST":
                    if (tmpCommandArguments.Length > 1)
                    {
                        System.Text.StringBuilder tmpSearchString = new System.Text.StringBuilder();

                        for (int tmpCounter = 1; tmpCounter < tmpCommandArguments.Length; tmpCounter++)
                        {
                            //Add back the spaces to make the search meaningful.
                            if (tmpSearchString.Length > 0)
                            {
                                tmpSearchString.Append(" ");
                            }

                            tmpSearchString.Append(tmpCommandArguments[tmpCounter].ToString());
                        }

                        SendTelnetWordList(pEventArgs, tmpSearchString.ToString().Trim());
                    }
                    else
                    {
                        _TelnetServer.SendData("Use: LIST [option]", pEventArgs.Socket);
                        _TelnetServer.SendLineFeed(pEventArgs.Socket);
                        _TelnetServer.SendData("     If you want a full list, use 'LIST ALL'", pEventArgs.Socket);
                        _TelnetServer.SendLineFeed(pEventArgs.Socket);
                    }
                    break;

                case "LOAD":
                    System.Text.StringBuilder tmpFileName = new System.Text.StringBuilder();

                    if (tmpCommandArguments.Length < 2)
                    {
                        _TelnetServer.SendData("No File Specified; Using 'Scrabble.txt'", pEventArgs.Socket);
                        _TelnetServer.SendLineFeed(pEventArgs.Socket);

                        tmpFileName.Append("Scrabble.txt");
                    }
                    else
                    {
                        for (int tmpCounter = 1; tmpCounter < tmpCommandArguments.Length; tmpCounter++)
                        {
                            //Add back the spaces to make the search meaningful.
                            if (tmpFileName.Length > 0)
                            {
                                tmpFileName.Append(" ");
                            }

                            tmpFileName.Append(tmpCommandArguments[tmpCounter].ToString());
                        }
                    }

                    _TelnetServer.SendData("Loading [" + tmpFileName.ToString() + "] into the word list.", pEventArgs.Socket);
                    _TelnetServer.SendLineFeed(pEventArgs.Socket);

                    _WordList.LoadWordList(tmpFileName.ToString());

                    _TelnetServer.SendData("There are now " + _WordList.Count + " items in the word list.", pEventArgs.Socket);
                    _TelnetServer.SendLineFeed(pEventArgs.Socket);
                    break;

                case "QU":
                case "QUI":
                    _TelnetServer.SendData("You must fully type QUIT to close the program.", pEventArgs.Socket);
                    _TelnetServer.SendLineFeed(pEventArgs.Socket);
                    break;

                case "QUIT":
                    //Kill the socket, close the application
                    pEventArgs.Socket.Kill();
                    _KeepRunning = false;
                    break;

                case "SEARCH":
                    if (tmpCommandArguments.Length > 1)
                    {
                        System.Text.StringBuilder tmpSearchString = new System.Text.StringBuilder();

                        for (int tmpCounter = 1; tmpCounter < tmpCommandArguments.Length; tmpCounter++)
                        {
                            //Add back the spaces to make the search meaningful.
                            if (tmpSearchString.Length > 0)
                            {
                                tmpSearchString.Append(" ");
                            }

                            tmpSearchString.Append(tmpCommandArguments[tmpCounter].ToString());
                        }

                        _TelnetServer.SendData("Searching for word [" + tmpSearchString.ToString() + "] in the word list.", pEventArgs.Socket);
                        _TelnetServer.SendLineFeed(pEventArgs.Socket);

                        if (_WordList.FindFirstByWord(tmpSearchString.ToString()))
                        {
                            _TelnetServer.SendData("Found a match!", pEventArgs.Socket);
                            _TelnetServer.SendLineFeed(pEventArgs.Socket);
                            _TelnetServer.SendData(String.Format(" {0}. {1}          Alphagram[{2}]", _WordList.CurrentItemKey, _WordList.CurrentWord, _WordList.CurrentWordAlphagram), pEventArgs.Socket);
                            _TelnetServer.SendLineFeed(pEventArgs.Socket);
                        }
                        else
                        {
                            _TelnetServer.SendData("No matches!\n\r", pEventArgs.Socket);
                            _TelnetServer.SendLineFeed(pEventArgs.Socket);
                        }
                    }
                    else
                    {
                        _TelnetServer.SendData("Use: WORD [number]", pEventArgs.Socket);
                        _TelnetServer.SendLineFeed(pEventArgs.Socket);
                    }
                    break;

                case "SEARCHALPHA":
                    if (tmpCommandArguments.Length > 1)
                    {
                        System.Text.StringBuilder tmpSearchString = new System.Text.StringBuilder();

                        for (int tmpCounter = 1; tmpCounter < tmpCommandArguments.Length; tmpCounter++)
                        {
                            //Add back the spaces to make the search meaningful.
                            if (tmpSearchString.Length > 0)
                            {
                                tmpSearchString.Append(" ");
                            }

                            tmpSearchString.Append(tmpCommandArguments[tmpCounter].ToString());
                        }

                        SendTelnetAlphaWordList(pEventArgs, tmpSearchString.ToString().Trim());
                    }
                    else
                    {
                        _TelnetServer.SendData("Use: SEARCHALPHA [option]", pEventArgs.Socket);
                        _TelnetServer.SendLineFeed(pEventArgs.Socket);
                        _TelnetServer.SendData("     If you want a full list, use 'LIST ALL'", pEventArgs.Socket);
                        _TelnetServer.SendLineFeed(pEventArgs.Socket);
                    }
                    break;

                case "WORD":
                    if (tmpCommandArguments.Length > 1)
                    {
                        long tmpIndexToFind = Convert.ToInt32(tmpCommandArguments[1]);
                        _TelnetServer.SendData("Searching for word #[" + tmpIndexToFind.ToString() + "] in the word list.", pEventArgs.Socket);
                        _TelnetServer.SendLineFeed(pEventArgs.Socket);

                        if (_WordList.FindFirstByIndex(tmpIndexToFind))
                        {
                            _TelnetServer.SendData("Found a match!", pEventArgs.Socket);
                            _TelnetServer.SendLineFeed(pEventArgs.Socket);
                            _TelnetServer.SendData(String.Format(" {0}. {1}          Alphagram[{2}]", _WordList.CurrentItemKey, _WordList.CurrentWord, _WordList.CurrentWordAlphagram), pEventArgs.Socket);
                            _TelnetServer.SendLineFeed(pEventArgs.Socket);
                        }
                        else
                        {
                            _TelnetServer.SendData("No matches!\n\r", pEventArgs.Socket);
                            _TelnetServer.SendLineFeed(pEventArgs.Socket);
                        }
                    }
                    else
                    {
                        _TelnetServer.SendData("Use: WORD [number]", pEventArgs.Socket);
                        _TelnetServer.SendLineFeed(pEventArgs.Socket);
                    }
                    break;

                default:
                    //Do nothing but be a little helpful on default.
                    _TelnetServer.SendData("What are you doing, Dave.\n\rType 'help' for a list of commands.", pEventArgs.Socket);
                    _TelnetServer.SendLineFeed(pEventArgs.Socket);
                    break;
                }
            }
        }