コード例 #1
0
    def __init__(self, name=None):
        super(UServer, self).__init__(name)
        self.setMsgUid(MSG_UNIQUE_ID_T_CONTROLLER)

        self.addListener(MSG_UNIQUE_ID_T_CLOUD_ACTOR)

        self.addHandler('start', self.startHandler)
        self.addHandler('stop', self.stopHandler)
        self.addHandler('proxy', self.proxyHandler)
        self.addHandler('watch', self.watchHandler)
        self.addHandler('list', self.listHandler)
        self.addHandler('sync', self.syncHandler)
        self.addHandler('info', self.infoHandler)

        self.__startActors = []
        self.__callbackList = []

        self.cActor = UCloudActor('Cloud Actor')
        self.fsMonitor = FileSysMonitor('File Sys Monitor')

        self.isEnableSocket = False

        self.configure()
コード例 #2
0
ファイル: UServer.py プロジェクト: harite/BaiduYunPanPython
    def __init__(self, name=None):
        super(UServer, self).__init__(name)
        self.setMsgUid(MSG_UNIQUE_ID_T_CONTROLLER)

        self.addListener(MSG_UNIQUE_ID_T_CLOUD_ACTOR)

        self.addHandler('start', self.startHandler)
        self.addHandler('stop', self.stopHandler)
        self.addHandler('proxy', self.proxyHandler)
        self.addHandler('watch', self.watchHandler)
        self.addHandler('list', self.listHandler)
        self.addHandler('sync', self.syncHandler)
        self.addHandler('info', self.infoHandler)

        self.__startActors = []
        self.__callbackList = []

        self.cActor = UCloudActor('Cloud Actor')
        self.fsMonitor = FileSysMonitor('File Sys Monitor')

        self.isEnableSocket = False

        self.configure()
コード例 #3
0
class UServer(UActor):
    """UniFileSync server"""
    def __init__(self, name=None):
        super(UServer, self).__init__(name)
        self.setMsgUid(MSG_UNIQUE_ID_T_CONTROLLER)

        self.addListener(MSG_UNIQUE_ID_T_CLOUD_ACTOR)

        self.addHandler('start', self.startHandler)
        self.addHandler('stop', self.stopHandler)
        self.addHandler('proxy', self.proxyHandler)
        self.addHandler('watch', self.watchHandler)
        self.addHandler('list', self.listHandler)
        self.addHandler('sync', self.syncHandler)
        self.addHandler('info', self.infoHandler)

        self.__startActors = []
        self.__callbackList = []

        self.cActor = UCloudActor('Cloud Actor')
        self.fsMonitor = FileSysMonitor('File Sys Monitor')

        self.isEnableSocket = False

        self.configure()

    def addCallBack(self, callback):
        """add call back function for UServer"""
        self.__callbackList.append(callback)

    def enableSocket(self):
        """enable socket as net server"""
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.isEnableSocket = True

    def startHandler(self, param):
        """start handler for actors"""
        logging.debug('[%s]: startHandler with parm %s', self.getName(), param)

        if param['name']:
            name = param['name'].lower()
        else:
            name = ''
        res = E_OK

        watchpaths = ConfManager.getManager().getValue('common', 'folders')

        if name == 'all' or name == '':
            if self.cActor.isRunning or self.fsMonitor.isRunning:
                return E_ACTOR_ALIVE, None
            self.cActor.start()
            self.__startActors.append(self.cActor)
            self.fsMonitor.start()
            self.__startActors.append(self.fsMonitor)

            time.sleep(2)
            for w in watchpaths:
                self.watchHandler({'path': w, 'action': 'add'}, False)
                #logging.debug('[%s]: add watch path %s from configuration file', self.getName(), w)

        elif name == 'monitor':
            if self.fsMonitor.isRunning:
                return E_ACTOR_ALIVE, None
            self.fsMonitor.start()
            self.__startActors.append(self.fsMonitor)

            time.sleep(2)
            for w in watchpaths:
                self.watchHandler({'path': w, 'action': 'add'})
                logging.debug(
                    '[%s]: add watch path %s from configuration file',
                    self.getName(), w)

        elif name == 'cloud':
            if self.cActor.isRunning:
                return E_ACTOR_ALIVE, None
            self.cActor.start()
            self.__startActors.append(self.cActor)
        else:
            logging.error('[%s]: startHandler with name %s error',
                          self.getName(), param['name'])
            res = E_INVILD_PARAM

        return res, None

    def stopHandler(self, param):
        """stop handler for actors"""
        logging.debug('[%s]: stopHandler with parm %s', self.getName(), param)

        if param['name']:
            name = param['name'].lower()
        else:
            name = ''

        res = E_ACTOR_DEAD

        if name == 'all' or name == '':
            #The msg is broadcase
            msg = self.initMsg(MSG_TYPE_T_OPER, MSG_ID_T_OPER_STOP, None, True)
            self.notifyListeners(msg)

            for a in self.__startActors:
                rmsg = self.getMsg(2)
                if rmsg:
                    res = rmsg.body['result']

            logging.info('[UniFileSync]: stop server...')
            self.stop()
        elif name == 'monitor':
            if not self.fsMonitor.isRunning:
                res = E_ACTOR_DEAD
            msg = self.initMsg(MSG_TYPE_T_OPER, MSG_ID_T_OPER_STOP,
                               MSG_UNIQUE_ID_T_FS_MONITOR, True)
            self.msgBus.send(msg)
            rmsg = self.getMsg(2)
            if rmsg:
                res = rmsg.body['result']
        elif name == 'cloud':
            if not self.cActor.isRunning:
                res = E_ACTOR_DEAD
            msg = self.initMsg(MSG_TYPE_T_OPER, MSG_ID_T_OPER_STOP,
                               MSG_UNIQUE_ID_T_CLOUD_ACTOR, True)
            self.msgBus.send(msg)
            rmsg = self.getMsg(2)
            if rmsg:
                res = rmsg.body['result']
        else:
            logging.error('[%s]: stopHandler with name %s error',
                          self.getName(), param['name'])
            res = E_INVILD_PARAM

        return res, None

    def proxyHandler(self, param):
        """proxy handler for actors"""
        logging.debug('[%s]: proxyHandler with parm %s', self.getName(), param)
        res = E_PROXY_ERR
        res = set_proxy(param)
        return res, None

    def watchHandler(self, param, ack=True):
        """watch handler for actors"""
        logging.debug('[%s]: watchHandler with parm %s', self.getName(), param)
        msg = self.initMsg(MSG_TYPE_T_OPER, MSG_ID_T_OPER_ADD_WATCH,
                           MSG_UNIQUE_ID_T_FS_MONITOR, ack)
        msg.body = param
        self.msgBus.send(msg)

        if ack:
            rmsg = self.getMsg(2)
            res = E_WATCH_ERR
            if rmsg:
                res = rmsg.body['result']
        else:
            res = E_OK

        return res, None

    def listHandler(self, param):
        """list handler for actors"""
        logging.debug('[%s]: listHandler with parm %s', self.getName(), param)
        msg = self.initMsg(MSG_TYPE_T_FILE, MSG_ID_T_FILE_LIST,
                           MSG_UNIQUE_ID_T_CLOUD_ACTOR, True)
        msg.body = param
        self.msgBus.send(msg)
        res = E_API_ERR
        data = None
        rmsg = self.getMsg(None)

        if rmsg:
            res = rmsg.body['result']
            data = rmsg.body['data']

        return res, data

    def syncHandler(self, param):
        """sync handler for actors"""
        logging.debug('[%s]: syncHandler with parm %s', self.getName(), param)
        msg = self.initMsg(MSG_TYPE_T_FILE, MSG_ID_T_FILE_SYNC,
                           MSG_UNIQUE_ID_T_CLOUD_ACTOR, True)
        msg.body['path'] = param['path']
        self.msgBus.send(msg)
        rmsg = self.getMsg(2)
        res = E_API_ERR
        if rmsg:
            res = rmsg.body['result']

        return res, None

    def infoHandler(self, param):
        """get information of cloud"""
        logging.debug('[%s]: infoHandler with parm %s', self.getName(), param)
        msg = self.initMsg(MSG_TYPE_T_FILE, MSG_ID_T_FILE_INFO,
                           MSG_UNIQUE_ID_T_CLOUD_ACTOR, True)
        msg.body = param
        self.msgBus.send(msg)
        rmsg = self.getMsg(None)
        res = E_API_ERR
        data = "Cloud API Error"
        if rmsg:
            if 'result' in rmsg.body:
                res = rmsg.body['result']
            if 'data' in rmsg.body:
                data = rmsg.body['data']
        return res, data

    def run(self):
        """UServer entry"""
        super(UServer, self).run()
        #TODO: below should be set by ConfManager

        if self.isEnableSocket:
            self.sock.bind(('localhost', 8089))
            self.sock.listen(5)

            while self.isRunning:
                try:
                    conn, addr = self.sock.accept()
                    try:
                        conn.settimeout(5)
                        buf = conn.recv(
                            1024)  #TODO: should be also in ConfManager
                        req = json.loads(buf)
                        logging.debug('[UniFileSync]: action %s, param %s',
                                      req['action'], req['param'])
                        #TODO: make it common for function usage
                        res, data = self.getHandler(req['action'])(
                            req['param'])
                        ret = {
                            'action': req['action'],
                            'param': {
                                'data': data
                            },
                            'res': res,
                            'type': 'ack'
                        }
                        conn.send(json.dumps(ret))
                    except socket.timeout:
                        logging.info('[UniFileSync]: socket time out from %s',
                                     addr)
                    except KeyError, e:
                        logging.error('[%s]: Key Error with param %s',
                                      self.getName(), req['param'])
                    finally:
                        conn.close()
                except KeyboardInterrupt:
                    print 'Press Ctrl+C'
                    self.stop()
コード例 #4
0
ファイル: UServer.py プロジェクト: harite/BaiduYunPanPython
class UServer(UActor):
    """UniFileSync server"""
    def __init__(self, name=None):
        super(UServer, self).__init__(name)
        self.setMsgUid(MSG_UNIQUE_ID_T_CONTROLLER)

        self.addListener(MSG_UNIQUE_ID_T_CLOUD_ACTOR)

        self.addHandler('start', self.startHandler)
        self.addHandler('stop', self.stopHandler)
        self.addHandler('proxy', self.proxyHandler)
        self.addHandler('watch', self.watchHandler)
        self.addHandler('list', self.listHandler)
        self.addHandler('sync', self.syncHandler)
        self.addHandler('info', self.infoHandler)

        self.__startActors = []
        self.__callbackList = []

        self.cActor = UCloudActor('Cloud Actor')
        self.fsMonitor = FileSysMonitor('File Sys Monitor')

        self.isEnableSocket = False

        self.configure()


    def addCallBack(self, callback):
        """add call back function for UServer"""
        self.__callbackList.append(callback)

    def enableSocket(self):
        """enable socket as net server"""
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.isEnableSocket = True

    def startHandler(self, param):
        """start handler for actors"""
        logging.debug('[%s]: startHandler with parm %s', self.getName(), param);

        if param['name']:
            name = param['name'].lower()
        else:
            name = ''
        res = E_OK

        watchpaths = ConfManager.getManager().getValue('common', 'folders')

        if name == 'all' or name == '':
            if self.cActor.isRunning or self.fsMonitor.isRunning:
                return E_ACTOR_ALIVE, None
            self.cActor.start()
            self.__startActors.append(self.cActor)
            self.fsMonitor.start()
            self.__startActors.append(self.fsMonitor)

            time.sleep(2)
            for w in watchpaths:
                self.watchHandler({'path': w, 'action': 'add'}, False)
                #logging.debug('[%s]: add watch path %s from configuration file', self.getName(), w)

        elif name == 'monitor':
            if self.fsMonitor.isRunning:
                return E_ACTOR_ALIVE, None
            self.fsMonitor.start()
            self.__startActors.append(self.fsMonitor)

            time.sleep(2)
            for w in watchpaths:
                self.watchHandler({'path': w, 'action': 'add'})
                logging.debug('[%s]: add watch path %s from configuration file', self.getName(), w)

        elif name == 'cloud':
            if self.cActor.isRunning:
                return E_ACTOR_ALIVE, None
            self.cActor.start()
            self.__startActors.append(self.cActor)
        else:
            logging.error('[%s]: startHandler with name %s error', self.getName(), param['name'])
            res = E_INVILD_PARAM

        return res, None

    def stopHandler(self, param):
        """stop handler for actors"""
        logging.debug('[%s]: stopHandler with parm %s', self.getName(), param);

        if param['name']:
            name = param['name'].lower()
        else:
            name = ''

        res = E_ACTOR_DEAD

        if name == 'all' or name == '':
            #The msg is broadcase
            msg = self.initMsg(MSG_TYPE_T_OPER, MSG_ID_T_OPER_STOP, None, True)
            self.notifyListeners(msg)

            for a in self.__startActors:
                rmsg = self.getMsg(2)
                if rmsg:
                    res = rmsg.body['result']

            logging.info('[UniFileSync]: stop server...')
            self.stop()
        elif name == 'monitor':
            if not self.fsMonitor.isRunning:
                res = E_ACTOR_DEAD
            msg = self.initMsg(MSG_TYPE_T_OPER, MSG_ID_T_OPER_STOP, MSG_UNIQUE_ID_T_FS_MONITOR, True)
            self.msgBus.send(msg)
            rmsg = self.getMsg(2)
            if rmsg:
                res = rmsg.body['result']
        elif name == 'cloud':
            if not self.cActor.isRunning:
                res = E_ACTOR_DEAD
            msg = self.initMsg(MSG_TYPE_T_OPER, MSG_ID_T_OPER_STOP, MSG_UNIQUE_ID_T_CLOUD_ACTOR, True)
            self.msgBus.send(msg)
            rmsg = self.getMsg(2)
            if rmsg:
                res = rmsg.body['result']
        else:
            logging.error('[%s]: stopHandler with name %s error', self.getName(), param['name'])
            res = E_INVILD_PARAM

        return res, None

    def proxyHandler(self, param):
        """proxy handler for actors"""
        logging.debug('[%s]: proxyHandler with parm %s', self.getName(), param);
        res = E_PROXY_ERR
        res = set_proxy(param)
        return res, None

    def watchHandler(self, param, ack=True):
        """watch handler for actors"""
        logging.debug('[%s]: watchHandler with parm %s', self.getName(), param);
        msg = self.initMsg(MSG_TYPE_T_OPER, MSG_ID_T_OPER_ADD_WATCH, MSG_UNIQUE_ID_T_FS_MONITOR, ack)
        msg.body = param
        self.msgBus.send(msg)

        if ack:
            rmsg = self.getMsg(2)
            res = E_WATCH_ERR
            if rmsg:
                res = rmsg.body['result']
        else:
            res = E_OK

        return res, None

    def listHandler(self, param):
        """list handler for actors"""
        logging.debug('[%s]: listHandler with parm %s', self.getName(), param);
        msg = self.initMsg(MSG_TYPE_T_FILE, MSG_ID_T_FILE_LIST, MSG_UNIQUE_ID_T_CLOUD_ACTOR, True)
        msg.body = param
        self.msgBus.send(msg)
        res = E_API_ERR
        data = None
        rmsg = self.getMsg(None)

        if rmsg:
            res = rmsg.body['result']
            data = rmsg.body['data']

        return res, data

    def syncHandler(self, param):
        """sync handler for actors"""
        logging.debug('[%s]: syncHandler with parm %s', self.getName(), param);
        msg = self.initMsg(MSG_TYPE_T_FILE, MSG_ID_T_FILE_SYNC, MSG_UNIQUE_ID_T_CLOUD_ACTOR, True)
        msg.body['path'] = param['path']
        self.msgBus.send(msg)
        rmsg = self.getMsg(2)
        res = E_API_ERR
        if rmsg:
            res = rmsg.body['result']

        return res, None

    def infoHandler(self, param):
        """get information of cloud"""
        logging.debug('[%s]: infoHandler with parm %s', self.getName(), param);
        msg = self.initMsg(MSG_TYPE_T_FILE, MSG_ID_T_FILE_INFO, MSG_UNIQUE_ID_T_CLOUD_ACTOR, True)
        msg.body = param
        self.msgBus.send(msg)
        rmsg = self.getMsg(None)
        res = E_API_ERR
        data = "Cloud API Error"
        if rmsg:
            if 'result' in rmsg.body:
                res = rmsg.body['result']
            if 'data' in rmsg.body:
                data = rmsg.body['data']
        return res, data


    def run(self):
        """UServer entry"""
        super(UServer, self).run()
        #TODO: below should be set by ConfManager

        if self.isEnableSocket:
            self.sock.bind(('localhost', 8089))
            self.sock.listen(5)

            while self.isRunning:
                try:
                    conn, addr = self.sock.accept()
                    try:
                        conn.settimeout(5)
                        buf = conn.recv(1024) #TODO: should be also in ConfManager
                        req = json.loads(buf)
                        logging.debug('[UniFileSync]: action %s, param %s', req['action'], req['param'])
                        #TODO: make it common for function usage
                        res, data = self.getHandler(req['action'])(req['param'])
                        ret = {'action': req['action'], 'param': {'data': data}, 'res': res, 'type': 'ack'}
                        conn.send(json.dumps(ret))
                    except socket.timeout:
                        logging.info('[UniFileSync]: socket time out from %s', addr)
                    except KeyError, e:
                        logging.error('[%s]: Key Error with param %s', self.getName(), req['param'])
                    finally:
                        conn.close()
                except KeyboardInterrupt:
                    print 'Press Ctrl+C'
                    self.stop()