from ais.ntools import formataddr
-__all__ = [ 'OutPeers', 'outpeers_from_config', 'TcpInOutPeer', 'TcpInOutPeerListen', 'tcpin_outpeers' ]
+__all__ = [ 'OutPeers', 'outpeers_from_config', 'TcpInOutPeer', 'TcpInServiceOut', 'tcpin_outpeers' ]
class UdpOutPeer:
'''
-class TcpInOutPeerListen(Thread):
+class TcpInServiceOut(Thread):
def __init__(self, port):
Thread.__init__(self)
self.port = port
from ais.inputs.config import peers_get_config
from ais.inputs.stats import STATS_RATE
from ais.inputs.common import refresh_all_stats, Source
-from ais.inputs.udp import UdpService
-from ais.inputs.serialin import SerialService
-from ais.inputs.tcpout import TcpOutService
+from ais.inputs.udp import UdpServiceIn
+from ais.inputs.serialin import SerialServiceIn
+from ais.inputs.tcpout import TcpOutServiceIn
from ais.gpsdec import AivdmProcessor
-from ais.inputs.outpeer import TcpInOutPeerListen, tcpin_outpeers
+from ais.inputs.outpeer import TcpInServiceOut, tcpin_outpeers
def mainloop(options, args):
if options.debug:
#rootlogger.addHandler(loghandler)
if options.tcp_listeners_port:
- tcpinoutpeerlisten = TcpInOutPeerListen(options.tcp_listeners_port)
+ tcpinoutpeerlisten = TcpInServiceOut(options.tcp_listeners_port)
tcpinoutpeerlisten.start()
try:
logging.critical('No source definition. Check your config file.')
return
- # build a list of services that needs to be launched
- all_service_desc = set()
+ # build a list of input services that needs to be launched
+ all_servicein_desc = set()
for id4, settings in config.iteritems():
if args and id4 not in args:
continue
continue
Source(id4) # make sure the source/stats is created
if configin[0] == 'Udp':
- service_desc = ( configin[0], configin[1], configin[2] )
+ servicein_desc = ( configin[0], configin[1], configin[2] )
elif configin[0] == 'Serial':
- service_desc = ( configin[0], id4, configin[1] )
+ servicein_desc = ( configin[0], id4, configin[1] )
elif configin[0] == 'TcpOut':
- service_desc = ( configin[0], id4, configin[1], configin[2] )
+ servicein_desc = ( configin[0], id4, configin[1], configin[2] )
else:
logging.error('Unsupported protocol %s', configin[0])
continue
- all_service_desc.add(service_desc)
+ all_servicein_desc.add(servicein_desc)
- logging.info('all_service_desc=%s', all_service_desc)
+ logging.info('all_servicein_desc=%s', all_servicein_desc)
- all_services = set()
- for service_desc in all_service_desc:
- service_class_name = service_desc[0] + 'Service'
+ all_servicein = set()
+ for servicein_desc in all_servicein_desc:
+ service_class_name = servicein_desc[0] + 'ServiceIn'
service_class = globals()[service_class_name]
logging.debug('-'*80)
- logging.debug('Starting %s%s', service_class, service_desc[1:])
- service = service_class(*service_desc[1:])
- all_services.add(service)
+ logging.debug('Starting %s%s', service_class, servicein_desc[1:])
+ service = service_class(*servicein_desc[1:])
+ all_servicein.add(service)
logging.debug('-'*80)
last_stat = get_timestamp()
while True:
- active_services = select(all_services, (), (), STATS_RATE)[0]
+ active_services = select(all_servicein, (), (), STATS_RATE)[0]
logging.debug('active_services: %s', active_services)
for service in active_services:
from_, channel = service.get_activity()
import logging
from ais.inputs.common import get_source_by_id4
-from ais.inputs.virtual import Channel, Service
+from ais.inputs.virtual import Channel, ServiceIn
DEFAULT_SPEED = 38400
self.data += data
-class SerialService(Service):
+class SerialServiceIn(ServiceIn):
'''
Service that listen to a ttyS device like /dev/ttyUSB0
'''
def __init__(self, id4, serialname, speed=DEFAULT_SPEED):
# TODO: wait for the request device to be available
- #Service.__init__(self, stdout)
+ #ServiceIn.__init__(self, stdout)
self.channel = SerialChannel(id4, serialname, speed)
def __repr__(self):
- return 'SerialService<%s>' % self.channel.name
+ return 'SerialServiceIn<%s>' % self.channel.name
def fileno(self):
'''
import socket
from ais.inputs.common import DEFAULT_MTU, get_source_by_id4
-from ais.inputs.virtual import Channel, Service
+from ais.inputs.virtual import Channel, ServiceIn
TCP_HEADER_SIZE = 52
self.data += data
-class TcpOutService(Service):
+class TcpOutServiceIn(ServiceIn):
'''
Service that connects to a TCP server and listen for data there.
'''
def __init__(self, id4, hostname, port):
- #Service.__init__(self, stdout)
+ #ServiceIn.__init__(self, stdout)
self.channel = TcpOutChannel(id4, hostname, port)
def __repr__(self):
- return 'TcpOutService<%s,%s>' \
+ return 'TcpOutServiceIn<%s,%s>' \
% (self.channel.hostname, self.channel.port)
def fileno(self):
from ais.ntools import formataddr
from ais.inputs.common import DEFAULT_MTU, get_source_by_id4
-from ais.inputs.virtual import Channel, Service
+from ais.inputs.virtual import Channel, ServiceIn
from ais.inputs.config import source_get_infoin
UDP_HEADER_SIZE = 28
return result
-class UdpService(Service):
+class UdpServiceIn(ServiceIn):
'''
Service that open an UDP socket and listen for AIVDM data on it.
'''
MAX_SPORT_DISCRIMINATE = 100
def __init__(self, serverhost, serverport):
- #Service.__init__(self, stdout)
+ #ServiceIn.__init__(self, stdout)
self.serverport = serverport
self.sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
#http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=560238 :
' All information will be discarded.')
def __repr__(self):
- return 'UdpService<%s>' % self.serverport
+ return 'UdpServiceIn<%s>' % self.serverport
def fileno(self):
'''
import sys
__all__ = [
- 'Service',
+ 'ServiceIn',
]
-class Service:
+class ServiceIn:
'''
- A service provides data for processing.
+ A service provides input data for processing.
This is a pure virtual class, an interface, that need to be subclassed.
- Example services are TcpOutService, UdpService, and SerialService.
+ Example services are TcpOutServiceIn, UdpServiceIn, and SerialServiceIn.
'''
#def __init__(self, stdout):
# '''
def fileno(self):
'''
- All services must implement such a function.
+ All input services must implement such a function.
It should return a file descriptor suitable for os.select()
'''
raise NotImplemented
def get_activity(self):
'''
- All services must implement such a function.
+ All input services must implement such a function.
It should return a tuple (from_, channel)
from_ is a low-level id of the source.
channels contain a "data" buffer with bytes waiting to be processed,