All pastes #1013838 Raw Edit

Stuff

public python v1 · immutable
#1013838 ·published 2008-05-10 16:44 UTC
rendered paste body
#!/usr/bin/env python# -*- coding: iso-8859-1 -*-"""Módulo de conexão à rede IRCMódulo: IRCAutor: Vindemiatrix AlmuredinBlog: http://tocadoelfo.blogspot.comDescrição: Módulo com classes necessárias para se conectar à redes IRCproto = ['privmsg', 'notice', 'nick', '330', '331', 'ping', 'pong']cmd = {'remetente':{'nick':'Vndmtrx', 'user':'Ox0fff', 'host':'aldksjfh.etfto.gov.br'}, 'cmd':'notice', 'params':['#DelphiX', 'Testando o envio']}for x in proto:    print 'Iteracao %s' % (x)    if x is cmd['cmd']:        print '  >> Iteracao %s comando %s' % (x, cmd)"""import socket, timeclass Core:    """    Classe com funcionalidades básicas de conexão e interpretação do protocolo à nível sintático    """    def __init__(self, fim='\r\n'):        """Define a inicialização do objeto Core, permitindo a definição do marcador de fim do comando"""        self.fim = fim    def conecta(self, servidor, porta=6667):        """        Inicia a conexão ao servidor indicado, com a possibilidade de setar uma porta alternativa.        Inicia as variáveis utilizadas pela instância durante a vida da conexão.        """        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)        self.sock.settimeout(200)        self.sock.connect((servidor, porta))        self.mantem = True        self.__pbuffer = ''    def desconecta(self):        """        Inicia as rotinas de desconexão do socket e termina o looping de recebimento de dados.        Fecha o socket e libera o descritor.        """        self.sock.close()        self.mantem = False    def envia(self, mensagem):        """        Faz o envio da informação em mensagem, imprimindo uma exceção em caso de erro.        """        try:            print mensagem #POG só pra ver qdo acontece            self.sock.send(mensagem)        except socket.error, v:            print v    def __bufferiza(self, dados, fim = '\r\n'):        """        Buferiza a entrada de dados, de forma que, quando uma string chegar picada, ou várias        strings chegarem em um único bloco, cada comando seja construído adequadamente.        """        self.__pbuffer += dados        while fim in self.__pbuffer:            self.processa_protocolo(self.__pbuffer[:self.__pbuffer.find(fim)])            self.__pbuffer = self.__pbuffer[self.__pbuffer.find(fim)+len(fim):]    def loop(self): #mover para o final da classe        while self.mantem:            try:                dados = self.sock.recv(1024)                self.__bufferiza(dados, self.fim)                time.sleep(1)            except (KeyboardInterrupt, SystemExit):                self.desconecta()    def processa_protocolo(self, mensagem):        print mensagemdef __init__():    x = Core('\n')    x.conecta('irc.freenode.net')    time.sleep(2)    x.envia('NICK Caeryn\r\n')    x.envia('USER Ox0fff Ox0fff irc.freenode.net :Meu nome eh Caeryn\r\n')    time.sleep(2)    x.envia('JOIN ##Null\r\n')    x.loop()