Skip to content
Snippets Groups Projects
Commit d4d6e6d3 authored by jkerdreu's avatar jkerdreu
Browse files

Added Error handling


git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/branches/fork@1765 b32b6428-25c9-4566-ad07-03861ab6144f
parent 10816d25
No related branches found
No related tags found
No related merge requests found
......@@ -31,24 +31,32 @@ import logging
logger = logging.getLogger(__name__)
import time
from enum import Enum
class State(Enum):
disconnected = 0
connected = 1
class NetworkConnector(object):
UDP_MAX_SIZE = 65507
def __init__(self, address, port, hops):
self.__address = address
self.__port = port
self.__hops = hops
self.address = address
self.port = port
self.hops = hops
self.state = State.disconnected
def connect(self):
try:
self.__connect()
except socket.error as e:
except Exception as e:
self.network_error(e)
def __connect(self):
logger.info("Connecting to %s:%s" % (self.__address, self.__port))
logger.info("Connecting to %s:%s" % (self.address, self.port))
# TBD add bind_addr attrib
bind_addr = ''
......@@ -56,45 +64,57 @@ class NetworkConnector(object):
# self.__sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
# #formac os ???
self.__sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.__sock.bind((bind_addr, self.__port))
mreq = struct.pack('4sl',socket.inet_aton(self.__address),socket.INADDR_ANY)
self.__sock.bind((bind_addr, self.port))
mreq = struct.pack('4sl',socket.inet_aton(self.address),socket.INADDR_ANY)
self.__sock.setsockopt(socket.IPPROTO_IP,socket.IP_ADD_MEMBERSHIP,mreq)
self.__sock.setsockopt(socket.IPPROTO_IP,socket.IP_MULTICAST_TTL,self.__hops)
self.__sock.setsockopt(socket.IPPROTO_IP,socket.IP_MULTICAST_TTL,self.hops)
self.state = State.connected
def disconnect(self):
logger.info("Disconnecting from the bus")
self.state = State.disconnected
self.__sock.close()
def sethops(self, value):
self.__hops = value
self.hops = value
def gethops(self):
return self.__hops
return self.hops
def is_connected(self):
return self.state == State.connected
def receive(self):
packt = self.__sock.recv(self.UDP_MAX_SIZE)
return packt
def get_data(self):
def __get_data(self):
r = select.select([self.__sock, ], [], [], 0.03)
if r[0]:
return self.receive()
return None
def get_data(self):
if not self.is_connected(): self.connect()
try:
return self.__get_data()
except Exception as e:
self.network_error(e)
def send(self, message):
if not self.is_connected(): self.connect()
try:
self.__sock.sendto(codecs.encode(message), (self.__address, self.__port))
except socket.error as e:
self.__sock.sendto(codecs.encode(message), (self.address, self.port))
except Exception as e:
self.network_error(e)
def network_error(self, msg):
self.disconnect()
logger.info("Network error, reconnect..%s" % msg)
import time
time.sleep(5)
self.__connect()
def getaddr(self):
return self.__address
return self.address
def getport(self):
return self.__port
return self.port
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment