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); } }
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); }
/// <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; } } }