예제 #1
0
파일: tcpsocket.py 프로젝트: petxo/HermEsb
 def _sendAck(self, obj):
     buff = struct.pack('!I%ds' % (len(obj['idMessage']),), len(obj['idMessage']), obj['idMessage'])
     try:
         obj['socket'].send(buff)
     except Exception as ex:
         loggerManager.get_endPoints_logger().error("Error al enviar el ACK %s" % ex.message)
         raise ex
     finally:
         del buff
예제 #2
0
 def _processMessage(self, message, obj):
     try:
         msg = self._compressor.decompress(message)
         self.__invokeOnMessageReceived(msg)
         if self._useAck:
             self._sendAck(obj)
     except Exception as ex:
         loggerManager.get_endPoints_logger().error("Error al procesar el mensaje: %s" % ex)
         raise ex
예제 #3
0
 def _processMessage(self, message, obj):
     try:
         msg = self._compressor.decompress(message)
         self.__invokeOnMessageReceived(msg)
         if self._useAck:
             self._sendAck(obj)
     except Exception as ex:
         loggerManager.get_endPoints_logger().error(
             "Error al procesar el mensaje: %s" % ex)
         raise ex
예제 #4
0
파일: tcpsocket.py 프로젝트: petxo/HermEsb
 def _close_point(self):
     try:
         self._socket.shutdown(socket.SHUT_RDWR)
         self._socket.close()
     except Exception as ex:
         loggerManager.get_endPoints_logger().error(
             "Error al desconectar del host %s:%i : %s" % (self._server, self._port, ex.message))
     finally:
         del self._socket
         self._socket = None
예제 #5
0
파일: tcpsocket.py 프로젝트: petxo/HermEsb
 def _connect_point(self):
     try:
         self._create_socket()
         self._socket.bind((self._server, self._port))
         self._socket.listen(self._maxConnectionRequests)
     except Exception as ex:
         loggerManager.get_endPoints_logger().error(
             "Error al conectar con el host %s:%i" % (self._server, self._port))
         loggerManager.get_endPoints_logger().error("Socket de mierda: %s" % self._socket.fileno)
         raise ConnectionError(ex)
예제 #6
0
 def _close_point(self):
     try:
         self._socket.shutdown(socket.SHUT_RDWR)
         self._socket.close()
     except Exception as ex:
         loggerManager.get_endPoints_logger().error(
             "Error al desconectar del host %s:%i : %s" %
             (self._server, self._port, ex.message))
     finally:
         del self._socket
         self._socket = None
예제 #7
0
 def _sendAck(self, obj):
     buff = struct.pack('!I%ds' % (len(obj['idMessage']), ),
                        len(obj['idMessage']), obj['idMessage'])
     try:
         obj['socket'].send(buff)
     except Exception as ex:
         loggerManager.get_endPoints_logger().error(
             "Error al enviar el ACK %s" % ex.message)
         raise ex
     finally:
         del buff
예제 #8
0
 def _connect_point(self):
     try:
         self._create_socket()
         self._socket.bind((self._server, self._port))
         self._socket.listen(self._maxConnectionRequests)
     except Exception as ex:
         loggerManager.get_endPoints_logger().error(
             "Error al conectar con el host %s:%i" %
             (self._server, self._port))
         loggerManager.get_endPoints_logger().error("Socket de mierda: %s" %
                                                    self._socket.fileno)
         raise ConnectionError(ex)
예제 #9
0
파일: amqp.py 프로젝트: petxo/HermEsb
 def _send(self, message):
     try:
         messageProperties = pika.BasicProperties(content_type='text/plain', delivery_mode=1, content_encoding='utf-8')
         return self._channel.basic_publish(exchange= self._exchange,
                                             routing_key= self._key,
                                             body= unicode(message).encode('utf-8'),
                                             properties= messageProperties)
     except ConnectionClosed as ex:
         loggerManager.get_endPoints_logger().error("Error: %s" % ex)
         raise ConnectionError("Se ha perdido la conexcion con el servidor AMPQ")
     except Exception as ex:
         loggerManager.get_endPoints_logger().error("Error: %s" % ex)
         raise SendError('Error al enviar el elemento %s' % ex)
예제 #10
0
파일: tcpsocket.py 프로젝트: petxo/HermEsb
 def _startReceive(self):
     try:
         loggerManager.get_endPoints_logger().debug("Aceptando conexiones")
         (clientSocket, address) = self._socket.accept()
         loggerManager.get_endPoints_logger().info("Conexion establecida con el cliente %s:%i." % (address[0], address[1]))
         th = threading.Thread(target=InBoundChannelTcp.__readData, args=(self, clientSocket), name="TCP client %s:%i" % (address[0], address[1]))
         loggerManager.get_endPoints_logger().debug('Iniciando hilo de lectura %s' % th.getName())
         th.start()
     except socket.timeout as ex:
         loggerManager.get_endPoints_logger().debug("Timeout de aceptacion de conexiones : %s." % ex.message)
         pass
     except Exception as ex:
         loggerManager.get_endPoints_logger().error("Error al aceptar conexiones : %s." % ex.message)
         raise ex
예제 #11
0
    def _reconnect(self):
        # Si ya esta conectado no reconecta
        if self._isConnected:
            return

        self._reconnectionNumber = 0
        self._reconnectionTimer.reset()
        self._isConnected = False

        while True:
            try:
                loggerManager.get_endPoints_logger().debug(
                    "Conectando al host: %s", self._host)
                self._connect_point()
                break
            except ConnectionError as ex:
                loggerManager.get_endPoints_logger().error(
                    "Error al conectar: %s" % ex)
                if self._maxReconnections != Channel.INFINITE_RECONNECTIONS and self._reconnectionNumber >= self._maxReconnections:
                    loggerManager.get_endPoints_logger().error(
                        "Se ha alcanzado el maximo numero de reconexiones")
                    raise ConnectionError(
                        "Se ha alcanzado el maximo numero de reconexiones")
                else:
                    loggerManager.get_endPoints_logger().error(
                        "Intentado reconectar... %d" %
                        self._reconnectionNumber)
                    self._reconnectionNumber += 1
                    self._reconnectionTimer.wait()
        self._isConnected = True
예제 #12
0
파일: amqp.py 프로젝트: yashhotline/HermEsb
 def _send(self, message):
     try:
         messageProperties = pika.BasicProperties(content_type='text/plain',
                                                  delivery_mode=1,
                                                  content_encoding='utf-8')
         return self._channel.basic_publish(
             exchange=self._exchange,
             routing_key=self._key,
             body=unicode(message).encode('utf-8'),
             properties=messageProperties)
     except ConnectionClosed as ex:
         loggerManager.get_endPoints_logger().error("Error: %s" % ex)
         raise ConnectionError(
             "Se ha perdido la conexcion con el servidor AMPQ")
     except Exception as ex:
         loggerManager.get_endPoints_logger().error("Error: %s" % ex)
         raise SendError('Error al enviar el elemento %s' % ex)
예제 #13
0
 def __workReceive(self):
     while True:
         try:
             if self.isRunning:
                 self._startReceive()
             else:
                 self._stopReceive()
                 break
         except Exception as ex:
             # Intentamos reconectar
             try:
                 loggerManager.get_endPoints_logger().error("Error en la recepcion de mensajes %s" % ex)
                 self.close()
                 self._reconnect()
             except ConnectionError:
                 self.stop()
                 self._invokeOnConnectionError()
                 break
예제 #14
0
 def __workReceive(self):
     while True:
         try:
             if self.isRunning:
                 self._startReceive()
             else:
                 self._stopReceive()
                 break
         except Exception as ex:
             # Intentamos reconectar
             try:
                 loggerManager.get_endPoints_logger().error(
                     "Error en la recepcion de mensajes %s" % ex)
                 self.close()
                 self._reconnect()
             except ConnectionError:
                 self.stop()
                 self._invokeOnConnectionError()
                 break
예제 #15
0
    def send(self, message):
        ret = True
        self._mutex.acquire()
        while True:
            try:
                #loggerManager.get_endPoints_logger().debug("Enviando mensaje %s" % message)
                msg = self._compressor.compress(message)
                ret = self._send(msg)
                if not ret:
                    ret = self.__checkMessageSent(message)
                else:
                    self._invokeOnMessageSent(message)

                del msg
                break
            except ConnectionError as ex:
                loggerManager.get_endPoints_logger().error("Error de conexion al enviar el mensaje %s" % ex)
                # Intentamos reconectar
                try:
                    self.close()
                    self._reconnect()
                except ConnectionError as ex2:
                    loggerManager.get_endPoints_logger().error(
                        "No se ha podido reconectar al enviar el mensaje %s" % ex2)
                    self._invokeOnSendError(message)
                    break
            except SendError as ex:
                loggerManager.get_endPoints_logger().error("Error de envio %s" % ex)
                self._invokeOnSendError(message)
                break
            except Exception:
                raise

        self._mutex.release()
        return ret
예제 #16
0
 def _startReceive(self):
     try:
         loggerManager.get_endPoints_logger().debug("Aceptando conexiones")
         (clientSocket, address) = self._socket.accept()
         loggerManager.get_endPoints_logger().info(
             "Conexion establecida con el cliente %s:%i." %
             (address[0], address[1]))
         th = threading.Thread(target=InBoundChannelTcp.__readData,
                               args=(self, clientSocket),
                               name="TCP client %s:%i" %
                               (address[0], address[1]))
         loggerManager.get_endPoints_logger().debug(
             'Iniciando hilo de lectura %s' % th.getName())
         th.start()
     except socket.timeout as ex:
         loggerManager.get_endPoints_logger().debug(
             "Timeout de aceptacion de conexiones : %s." % ex.message)
         pass
     except Exception as ex:
         loggerManager.get_endPoints_logger().error(
             "Error al aceptar conexiones : %s." % ex.message)
         raise ex
예제 #17
0
    def _reconnect(self):
        # Si ya esta conectado no reconecta
        if self._isConnected:
            return

        self._reconnectionNumber = 0
        self._reconnectionTimer.reset()
        self._isConnected = False

        while True:
            try:
                loggerManager.get_endPoints_logger().debug("Conectando al host: %s", self._host)
                self._connect_point()
                break
            except ConnectionError as ex:
                loggerManager.get_endPoints_logger().error("Error al conectar: %s" % ex)
                if self._maxReconnections != Channel.INFINITE_RECONNECTIONS and self._reconnectionNumber >= self._maxReconnections:
                    loggerManager.get_endPoints_logger().error("Se ha alcanzado el maximo numero de reconexiones")
                    raise ConnectionError("Se ha alcanzado el maximo numero de reconexiones")
                else:
                    loggerManager.get_endPoints_logger().error("Intentado reconectar... %d" % self._reconnectionNumber)
                    self._reconnectionNumber += 1
                    self._reconnectionTimer.wait()
        self._isConnected = True
예제 #18
0
    def send(self, message):
        ret = True
        self._mutex.acquire()
        while True:
            try:
                #loggerManager.get_endPoints_logger().debug("Enviando mensaje %s" % message)
                msg = self._compressor.compress(message)
                ret = self._send(msg)
                if not ret:
                    ret = self.__checkMessageSent(message)
                else:
                    self._invokeOnMessageSent(message)

                del msg
                break
            except ConnectionError as ex:
                loggerManager.get_endPoints_logger().error(
                    "Error de conexion al enviar el mensaje %s" % ex)
                # Intentamos reconectar
                try:
                    self.close()
                    self._reconnect()
                except ConnectionError as ex2:
                    loggerManager.get_endPoints_logger().error(
                        "No se ha podido reconectar al enviar el mensaje %s" %
                        ex2)
                    self._invokeOnSendError(message)
                    break
            except SendError as ex:
                loggerManager.get_endPoints_logger().error(
                    "Error de envio %s" % ex)
                self._invokeOnSendError(message)
                break
            except Exception:
                raise

        self._mutex.release()
        return ret
예제 #19
0
 def __readData(self, clientSocket):
     clientSocket.settimeout(self.__receptionTimeout)
     while self.isRunning:
         try:
             loggerManager.get_endPoints_logger().debug(
                 "Leyendo mensaje...")
             message = ''
             idMessage = ''
             messageLength = 0
             bytesReceived = ''
             bytesReceived = clientSocket.recv(4)
             if not len(bytesReceived) == 4:
                 raise Exception("Error al leer cabecera")
             loggerManager.get_endPoints_logger().debug("Cabecera leida.")
             messageLength = struct.unpack('>I', bytesReceived)[0]
             message = clientSocket.recv(messageLength)
             if not len(message) == messageLength:
                 raise Exception(
                     "Error de longitud del mensaje : Expected length %s - Actual length %i"
                     % (messageLength, len(message)))
             # TODO: Esto tiene que ir en la clase superior
             idMessage = clientSocket.recv(36)
             if not len(idMessage) == 36:
                 raise Exception(
                     "Error de identificacion del mensaje : Msg length %i - Msg Id length %i"
                     % (len(message), len(idMessage)))
             self._processMessage(message, {
                 "idMessage": idMessage,
                 "socket": clientSocket
             })
         except socket.timeout as ex:
             loggerManager.get_endPoints_logger().error(
                 "Error de recepcion : %s." % ex.message)
             break
         except socket.error as ex:
             loggerManager.get_endPoints_logger().error(
                 "Error de socket : %s." % ex.message)
             break
         except Exception as ex:
             loggerManager.get_endPoints_logger().error(ex.message)
             break
         finally:
             del message, bytesReceived, messageLength, idMessage
     try:
         clientSocket.shutdown(socket.SHUT_RDWR)
         clientSocket.close()
     except Exception as ex:
         loggerManager.get_endPoints_logger().error(
             "Error al desconectar del cliente : %s" % ex.message)
     finally:
         del clientSocket
         clientSocket = None
예제 #20
0
파일: tcpsocket.py 프로젝트: petxo/HermEsb
 def __readData(self, clientSocket):
     clientSocket.settimeout(self.__receptionTimeout)
     while self.isRunning:
         try:
             loggerManager.get_endPoints_logger().debug("Leyendo mensaje...")
             message = ''
             idMessage = ''
             messageLength = 0
             bytesReceived = ''
             bytesReceived = clientSocket.recv(4)
             if not len(bytesReceived) == 4:
                 raise Exception("Error al leer cabecera")
             loggerManager.get_endPoints_logger().debug("Cabecera leida.")
             messageLength = struct.unpack('>I', bytesReceived)[0]
             message = clientSocket.recv(messageLength)
             if not len(message) == messageLength:
                 raise Exception("Error de longitud del mensaje : Expected length %s - Actual length %i" % (messageLength, len(message)))
             # TODO: Esto tiene que ir en la clase superior
             idMessage = clientSocket.recv(36)
             if not len(idMessage) == 36:
                 raise Exception("Error de identificacion del mensaje : Msg length %i - Msg Id length %i" % (len(message), len(idMessage)))
             self._processMessage(message, { "idMessage" : idMessage, "socket" : clientSocket} )
         except socket.timeout as ex:
             loggerManager.get_endPoints_logger().error("Error de recepcion : %s." % ex.message)
             break
         except socket.error as ex:
             loggerManager.get_endPoints_logger().error("Error de socket : %s." % ex.message)
             break
         except Exception as ex:
             loggerManager.get_endPoints_logger().error(ex.message)
             break
         finally:
             del message, bytesReceived, messageLength, idMessage
     try:
         clientSocket.shutdown(socket.SHUT_RDWR)
         clientSocket.close()
     except Exception as ex:
         loggerManager.get_endPoints_logger().error("Error al desconectar del cliente : %s" % ex.message)
     finally:
         del clientSocket
         clientSocket = None