Esempio n. 1
0
    def on_recv(self):
        """ recieve request and return reply. """
        try:
            protocol = Protocol()
            head_size = protocol.get_head_size()
            head = self.recvall(head_size)
            if len(head) != head_size:
                raise CommunicateException("Connection closed by peer")

            _type, size, codec = protocol.parse_head(head)

            if size > 0 and size < MAX_MESSAGE_LENGTH:
                body = self.recvall(size)  # raise CommunicateException
                try:
                    print("recv raw: %s" % body)
                    body = codec.decode(body[:-4])
                    log.info("recv: %s" % body)
                except Exception as ex:
                    e = "Decode Request Message Body Error: %s" % ex
                    log.error(e)
                    raise ProtocolException(e)
            else:
                raise CommunicateException("size error: " + str(size))

            if _type == MSG_TYPE_REQUEST:
                # break up the request
                req_id, func_name, params = body["id"], body["func"], body["params"]

                log.info("in %s(%s)" % (func_name, params))
                self.reply_cli(req_id, func_name, params)
                log.info("out %s(%s)" % (func_name, params))
        except Exception as e:
            log.warning("on_recv: %s" % str(traceback.format_exc()))
Esempio n. 2
0
    def on_recv(self):
        """ recieve request and return reply. """
        try:
            protocol = Protocol()
            head_size = protocol.get_head_size()
            head = self.recvall(head_size)
            if len(head) != head_size:
                raise CommunicateException("Connection closed by peer")

            _type, size, codec = protocol.parse_head(head)

            if size > 0 and size < MAX_MESSAGE_LENGTH:
                body = self.recvall(size)  # raise CommunicateException
                try:
                    body = codec.decode(body[:-4])
                except Exception as ex:
                    e = "Decode Request Message Body Error: %s" % ex
                    log.error(e)
                    raise ProtocolException(e)
            else:
                raise CommunicateException("size error: " + str(size))

            if _type == MSG_TYPE_REPLY:
                log.info("recv : %s" % body)
            else:
                log.error("Unknown Message Ignoring...")
            return body
        except Exception as e:
            log.warning("on_recv: %s" % str(traceback.format_exc()))
Esempio n. 3
0
    def on_recv(self):
        """ recieve request and return reply. """
        protocol = Protocol()
        _type, body = self._on_recv_body(protocol)

        if _type == MSG_TYPE_REQUEST:
            reply_code = code.SUCCESS
            # break up the request
            sub_data = None
            reply_msg = None
            recv_data = None
            try:
                req_id, func_name, params = body["id"], body["func"], body[
                    "params"]

                log.info("in %s(%s)" % (func_name, params))

                # get the result for the request

                cab_cli = Client(cab_host, cab_port)
                cab_cli.send(
                    json.dumps({
                        "func": func_name,
                        "params": params
                    }).encode())
                recv_data = cab_cli.recv(80960)

                recv_data_dic = json.loads(recv_data)

                reply_code = recv_data_dic.get("code")
                sub_data = recv_data_dic.get("sub_data", None)
                reply_msg = recv_data_dic.get("reply_msg", None)

            except ConnectionRefusedError as e:
                reply_code = code.UNAVALIABLE_SERVICE

            except Exception as ex:
                log.warning(str(traceback.format_exc()))
                reply_code = code.FAILED
                _msg = str(ex)

            reply_msg = reply_msg if reply_msg else code.CODE2MSG.get(
                reply_code, "Unknown Error")

            log.info("raw out: %s" % recv_data)

            sub_data = json.dumps({}) if not sub_data else json.dumps(sub_data)
            reply = Reply(req_id, get_machine_id(), reply_code, reply_msg,
                          sub_data)

            msg = protocol.reply_to_raw(reply)
            # print "reply msg: ", msg
            self.send_to_remote(msg)
        else:
            log.error("Unknown Message Ignoring...")
Esempio n. 4
0
 def reply_cli(self):
     try:
         reply_id = "000001"
         reply_code = 0
         reply_msg = "Success"
         data = {"sub_code": 1, "msg": "ok"}
         reply = Reply(reply_id, reply_code, reply_msg, data)
         protocol = Protocol()
         msg = protocol.reply_to_raw(reply)
         self.send(msg)
     except Exception as e:
         log.warning("reply_cli: %s" % str(e))
Esempio n. 5
0
 def reply_cli(self, req_id, func, params):
     try:
         reply_id = req_id
         reply_code = 0
         reply_msg = "Success"
         simulate_func = getattr(self, func, None)
         data = simulate_func(params) if simulate_func else {}
         reply = Reply(reply_id, reply_code, reply_msg, data)
         protocol = Protocol()
         msg = protocol.reply_to_raw(reply)
         self.send(msg)
         print("send: %s" % msg)
         log.info("send: %s" % msg)
     except Exception as e:
         log.warning("reply_cli: %s" % str(e))
Esempio n. 6
0
 def _heart_beat(self):
     try:
         with self.lock:
             r = HeartBeat(get_machine_id())
             data = Protocol().heart_to_raw(r)
             self.cli.send(data)
     except Exception as e:
         log.warning("heatbeat: %s" % str(e))
Esempio n. 7
0
def call_once(func, params=None, timeout=60):
    cli = Client(c2r_server, c2r_port)
    r = Request(func, params)
    _id, data = Protocol().request_to_raw(r)
    cli.send(data)
    cli.recv(80960)
    cli.close()

    return
Esempio n. 8
0
    def run(self):
        self._heart_beat()
        while True:
            try:
                request = self.task.get(timeout=60)
                _id, data = Protocol().request_to_raw(request)
                with self.lock:
                    while True:
                        try:
                            self.cli.send(data)
                            break
                        except Exception as e:
                            log.warning(str(e))
                            time.sleep(1)
                    self.on_recv()

            except queue.Empty:
                self._heart_beat()
            except Exception as e:
                log.warning(str(e))
Esempio n. 9
0
 def _send_heardbeat(self):
     r = HeartBeat(get_machine_id())
     data = Protocol().heart_to_raw(r)
     self.send_to_remote(data)
Esempio n. 10
0
 def call(self, func, params=None, timeout=60):
     with self.lock:
         r = Request(func, params)
         _id, data = Protocol().request_to_raw(r)
         self.cli.send(data)
         return self.on_recv()