sources/network/rconsession.cpp

changeset 71
4f7c2c944637
parent 70
0e947b487b18
parent 41
9ab869656b9e
child 72
1b9c53e0c846
--- a/sources/network/rconsession.cpp	Mon May 04 18:16:05 2015 +0300
+++ b/sources/network/rconsession.cpp	Fri May 15 18:36:22 2015 +0300
@@ -161,6 +161,37 @@
 			case SVRC_UPDATE:
 				process_server_updates (packet);
 				break;
+
+			case SVRC_TOOMANYTABCOMPLETES:
+				{
+					unsigned int numCompletions = packet.read_short();
+					print ("%1 completions for '%2'.\n",
+						int (numCompletions), m_lastTabComplete);
+				}
+				break;
+
+			case SVRC_TABCOMPLETE:
+				{
+					StringList completes;
+
+					for (signed int i = packet.read_byte(); i > 0; --i)
+						completes << packet.read_string();
+
+					if (completes.size() == 1)
+						Interface::tab_complete (m_lastTabComplete, completes[0]);
+					else if (not completes.is_empty())
+					{
+						print ("Completions for '%1':\n", m_lastTabComplete);
+
+						for (int i = 0; i < completes.size(); i += 8)
+						{
+							Range<int> spliceRange (i, min (i + 8, completes.size() - 1));
+							StringList splice (completes.splice (spliceRange));
+							print ("- %1\n", splice.join (", "));
+						}
+					}
+				}
+				break;
 			}
 		}
 	}
@@ -321,3 +352,21 @@
 {
 	return m_level;
 }
+
+// -------------------------------------------------------------------------------------------------
+//
+METHOD
+RCONSession::request_tab_complete (const String& part) -> void
+{
+	if (m_serverProtocol >= 4)
+	{
+		Bytestream packet;
+		packet.write_byte (CLRC_TABCOMPLETE);
+		packet.write_string (part);
+		send (packet);
+		bump_last_ping();
+		m_lastTabComplete = part;
+	}
+	else
+		print ("Server protocol is %1, cannot tab-complete\n", m_serverProtocol);
+}

mercurial