Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> IRC бот 
:(
    Опции темы
Debosh
Дата 2.2.2007, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 2.2.2007

Репутация: нет
Всего: нет



      Здравствуйте, уважаемые программисты.
      При написании IRC-бота возникли некоторые проблемы, надеюсь с вашей помощью их удастся решить.
      Я написал IRC бота, который выполняет различные сервисные функции.
Но теперь, мне захотелось сделать так, чтобы программа выполнялась строго в фоновом режиме, а все управление ей происходило непосредственно из IRC-клиента.
Я использую компонент IdIRC, потому что на мой взгляд это очень удобно и не нужно тратить много времени описывая интерфейс WinSock и изучая особенности протокола IRC.
Естественно, формы у меня в программе нет, и процедуру инициализации компонента теперь приходится выполнять вручную.
Но вся проблема в том, что при обработке сообщений Windows программа зависает. Она корректно подключается к серверу, заходит на канал, но видимо в связи с зацикливанием перестает реагировать на сообщения пользователей, а через некоторое время, видимо не ответив на пинг сервера и вовсе отключает сокет и тупо висит в памяти.
Пожалуйста объясните мне в чем проблема? При написании подобной программы на чистом WinSock таких неприятностей не возникало, а здесь столкнулся с настоящей бедой.

Код
                                           

program Project1;
uses
Windows, IdIRC;
type
TIRCBot = class
constructor Initialize;
destructor ExitProgram;
 procedure IRCMessage(Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel; Content: String);
 procedure ExecuteProc;
  private
  Msg: TMsg;
   IRC: TIdIRC;
 end;
procedure TIRCBot.IRCMessage(Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel; Content: String);
 begin
 if Content = '!exit' then          // Участок кода в этой процедуре не выполняется вообще
 ExitProgram()                     // Повидимому это связано с зацикливанием программы
 else
 IRC.Say('#services', Content);
end;
function WindowProc(Hwn, Msg, wParam, lParam: Longint): Longint; stdcall;
begin
  Result:=DefWindowProc(Hwn, Msg, wParam, lParam);
 // Не знаю нужна ли эта функция или нет
 // В исходнике вызовов на нее нигде нет
 // Возможно этот код и не выполняется вовсе
end;
procedure TIRCBot.ExecuteProc;
 begin
  Create;
  IRC.Connect();
  IRC.Join('#services');
  while GetMessage(Msg, 0, 0, 0) do // Почему то именно на этой строке возникает бесконечное ожидание, код ниже уже не вополняется
   begin
  TranslateMessage(Msg); // Под отладчиком это место вообще никогда не выполняется
   DispatchMessage(Msg);  // Здесь и происходит зависание программы
  end;
end;
 constructor TIRCBot.Initialize;
 begin
 IRC:=TIdIRC.Create(nil);
  IRC.Host:='irc.cyber-net.ru';
 IRC.Port:=6669;
  IRC.Nick:='Nick';
  IRC.AltNick:='Bot';
  IRC.RealName:='Peter';
  IRC.Username:='Bot';
 IRC.OnMessage:=IRCMessage;
end;
destructor TIRCBot.ExitProgram;
begin
IRC.Free;
 Free;
 end;
 var
 IRCBot: TIRCBot;
begin
IRCBot:=TIRCBot.Initialize;
 IRCBot.ExecuteProc;
end.    

  
 в панике. Очень жду решения поставленной задачи...

PM MAIL   Вверх
mntek
Дата 3.2.2007, 03:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


freakin_brain
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 15.8.2004
Где: saint-petersburg

Репутация: нет
Всего: 1



а ты не пробовал сначала создать окно, которое и будет получать сообщения?
PM MAIL WWW ICQ   Вверх
Elfix
Дата 16.2.2007, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 13.7.2005

Репутация: нет
Всего: нет



А зачем мне окно? Приложение будет работать в фоновом режиме. Окна мне не надо.
И потом, даже если я создам окно, и сделаю его невидимым (не прорисую) сообщения от IRC я получать не буду, так как идет зацикливание в GetMessage. Создав окно я буду получать сообщения Windows, а они мне нафиг не нужны...
PM MAIL   Вверх
dumb
Дата 14.3.2007, 04:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 5
Всего: 158



Elfix, создай обычное приложение с формой(невидимой) и кинь туда IdIRC. либо разбирайся в сырцах индейских и осмысленно пытайся обеспечить компонент необходимым для него "окружением"...
PM MAIL   Вверх
bartram
Дата 14.3.2007, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: 1
Всего: 29



Elfix, создай окно с флагом SW_HIDE...

Это сообщение отредактировал(а) bartram - 14.3.2007, 12:52


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1171 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.