def main(): log = Logger('hub') log.info('Starting %s %s' % (full_name, version)) cfg = Config('hub') if not cfg.is_loaded(): sys.exit(1) server = ConnectionSocketServer(cfg['listen'].host(), cfg['listen'].port()) request = Request() signals.connect('connection:connected', client.add) signals.connect('connection:disconnected', client.remove) signals.connect('connection:data_received', request.parse) signals.connect('data:on_info', client.on_info) try: while server.pool(): sleep(0.01) except KeyboardInterrupt: sys.stdout.write('\r') log.info('Exiting on user request (Ctrl+C)') pass del server
def main(): global cfg log = Logger('manager') log.info("Starting DarkCloud Manager") cfg = Config('manager') if not cfg.is_loaded(): sys.exit(1) client = ConnectionSocketClient(cfg['hub'].host(), cfg['hub'].port()) request = Request() if client == False: sys.exit(1) signals.connect('connection:connected', on_connect) signals.connect('connection:data_received', request.parse) client.connect() try: while True: client.pool() except KeyboardInterrupt: sys.stdout.write('\r') log.info('Exiting on user request (Ctrl+C)') pass client.disconnect() del client
import socket import Queue from time import sleep from darkcloud.common.connectionsocket import ConnectionSocket from darkcloud.common.hmac import HMAC from darkcloud.common.logger import Logger from darkcloud.common.signals import signals import darkcloud.settings as settings import json log = Logger('client') class ConnectionSocketClient(ConnectionSocket): def __init__(self, host, port): ConnectionSocket.__init__(self) self.host = host self.port = port self.connected = None self.data = None def __del__(self): self.disconnect() def connect(self): try: if self.connected == False:
import select import socket import sys import Queue from darkcloud.common.connectionsocket import ConnectionSocket from darkcloud.common.logger import Logger from darkcloud.common.signals import signals log = Logger('server') class ConnectionSocketServer(ConnectionSocket): def __init__(self, host, port): ConnectionSocket.__init__(self) self.host = host self.port = port self.connections = {} self.connection_inputs = [self.socket] self.connection_outputs = [] self.message_queues = {} try: self.socket.bind((self.host, self.port)) self.socket.setblocking(False) log.info("Listening on %s:%s" % (self.host, self.port)) except socket.error as err: log.critical(err[1]) sys.exit(1)
def _load_config(self, filename): log = Logger('config') try: filepath = '/etc/darkcloud/%s.yml' % (filename) config_data = open(filepath).read() log.debug("Loaded configuration file '%s'" % (filepath)) except: try: log.debug("Configuration not found at '%s'" % (filepath)) filepath = 'config/%s.yml' % (filename) config_data = open(filepath).read() log.debug("Loaded configuration file '%s'" % (filepath)) except: log.debug("Configuration not found at '%s'" % (filepath)) log.critical("Can't load configuration file '%s'" % (filepath)) return None return load(config_data)
import darkcloud.settings as settings from darkcloud.common.hmac import HMAC from darkcloud.common.logger import Logger import socket import json log = Logger('connection') class ConnectionSocket(): def __init__(self, use_socket=None): if use_socket: self.socket = use_socket else: self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) def recv(self): try: data = self.socket.recv(settings.BUFFER_SIZE).rstrip('\n') if not data: return None except socket.error as err: print("\033[1;31mSOCKET ERROR:\033[0m %s" % err) return None if settings.DEBUG: print("\033[0;36mrecv\033[0m> \033[0;33m%s\033[0m" % (data)) return data