Exemple #1
0
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)
Exemple #2
0
 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
Exemple #3
0
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))