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 à 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! |