Если я использую TIdImap4.SendCmd для ручной отправки неподдерживаемой команды в Indy, я немного запутался, как получить полный ответ для его ручного анализа.
Я отправляю следующую команду, чтобы вручную запросить ярлыки Gmail для сообщения, поскольку это еще не поддерживается Indy:
IMAP.SendCmd(ImapCmdNum(),'UID FETCH '+uid+' (X-GM-LABELS)',['OK','BAD','NO'], false);
После вызова этой команды я проверил свой файл Indy Log и успешно получил соответствующий ответ от сервера:
Sent 9/19/2015 11:10:40 AM: C5 UID FETCH 2385 (X-GM-LABELS)<EOL>
Recv 9/19/2015 11:10:40 AM: * 542 FETCH (X-GM-LABELS (testlabel) UID 2385)<EOL>C5 OK Success<EOL>
Но теперь я не могу получить никакой части этого ответа, кроме «ОК» от Инди. Я пробовал следующее в отладчике, и ни у одного из них нет необработанного ответа или чего-либо еще, что я мог бы проанализировать вручную:
IMAP.LastCmdResult = ('OK', $2521E60, nil, $2521EC0)
IMAP.LastCmdResult.Text = ()
IMAP.LastCmdResult.Code = 'OK'
IMAP.LastCmdResult.NumericCode = 0
IMAP.LastCmdResult.FormattedReply = ()
Из документации SendCmd:
SendCmd — это перегруженная функция, используемая для отправки команды, указанной в AOut, на одноранговое соединение.
SendCmd использует IOHandler для записи команды в AOut для однорангового соединения.
AResponse указывает ответ, разрешенный для команды.
SendCmd вызывает GetResponse, чтобы определить, разрешен ли ответ от однорангового соединения. Если ответ не разрешен, во время обработки в GetResponse возникает исключение.
Когда AResponse содержит -1, GetResponse вызывается с пустым массивом, чтобы указать, что для команды разрешен любой код ответа. В противном случае значение в AResponse используется для подтверждения кода ответа.
Используйте LastCmdResult для доступа к числовой и текстовой частям ответа на команду.
Насколько я понимаю, я должен использовать LastCmdResult для доступа к различным «частям ответа», но ни один из них не имеет необработанного ответа или какой-либо части ответа, кроме «ОК», так как я могу получить что-то анализируемое из ответа отправить команду?
private
. Непубличные члены преднамеренноprotected
, чтобы потомки могли получить к ним доступ. Уловка использует преимущества функции Delphi, когда модуль может получить доступ ко всему, что определено в том же модуле. Унаследовав локальные классы отTIdIMAP4
иTIdIMAPLineStruct
, они получают доступ к унаследованным методамprotected
, а затем модуль также получает доступ к своим методамprotected
. Классы не добавляют дополнительные элементы данных или собственные виртуальные методы, поэтому виртуальная таблица остается правильно выровненной, что позволяет работать приведения типов. 21.09.2015(strict) protected
участников, к которым можно получить доступ через наследование. Доступ к(strict) private
членам через наследование невозможен, поэтому для них этот трюк не работает. 21.09.2015