Atividade recente no site

IRCpy: Uma Framework de Comunicação usando o Protocolo IRC

Há vários anos eu venho estudando o funcionamento e comportamento das redes IRC, mas sempre tinha dificuldades de desenvolver alguma coisa concreta, em vias de tantas mudanças relacionadas a componentes de conexão no decorrer da vida do Delphi. Me lembro de passar do ClientSocket para o TcpClient e finalmente para a famigerada suíte Indy, que raramente funcionava mais do que o básico.

Foi depois que passei a programar em Python que finalmente o componente deslanchou. Com um pouco de dificuldade, eu consegui entender o funcionamento básico do objeto socket do Python, que é na verdade herdado do C, e hoje, depois de vários meses, as classes básicas já estão funcionando de maneira estável.

Funcionamento

De toda a framework originalmente pensada, o desenvolvimento ficou concentrado em fazer funcionar o cliente seguindo as especificações da RFC2812, que especifica justamente o formato de mensagens do protocolo IRC. No entanto, o modo como o cliente foi desenvolvido permite utilizar da estrutura sintática do protocolo para se criar outros comandos e criar novos protocolos derivados deste.

Foi então para este rumo que a framework seguiu. Foi implementado um cliente que quebrava sintaticamente a mensagem e a repassava para manipuladores de comandos, definidos pelo usuário.

Até aí o componente funcionava perfeitamente, pois a tarefa mais complexa até o momento era quebrar a mensagem bruta em seus componentes sintáticos, eliminando ao mesmo tempo os não-terminais presentes na mensagem bruta.

Como a tarefa de receber e processar a mensagem é uma tarefa que dura enquanto a conexão está ativa, uma nova idéia me veio à mente, que foi colocar o componente dentro de uma thread sempre que ele fosse utilizado.

Então, pensando nas dificuldades que isso encarregaria para o usuário, eu pensei em portar o componente para funcionar diretamente em cima de uma thread, ocultando isso de quem irá usar o componente. Como o componente já foi implementado usando-se as mais modernas técnicas da programação orientada à gambiarras objetos, só precisei mudar a superclasse de quem herdar e mudar um pouco o codigo, pra que o mesmo se adequasse ao novo container de execução.

Atualmente, o desenvolvimento está centrado em duas vertentes: Estudar sincronização de threads com semáforos e formas de fazer log das ações do componente e a Implementação do componente servidor.

Há também um projeto paralelo que visa implementar um servidor de ident básico para funcionar em conjunto com os clientes, já que a grande maioria dos servidores de IRC fazem verificação de Ident para autenticar usuários.

Comparado com o desenvolvimento anterior, em Delphi, trabalhar com Python está sendo bem mais eficiente. Espero que gostem do componente. Ele ainda não está 100% mas eu acredito que possa servir de alguma forma para vocês.

Quanto ao licenciamento, eu havia pensado originalmente em liberar sob a GPL, mas não acho ela livre o suficiente, na minha opinião. Então eu escolhi liberar sob a licença Fail, que é verdadeiramente uma licença livre, não impedindo ninguém de fazer o que quizer do meu código, mesmo que seja fechar ele e comercializar em algum produto fechado.

Vou me encerrando por aki pois já entrei num mérito que merece, na realidade, ser discutido em um post do blog.

É isso então, pessoal. Espero que gostem do componente. Há um teste básico que ainda não está adequado à nova situação do componente, usando threads, mas que exigiria pouca alteração para funcionar corretamente.

Caso achem algum erro, sintam-se à vontade para comentar nesta página ou me enviar um e-mail comentando suas experiências com o componente. Meu e-mail é vndmtrx [at] gmail [dot] com.

Atualizações

A versão atual (0.7) congela a API da classe ClienteBase e implementa uma nova classe chamada ClienteIrc, baseada na mesma. Com o congelamento de ClienteBase, somente atualizações que venham a corrigir erros serão efetuadas, fazendo o possível para que a compatibilidade com versões anteriores seja mantida, sem necessidade de alteração do códigos dos aplicativos que diretamente ou indiretamente venham a depender de ClienteBase.

Quem quiser acompanhar melhor o desenvolvimento, eu criei uma página no Google Code, aqui: http://code.google.com/p/ircpy/

Até mais!
Č
ċ
ď
Eowyyn-0.1_python-3.0.tar.bz2
(6k)
Eduardo Rolim,
18/12/2008 10:50