class GenericClient(Cmd, object): intro = "Daemon Client %s" % __daemon_client_version__ + "\n" + \ "Type 'help', 'server' for more information." prompt = ">>> " def __init__(self, **kwargs): super(GenericClient, self).__init__() self.port = kwargs.get('port', 4202) self.host = kwargs.get('host', '') self.stdout = ColoredStreamHandler(self.stdout).stream def prints(self, s): self.stdout.write("%s\n" % s) def start(self): return self.cmdloop() def default(self, line): if line in ("exit", "quit", "bye", "EOF"): print "Bye ..." return True cmd, arg, line = self.parseline(line) msg = None data = None args = arg.split(" ") if len(args) > 0: msg = args[0] if len(args) > 1: data = " ".join(args[1:]) self.send_to_server(cmd, msg, data) return False def send_to_server(self, command, msg, data=None): from socket import error req = DaemonRequest(command, msg, data) from gevent.socket import create_connection try: sock = create_connection((self.host, self.port)) sock.send(req.serialize()) response = DaemonMsg.load_from_socket(sock) if response.success: self.prints(response.msg) else: self.prints("{{white|red:[ERROR]}}: %s" % response.msg) sock.close() except error, e: if e.errno == 10061: self.prints( "{{white|red:[ERROR]}}: cannot connect to the server at %s:%s" % (self.host, self.port)) else: self.prints(e)
def __init__(self, **kwargs): super(GenericClient, self).__init__() self.port = kwargs.get('port', 4202) self.host = kwargs.get('host', '') self.stdout = ColoredStreamHandler(self.stdout).stream
import logging from uliweb.utils.coloredlog import ColoredStreamHandler import cPickle from cmd import Cmd log = logging.getLogger('redbreast.daemon') log.addHandler(ColoredStreamHandler()) log.setLevel(logging.DEBUG) __daemon_client_version__ = 'v0.0.1' class DaemonMsg(object): def serialize(self): return cPickle.dumps(self, cPickle.HIGHEST_PROTOCOL) @classmethod def load(cls, s): return cPickle.loads(s) @classmethod def load_from_socket(cls, sock): msgstr = [] while True: s = sock.recv(1024) if not s: break msgstr.append(s) try: msg = DaemonMsg.load("".join(msgstr))