HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux WebLive 5.15.0-79-generic #86-Ubuntu SMP Mon Jul 10 16:07:21 UTC 2023 x86_64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //usr/local/qcloud/monitor/barad/comm/receiver/base_client.py
from epoll.event_handler import EventHandler
import cutils, constant
import socket,json,struct,time

class BaseClient(EventHandler):
    def __init__(self, reactor, sock, event, logger, router):
        super(BaseClient, self).__init__(reactor, sock, event)
        self.__recv_buffer = ''
        self.__send_buffer = ''
        self.__sock = sock
        self.__logger = logger
        self.__router = router
        
    def logger(self):
        return self.__logger

    def router(self):
        return self.__router
        
    def sock(self):
        return self.__sock

    def handle_input(self):
        try:
            recv_data = self.__sock.recv(4096)
            if len(recv_data) == 0:
                self.logger().warn("client has closed connection.")
                self.reactor().put_del_list(self)
                return -1
    
            if recv_data:
                self.__recv_buffer += recv_data
                ret = self.decode(self.__recv_buffer)
                if ret > 0:
                    self.__recv_buffer = self.__recv_buffer[ret:]
                elif ret == 0: #packet not complete 
                    pass
                else:
                    self.logger().error("decode msg failed, ret = %d" % ret)
                    self.reactor().put_del_list(self)
                    return -1
            return 0
                
        except socket.error,e:
            self.logger().error("recv error,  %s" % e)
            self.reactor().put_del_list(self)
            return -1
        
    def handle_output(self):
        try:
            send_length = self.__sock.send(self.__send_buffer)
            if send_length == len(self.__send_buffer):
                self.disable_output()
            self.__send_buffer = self.__send_buffer[send_length:]
                
        except socket.error,e:
            self.logger().error("handle outpout error, %s" %e)
            self.reactor().put_del_list(self)
            
    def send_response(self, send_data):
        try:
            send_length = self.__sock.send(send_data)
            if send_length < len(send_data):
                self.enable_output()
            self.__send_buffer = send_data[send_length:]
        except socket.error,e: 
            self.logger().error("send_response error %s" % e)
            self.reactor().put_del_list(self)