Esempio n. 1
0
 def __epollIn(self, fileno):
     try:
         #取得当前链接对象
         conn = self.__client_connections[fileno]
         #取得当前内容
         requests = self.__client_requests[fileno]
         #取得头信息
         header = self.__socket_parser.getHeader(conn)
         cmd = header['cmd']
         if cmd == 0:
             self.__epoll_close(fileno)
             return False
         #获取内容长度
         body_info = self.__socket_parser.getBody(conn, header['body_len'])
         #获取处理程序
         handler_name = self.__getHandler(cmd)
         if len(handler_name) > 0:
             send_list = eval(handler_name)(body_info)
         else:
             send_list = [0,{"error":"cmd not defined"}]
         self.__send_list = send_list
         #处理程序的返回值发送回调用者,返回值格式为[标识符, {}]
         #self.__socket_parser.send(conn, send_list[0], send_list[1])
         #修改文件描述符为可读状态
         self.__epoll.modify(fileno, select.EPOLLOUT)
     except:
         Log.error()
         self.__epoll_close(fileno)
         return False
Esempio n. 2
0
 def handler_8003(self, p):
     q = self.__sq
     try:
         temp = (q['rear'] - q['front'] + self.__maxsize) % self.__maxsize
     except:
         Log.error()
         return [0, {"msg": "error"}]
     return [8003, temp]
Esempio n. 3
0
File: queue.py Progetto: lxy235/e
 def handler_8003(self, p):
     queue_type = p.get('queue_type', "")
     if queue_type not in self.__sqs:
         return [4001, {"msg": "queue type error"}]
     try:
         temp = len(self.__sqs[queue_type])
     except:
         Log.error()
     return [8003, temp]
Esempio n. 4
0
File: mysql.py Progetto: lxy235/e
 def close():
     try:
         if None != self.queryID:
             self.queryID.close()
         if '' != self.clinkID:
             self.clinkID.close()
     except pymysql.Error as e:
         Log.error(e)
     self.clinkID = ''
     self.queryID = None
Esempio n. 5
0
File: queue.py Progetto: lxy235/e
 def handler_8002(self, p):
     queue_type = p.get('queue_type', "")
     if queue_type not in self.__sqs:
         return [4001, {"msg": "queue type error"}]
     try:
         temp = self.__sqs[queue_type].popleft()
         if temp == -1:
             return [4002, {"msg": "queue is empty"}]
     except:
         Log.error()
     return [8002, temp]
Esempio n. 6
0
File: queue.py Progetto: lxy235/e
 def handler_8001(self, p):
     i = p.get('i', 0)
     queue_type = p.get('queue_type', "")
     if queue_type not in self.__sqs:
         return [4001, {"msg": "queue type error"}]
     try:
         del p['queue_type']
         self.__sqs[queue_type].append(p)
     except:
         Log.error()
     return [8001, {"msg": "success" + str(i)}]
Esempio n. 7
0
 def handler_8002(self, p):
     q = self.__sq
     try:
         if q['front'] == q['rear']:
             return [0, {"msg": "error"}]
         e = q['data'][q['front']]
         q['front'] = (q['front'] + 1) % self.__maxsize
     except:
         Log.error()
         return [0, {"msg": "error"}]
     return [8002, e]
Esempio n. 8
0
File: cache.py Progetto: lxy235/e
 def connect(self, type=""):
     if '' == type:
         type = self.config.get("cache.data_cache_type")
     module_type = type.title()
     module = "caches." + module_type
     m = getattr(__import__(module), module_type)
     # print(m)
     className = getattr(m, module_type)
     # print(className)
     try:
         cache = className(self.options)
     except:
         Log.error(L('_CACHE_TYPE_INVALID_') + ':' + type)
     return cache
Esempio n. 9
0
 def getHeader(self, socket_obj):
     recv_cmd = 0  #命令号
     body_len = 0  #内容长度
     header = {'cmd': recv_cmd, 'body_len': body_len}
     try:
         #获取头信息
         header_msg = socket_obj.recv(self.__header_len)
         #判断头的长度是否合法
         if len(header_msg) == self.__header_len:
             recv_cmd, body_len = struct.unpack('HH', header_msg)
             header['cmd'] = socket.ntohs(recv_cmd)
             header['body_len'] = socket.ntohs(body_len)
     except:
         Log.error()
     return header
Esempio n. 10
0
 def send(self, socket_obj, command=0, body={}):
     #"命令号"转网络字节序
     command = socket.htons(command)
     #字典编码JSON字符串,在python3中pack必须转换成bytes类型
     content = json.dumps(body).encode(encoding='utf-8')
     send_len = len(content)
     #"正文长度"转网络字节序
     body_len = socket.htons(send_len)
     send_data = struct.pack('HH' + str(send_len) + 's', command, body_len,
                             content)
     try:
         return socket_obj.send(send_data)
     except:
         Log.error()
         return False
Esempio n. 11
0
 def handler_8001(self, p):
     sql = p.get("sql", "")
     self.__i = self.__i + 1
     sql = sql % self.__i
     print(sql)
     q = self.__sq
     print("rear = %d" % q['rear'])
     try:
         if ((q['rear'] + 1) % self.__maxsize == q['front']):
             return [0, {"msg": "error"}]
         q['data'].append(sql)
         q['rear'] = (q['rear'] + 1) % self.__maxsize
     except:
         Log.error()
         return [0, {"msg": "error"}]
     return [8001, {"msg": "success"}]
Esempio n. 12
0
 def __init__(self, options={}):
     self.config = Config()
     if "redis" not in sys.modules:
         Log.error(L('_NO_MODULE_')+":redis")
     if len(options) == 0:
         options = {
             "host":self.config.get("redis.host") if self.config.get("redis.host") else "127.0.0.1",
             "port":self.config.get("redis.port") if self.config.get("redis.port") else "6397"
         }
     self.options = options
     self.handler = redis.Redis(**options)
     #set prefix
     if 'prefix' in options:
         self.options['prefix'] = options['prefix']
     else:
         self.options['prefix'] = self.config.get("redis.prefix")
Esempio n. 13
0
 def getBody(self, socket_obj, body_len=0):
     if body_len <= 0:
         return ''
     body_contents = ''
     try:
         while len(body_contents) < body_len:
             #python3中要将(字节)对象转换成(字符)后,才能执行连接操作
             temp = socket_obj.recv(body_len - len(body_contents)).decode(
                 encoding='utf-8')
             body_contents += temp
     except:
         Log.error()
         return ''
     #内容解析
     blen = len(body_contents)
     if blen != body_len or blen == 0:
         return ''
     return json.loads(body_contents)
Esempio n. 14
0
File: db.py Progetto: lxy235/e
    def factory(self, db_config=''):
        # 读取数据库配置
        db_config = self.__parseConfig(db_config)
        # print(db_config)

        if db_config['dbms'] == '':
            Log.error(L('_NO_DB_CONFIG_'))
        # 数据库类型
        self.dbType = db_config['dbms'].capitalize()  # 首字母大写
        # 加载数据库驱动
        module_name = "dbs." + self.dbType
        # print(dir(__import__(module_name)))
        # print(sys.modules)

        m = getattr(__import__(module_name), self.dbType)
        # print(m)

        if module_name not in sys.modules:
            Log.error(L('_NO_DB_MODULE_'))
        # 实例化数据库驱动类
        if hasattr(m, self.dbType):
            dbClass = getattr(m, self.dbType)
            db = dbClass(db_config)
            if "pdo" != db_config['dbms'].lower():
                db.dbType = self.dbType.upper()
            if self.config.get('debug'):
                db.debug = True
        else:
            Log.error(L('_NO_SUPPORT_DB_'))
        return db
Esempio n. 15
0
File: mysql.py Progetto: lxy235/e
 def connect(self, db_config='', linkNum=0):
     #print("db_config = %s" % db_config)
     #print("linkNum = %s" % linkNum)
     try:
         self.linkID[linkNum]
     except Exception as e:
         if db_config == '':
             db_config = self.dbConfig
         #print(db_config)
         #创建数据库连接
         try:
             database = {
                 "host":str(db_config['hostname']), 
                 "user":str(db_config['username']), 
                 "passwd":str(db_config['password'])
             }
             #处理不带端口号的socket连接情
             if '' != db_config['hostport']:
                 database['port']=int(db_config['hostport'])
             #print(database)
             self.linkID[linkNum] = pymysql.connect(**database)
             if '' != db_config['database']:
                 self.linkID[linkNum].select_db(str(db_config['database']))
             dbVersion = self.linkID[linkNum].server_version
             if dbVersion >= "4.1":
                 self.linkID[linkNum].query("SET NAMES %s" % self.config.get("db.charset"))
             #设置sql_mode
             if dbVersion > "5.0.1":
                 self.linkID[linkNum].query("SET sql_mode=''")
             #标记连接成功
             self.connected = True
             #注销数据库连接配置信息
             if 1 != self.config.get("db.deploy_type"):
                 self.dbConfig = ''
         except pymysql.Error as e:
             Log.error(e)
     #print(self.linkID[linkNum])
     return self.linkID[linkNum]