Здравствуйте, пишу IRC клиент, для общения с внутренним сервером IRC твича и столкнулся с такой проблемой: не работает запрос к серверу с многострочным сообщением(список команд), т.к StreamWriter при использовании метода Flush(), отправляет данные Tcp клиенту не пачкой, а кусками ИЛИ сам tcpClient отсылает запрос кусками, не суть. Вообщем запрос делится на куски:(. В результате в случае построчной записи списка команд в поток, сообщение вообще не выводится.
Пробовал отправлять запрос с сообщением одной строкой с "\n" в нужных местах - обрезает все что после первой строки команды (выводит первую строку списка команд в чат)
Вопрос: можно ли отправить irc серверу запрос с многострочным сообщением или нет? Если да, то как? Код прикрепляю:
public void sendChatMessage(string message)
{
sendIrcMessage(":" + userName + "!" + userName + "@" + userName + "twi.twitch.tv PRIVMSG #" + channel + " :@" + senderName + " " + message);
}
public void sendChatBroadcastChatMessage(string message)
{
sendIrcMessage(":" + userName + "!" + userName + "@" + userName + "twi.twitch.tv PRIVMSG #" + channel + " : " + message);
}
public void sendChatBroadcastChatMessage(List<string> messages)
{
messages.Insert(0, ":" + userName + "!" + userName + "@" + userName + "twi.twitch.tv PRIVMSG #" + channel + " : ");
sendIrcMessage(messages);
}
userName - имя бота, channel - название канала
private void sendIrcMessage(List<string> messages)
{
try
{
if (outputStream == null)
throw new Exception("Output stream is empty...");
foreach (var item in messages)
{
outputStream.WriteLine(item);
}
outputStream.Flush();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
return;
}
}
messages в данном случае - список команд:
"!hi - приветствие",
"!date - дата и время сервера",
"!commands - список команд"
Итак, вызывается sendChatBroadcastChatMessage(messages). В нем в начало сообщения добавляется запрос и вызывается метод sendIrcMessage(messages) с обновленным списком. Надеюсь рассказал достаточно подробно...
Ответ сервера:
Спасибо!
На en-so говорят, что протокол IRC запрещает многострочные ссобщения, ссылаясь на RFC 1459.
См. тут: http://stackoverflow.com/questions/13898584/insert-line-breaks-into-an-irc-message
Открываем RFC: https://rfc2.ru/1459.rfc/print
IRC-сообщения всегда выглядят как строки символов, заканчивающихся парой символов CR-LF (Carriage Return - Line Feed. Возврат Каретки - Перевод Строки) и длиной строки, не превышающей 512 символов (в эти 512 входят и CR-LF). Так что, максимальная длина строки для команд и параметров - 510 символов. Перенос строки невозможен. Для более подробной информации смотрите раздел 7.
Так что, увы, видимо нет:
можно ли отправить irc серверу запрос с многострочным сообщением или нет? Если да, то как?
Надо ещё посмореть, не было с тех пор новых стандартов, переопределяющих этот RFC.
Вот список стандартов для начала просмотра:
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Подскажите, может ли хост при загрузке плагина передать в него какую-то информацию или при создании используется только конструктор по умолчанию?
Как стиль ContextMenuMy установить к MenuItem из кода?
задача такая: запускается поток в консоли он ждет ввода данных от пользователяКак пользователь вводит данные поток закрывается