コード例 #1
0
ファイル: SelfSocket.py プロジェクト: isoundy000/learn_python
def RecvAll(sock, length):
    """
    接收数据
    :param sock: 文件标识符
    :param length: 数据长度
    :return:
    """
    # Log.Write("recvall fileno: %d datalen: %d" % (sock.fileno(), length))
    data = ""
    tmpData = ""
    if length == 0:
        return data
    tmpLength = length
    while True:
        try:
            gevent.socket.wait_read(sock.fileno)  # gevent
            tmpData = sock.recv(tmpLength)
        except l_socket.error, le:
            Log.Write("recv all exception:", le)
            if le.errno == 11 or le.errno == 110 or le.errno == 4:
                continue
            else:
                return None

        if len(tmpData) == 0:
            Log.Write("fileno: %d recv nothing" % sock.fileno())
            return None

        data += tmpData
        tmpLength -= len(tmpData)

        if tmpLength == 0:
            return data
コード例 #2
0
        def ExactTimerProcess(param):
            Log.Write("ExactTimerProcess", param)
            exacttimerevent = gevent.event.Event()
            hour = param[0]  # 小时
            minute = param[1]  # 分钟
            second = param[2]  # 秒数
            while True:
                nowtime3 = datetime.now()  # 当前时间
                # nowtime4 = datetime.now()
                nowtime4 = nowtime3.replace(nowtime3.year, nowtime3.month,
                                            nowtime3.day, hour, minute, second)
                timedelta1 = nowtime4 - nowtime3
                if timedelta1.days < 0:
                    nowtime4 += timedelta(days=1)
                    timedelta1 = nowtime4 - nowtime3

                waitSecond = timedelta1.days * 24 * 60 * 60 + timedelta1.seconds
                Log.Write(nowtime4, timedelta1, waitSecond)
                exacttimerevent.wait(waitSecond)
                for i in range(3, len(param)):
                    func = param[i]
                    try:
                        func()
                    except Exception, e:
                        Log.Write(e)
                        Log.Write(traceback.format_exc())
                    exacttimerevent.wait(1)
コード例 #3
0
 def SendToUser(rid, data, forcesend=False):
     '''
     给玩家发送数据
     :param rid:
     :param data:
     :param forcesend:
     :return:
     '''
     # Log.Write("SendToUser", rid)
     Lock2(UserSocketManager._lock)
     if not UserSocketManager._id.has_key(rid):
         Log.Write("[Error]no user %d" % rid)
         return False
     sockfileno = UserSocketManager._id[rid]
     # todo fix chungeng cut off net resend data
     if not forcesend:
         sockfileno2 = None
         sock2 = data.Socket()
         if sock2:
             sockfileno2 = sock2.fileno()
         # Log.Write("SendToUser", sockfileno2, sockfileno)
         if sockfileno2 and sockfileno != sockfileno2:
             return False
     if not UserSocketManager._dict.has_key(sockfileno):
         Log.Write("[Error]no user %d sock" % rid)
         return False
     # UserSocketManager._seq[sockfileno] += 1
     # data.setSeq(UserSocketManager._seq[sockfileno])
     data.setMagicCode(UserSocketManager._magicCode)
     UserSocketManager._dict[sockfileno]["send"].put(data)       # "send": Queue()
     return True
コード例 #4
0
    def LoadUserData2(userid):
        # 引入合服机制,通过判断userid的组成,判断什么模式
        # 正常模式 userid 为整数
        # 合服模式 userid 为userid_server
        result = None
        if isinstance(userid, int):
            with session_scope() as session:
                result = session.query(t_role).filter(t_role.uid == userid).first()
        else:
            Log.Write("LoadUserData2 merge tip")
            userid_a = userid.split("_")
            if len(userid_a) < 2:
                raise TypeError("Merge Mode t_role error")

            userid_fix = int(userid_a[0])
            server_fix = int(userid_a[1])
            Log.Write(userid_fix, server_fix)
            with session_scope() as session:
                result = session.query(t_role).filter(
                    and_(
                        t_role.uid == userid_fix,
                        and_(t_role.id > (1000000 * server_fix),
                            (t_role.id < (1000000 * (server_fix + 1)))
                        )
                    )
                ).first()

        if result:
            Log.Write("LoadUserData", userid, result.id)
            result.createtime_utc = ConvertToUTCSeconds(result.createtime)
        return result
コード例 #5
0
    def DayHalfHourTick():
        '''
        半点定时器
        :return:
        '''
        Log.Write("DayHalfHourTick")
        dayhalfhourevent = gevent.event.Event()
        nowtime = datetime.now()
        if nowtime.minute < 30:
            secs_halfhour = (30 - nowtime.minute) * 60 - nowtime.second
        else:
            secs_halfhour = (90 - nowtime.minute) * 60 - nowtime.second

        Log.Write("secs_halfhour", secs_halfhour)
        dayhalfhourevent.wait(secs_halfhour)

        def DayHalfHourTickProcess():
            '''
            检测执行函数 半点
            :return:
            '''
            Log.Write("DayHalfHourTickProcess")
            nowtime1 = datetime.now()
            for k, v in PerDayHalfHourConfig.items():
                nowhour = nowtime1.hour % 24
                k = k % 24
                if k == nowhour:
                    # print("[DayHour] Hour: %d" % (k))
                    for func in v:
                        try:
                            func()  # 整点加30分钟 00:30 01:30 02:30
                        except Exception, e:
                            Log.Write(e)
                            Log.Write(traceback.format_exc())
コード例 #6
0
 def LoadRoleData(roleid):
     '''
     根据rid获取玩家本身的数据
     :param roleid:
     :return:
     '''
     with session_scope() as session:
         result = session.query(t_role).filter(t_role.id == roleid).first()
         if result:
             rid = result.id
             server_fix = None
             if rid > 1000000:
                 server_fix = rid // 1000000     # server_id [1,2,3,...1000]
                 Log.Write("[TIP]server_fix", server_fix)
                 m = re.match(r"^S(\d+)-", result.name)
                 server_test = None
                 try:
                     xxxtuple = m.groups()
                     server_test = int(xxxtuple[0])
                     Log.Write("[TIP]server_test", server_test)
                 except:
                     pass
                 if server_test != server_fix:
                     result.name = u"S%d-" % server_fix + result.name
                     Log.Write("[TIP]name", result.name)
                     DBEngine.Update(result)
             result.createtime_utc = ConvertToUTCSeconds(result.createtime)
     return result
コード例 #7
0
 def LoadFirst(self, userid=None, roleid=None):
     '''
     加载数据
     :param userid:
     :param roleid:
     :return:
     '''
     # Log.Write("UserDataObj.LoadFirst", userid, roleid)
     role = None
     if userid:
         role = t_role.LoadUserData(userid)
         Log.Write("from uid userid:", userid, "roleid:", role.id, role)
     if roleid:
         role = t_role.LoadRoleData(roleid)
         if role:
             Log.Write("from rid userid:", role.uid, "roleid:", roleid,
                       "power:", role.power)
     if not role:
         return False
     self["role"] = role
     # if role.profile <= 10100 or role.profile > 10115:   # 头像
     #     role.profile = 10101
     # self.NewUserActivity()
     if role.power == -1:
         role.power = 0
         self.LoadSecond()
         for i in range(1, 8):
             general = self.slot.slot[i]
             if general:
                 role.power += general.power
     return True
コード例 #8
0
    def Update(section, ctype):
        session = DBEngine.NewSession()
        try:
            config_file = session.query(t_section_config, t_section_config_files).\
                filter(and_(t_section_config.section == section, t_section_config.ctype == ctype)).\
                filter(t_section_config.excute == t_section_config_files.id).first()

            if config_file is None:
                Log.Write("[Error]GameConfig Error:No GameConfig Data")
                return None
            config_file_info = {
                "section": config_file[0].section,
                "ctype": config_file[0].ctype,
                "version": config_file[0].version,
                "excute": config_file[0].excute,
                "url": config_file[1].url,
                "filepath": config_file[1].filepath,
                "url2": config_file[1].url2,
                "url3": config_file[1].url3
            }
            if not GameConfigManager._config_dict.has_key(
                    config_file_info["section"]):
                GameConfigManager._config_dict[
                    config_file_info["section"]] = {}
            GameConfigManager._config_dict[config_file_info["section"]][
                config_file[0].ctype] = config_file_info
            return config_file_info
        except NoResultFound, nf:
            Log.Write("[Error]Database Error: %s" % str(nf))
            return None
コード例 #9
0
 def HttpDownloadFile(configurl, writetopath):
     '''
     通过http获取配置
     :param configurl: 配置url
     :param writetopath: 写入本地的路径
     :return:
     '''
     Log.Write(configurl, writetopath)
     maxlen = len(configurl)
     for i in xrange(0, 10):
         fixurl = configurl[i % maxlen]
         Log.Write("oldurl", fixurl)
         fixurl = fixurl.replace("https", "http")
         Log.Write("fixurl", fixurl)
         url = URL(fixurl)
         try:
             http = HTTPClient.from_url(url)
             response = http.get(url.request_uri)
             CHUNK_SIZE = 1024 * 16  # 16KB
             data = response.read(CHUNK_SIZE)
             sumdata = data
             while data:
                 data = response.read(CHUNK_SIZE)
                 sumdata += data
             json.loads(sumdata)
             with open(writetopath, 'w') as f:
                 f.write(sumdata)
             Log.Write("success")
         except Exception, e:
             Log.Write("fail", i, e)
             gevent.sleep(1)
             continue
         return True
コード例 #10
0
ファイル: DBEngine.py プロジェクト: isoundy000/learn_python
def session_scope():
    """Provide a transactional scope around a series of operations."""
    session = DBEngine.NewSession()
    try:
        yield session
    except Exception, e:
        Log.Write(e)
        Log.Write(traceback.format_exc())
コード例 #11
0
ファイル: DBEngine.py プロジェクト: isoundy000/learn_python
 def DelGreenletSession(glet):
     session = DBEngine._commonsession
     try:
         session.commit()
         session.expunge_all()
     except Exception, e:
         Log.Write(e)
         Log.Write(traceback.format_exc())
コード例 #12
0
    def LoadUserData(userid):
        # 引入合服机制, 通过判断userid的组成, 判断什么模式
        # 正常模式 userid 为整数
        # 合服模式 userid 为userid_server
        result = None
        if isinstance(userid, int) or isinstance(userid, long):     # 正常模式
            with session_scope() as session:
                result = session.query(t_role).filter(t_role.uid == userid).first()
            if result is None:
                result = t_role()
                result.uid = userid
                result.createtime = GameData.sysTickTime
                CreateRole(result)
                DBEngine.Add(result)
                DBEngine.Update(result)
            result.__server_fix = None
        else:                                                       # 合服模式
            Log.Write("LoadUserData merge tip")
            userid_a = userid.split("_")
            if len(userid_a) < 2:
                raise TypeError("Merge Mode t_role error")

            userid_fix = int(userid_a[0])
            server_fix = int(userid_a[1])
            Log.Write(userid_fix, server_fix)
            with session_scope() as session:
                result = session.query(t_role).filter(
                    and_(
                        t_role.uid == userid_fix,
                        and_(t_role.id > (1000000 * server_fix),
                            (t_role.id < (1000000 * (server_fix + 1)))
                        )
                    )
                ).first()
            if result is None:
                result = t_role()
                result.uid = userid_fix
                result.createtime = GameData.sysTickTime
                CreateRole(result, server_fix)
                DBEngine.Add(result)
                DBEngine.Update(result)
            else:
                m = re.match(r"^S(\d+)-", result.name)      # S999999-xxxx
                server_test = None
                try:
                    xxxtuple = m.groups()
                    server_test = int(xxxtuple[0])              # 服务器编号999999
                    Log.Write("[TIP]server_test", server_test)
                except:
                    pass
                if server_test != server_fix:
                    result.name = u"S%d-" % server_fix + result.name
                    Log.Write("[TIP]name", result.name)
                    DBEngine.Update(result)
            result.__server_fix = server_fix
        Log.Write("LoadUserData", userid, result.id, result.__server_fix)
        result.createtime_utc = ConvertToUTCSeconds(result.createtime)
        return result
コード例 #13
0
ファイル: DBEngine.py プロジェクト: isoundy000/learn_python
def session_New():
    """Provide a transactional scope around a series of operations."""
    session = DBEngine._sessionmaker()
    try:
        yield session
        session.commit()
    except Exception, e:
        Log.Write(e)
        Log.Write(traceback.format_exc())
コード例 #14
0
    def _excute():
        appConfig = ConfigManager.Singleton()
        serverInfo = appConfig["Server"]["Info"]
        accServerConfig = appConfig["Server"]["Interface"]["AccServer2"]
        address = (accServerConfig["Address"]["ip"], int(accServerConfig["Address"]["port"]))
        magiccode = int(accServerConfig["MagicCode"], 16)
        seqCount = 0
        while True:
            sock = None
            while True:
                AccServerConnection2._status = False
                try:
                    Log.Write("try Acc Server 2 connection to %s:%s"%address)
                    sock = gevent.socket.create_connection(address)
                except l_socket.error, e:
                    Log.Write("%s" % str(e))
                    gevent.sleep(2)
                    continue

                AccServerConnection2._sock = sock
                AccServerConnection2._reconnectEvent.clear()
                Log.Write("Acc Server 2 connection to %s:%s" % address)
                ServerSocketManager.NewConnection(sock.fileno())

                taskData = TaskData(sock)
                taskData.setType(0)

                shake_acc = shaketoacc_pb2.ShakeToAcc()
                shake_acc.id = int(serverInfo["ID"])
                shake_acc.code = int(serverInfo["Code"], 16)
                shake_acc.port = 0

                taskData.setData(shake_acc.SerializePartialToString())
                shake_acc.Clear()

                ServerSocketManager.SendToConnection(sock.fileno(), taskData)

                try:
                    sockread = gevent.spawn(ServerSocketRead, sock, AccServerConnection2._reconnectEvent)
                    sockwrite = gevent.spawn(ServerSocketWrite, sock, AccServerConnection2._reconnectEvent)

                    # AccServerConnection2._reconnectEvent.wait(300)
                    AccServerConnection2._reconnectEvent.wait()

                    if not sockread.ready() or not sockread.successful():
                        sockread.kill()
                    if not sockwrite.ready() or not sockwrite.successful():
                        sockwrite.kill()

                finally:
                    AccServerConnection2._sock = None
                    ServerSocketManager.DelConnection(sock.fileno())
                    sock.close()
                    Log.Write("del Server connection to %s:%s" % address)
コード例 #15
0
ファイル: DBEngine.py プロジェクト: isoundy000/learn_python
 def UpdateCurrentSession():
     session = DBEngine._commonsession
     # Log.Write("UpdateCurrentSession", session)
     try:
         # session.flush()
         session.commit()
         session.expunge_all()
     except Exception, e:
         Log.Write(e)
         Log.Write(traceback.format_exc())
         session.close()
コード例 #16
0
def SyncResource2Refresh():
    '''
    同步前端资源版本号和非法的版本号
    :return:
    '''
    GameData.gWhiteTestResourceVersion = t_system_params.LoadParamBykey("WhiteTestResourceVersion")     # 前端资源热更白名单测试功能
    if GameData.gWhiteTestResourceVersion:
        GameData.gWhiteTestResourceVersion = int(GameData.gWhiteTestResourceVersion)
    Log.Write("GameData.gWhiteTestResourceVersion", GameData.gWhiteTestResourceVersion)
    GameData.gInvalidClientVersion = t_system_params.LoadParamBykey("InvalidClientVersion")
    if GameData.gInvalidClientVersion:
        GameData.gInvalidClientVersion = int(GameData.gInvalidClientVersion)
    Log.Write("GameData.gInvalidClientVersion", GameData.gInvalidClientVersion)
コード例 #17
0
ファイル: DBEngine.py プロジェクト: isoundy000/learn_python
def MakeNewSQL(t1, t2):
    '''
    删除上一次的记录表 备份数据表
    :param t1:
    :param t2:
    :return:
    '''
    try:
        b7day_name = t2 + RepoetTimeAnalysis.Refresh7d()
        ExcuteSQL("drop table if exists %s;" % b7day_name)
    except Exception, e:
        Log.Write(e)
        Log.Write(traceback.format_exc())
コード例 #18
0
 def RandomRoleIdFromTo(fromlv, tolv, exceptId=0):
     '''
     从某等级到某等级随机一个t_role.id
     :param fromlv: 从xxx等级
     :param tolv: 到xxx等级
     :param exceptId: 除去id
     :return:
     '''
     Log.Write("RandomRoleIdFromTo", fromlv, tolv)
     with session_scope() as session:
         result = session.query(t_role.id).filter(and_(t_role.level >= fromlv, t_role.level <= tolv)).filter(
             t_role.id != exceptId).order_by(func.random()).first()
         if result:
             Log.Write(result.id)
             return result.id
     return None
コード例 #19
0
 def SpawTickTimer(tick, func):
     '''
     创建一个循环时间的定时器
     :param tick: 秒数
     :param func: 函数
     :return:
     '''
     timerevent = gevent.event.Event()
     while True:
         timerevent.wait(tick)
         try:
             func()
         except Exception, e:
             Log.Write(e)
             Log.Write(traceback.format_exc())
         DBEngine.UpdateCurrentSession()
         Lock1.ClearCurrent()
コード例 #20
0
    def LoadCriticalFromDB(self):
        '''
        加载重要的数据从数据库中
        :return:
        '''
        Log.Write("[NewCacheM]LoadKeyFromDB", self["__tag_online"])
        if self["__tag_online"]:
            for key, table in UserDataPrepareMap.iteritems():
                self[key] = table.LoadRoleData(self.rid)
        else:
            for (key, table) in UserDataPrepareMap.iteritems():
                if key not in {"general", "equip", "soul"}:
                    self[key] = table.LoadRoleData(self.rid)

            self["general"] = {}
            self["equip"] = {}
            self["soul"] = {}

            general_ids = []
            equip_ids = []
            soul_ids = []

            slot = self["slot"]
            for i in xrange(1, 8):  # 主战
                gid = slot["s" + str(i)]
                if gid:
                    general_ids.append(gid)

            for i in xrange(1, 9):  # 助威
                gid = slot["c" + str(i)]
                if gid:
                    general_ids.append(gid)

            self["general"] = UserDataPrepareMap["general"].LoadInIds(
                general_ids)
            for general in self['general'].values():
                if general:
                    if general.rid == self.rid:
                        if general.weapon:
                            equip_ids.append(general.weapon)
                        if general.armor:
                            equip_ids.append(general.armor)
                        if general.accessory:
                            equip_ids.append(general.accessory)
                        if general.head:
                            equip_ids.append(general.head)
                        if general.treasure:
                            equip_ids.append(general.treasure)
                        if general.horse:
                            equip_ids.append(general.horse)

                        for i in xrange(1, 9):  # 武魂
                            sid = general["s" + str(i)]
                            if sid:
                                soul_ids.append(sid)

            self["equip"] = UserDataPrepareMap["equip"].LoadInIds(equip_ids)
            self["soul"] = UserDataPrepareMap["soul"].LoadInIds(soul_ids)
コード例 #21
0
    def Init():
        session = DBEngine.NewSession()
        try:
            resourceVersions = session.query(t_section_resource).\
                filter(t_section_resource.status == "excute").\
                order_by(t_section_resource.id.desc()).all()

            if resourceVersions is None:
                Log.Write("[Error]GameResource Error: No GameResource Excute")
                return False

            appConfig = ConfigManager.Singleton()

            GameResourceManager._resource_dict = {}

            for resourceVersion in resourceVersions:
                version = resourceVersion.id
                needrestart = resourceVersion.needrestart
                versionFiles = session.query(t_section_resource_files).filter(t_section_resource_files.r_id == version).all()

                if versionFiles is None:
                    continue

                versionFilesData = []

                for versionFile in versionFiles:
                    versionFileData = {
                        "version": version,
                        "id": versionFile.id,
                        "url": versionFile.url,
                        "filepath": versionFile.filepath,
                        "platform": versionFile.platform,
                        "length": versionFile.length,
                        "needrestart": needrestart,
                        "url2": versionFile.url2,
                        "url3": versionFile.url3,
                    }
                    versionFilesData.append(versionFileData)

                GameResourceManager._resource_dict[version] = versionFilesData
                # Log.Write("GameResourceManager", GameResourceManager._resource_dict)
            return True
        except NoResultFound, nf:
            Log.Write("[Error]Database Error: %s" % str(nf))
            return False
コード例 #22
0
def CreateGeneral(roleid, generalcid, general, roledata):
    '''
    武将的出生
    :param roleid:
    :param generalcid:
    :param general:
    :param roledata:
    :return:
    '''
    general.cid = generalcid
    general.rid = roleid
    general.level1 = 1
    general.level2 = 0
    general.level3 = 0
    general.level4 = 0
    general.exp = 0
    general.hp_foster = 0
    general.atk_foster = 0
    general.def_foster = 0
    general.Init()
    generalConfig = general.config
    general.bhp = generalConfig["hp"]
    general.batk = generalConfig["atk"]
    general.bdef = generalConfig["def"]
    general.bspeed = generalConfig["speed"]
    general.bcritical = generalConfig["critical"]
    general.bdodge = generalConfig["dodge"]
    general.bparry = generalConfig["parry"]

    general_train = GameConfigManager.Data()["general_train"]
    tag = "train" + str(generalConfig["basic"])
    if tag in general_train["1"]:
        general.potential = general_train["1"][tag]
    else:
        general.potential = 0
    general.skillexp = 0
    general.skilllevel = 0

    # general.Init()

    try:
        general.role_obj = roledata["role"]
    except Exception, e:
        Log.Write(e)
        Log.Write(traceback.format_exc())
コード例 #23
0
def Refresh():
    '''
    拼接当前的年月日时间
    :return:
    '''
    time_str_list = str(datetime.now().date()).split("-")
    time_str = time_str_list[0] + "_" + time_str_list[1] + "_" + time_str_list[2]
    Log.Write("[Report_time_str]", time_str)
    return time_str
コード例 #24
0
 def _work():
     while True:
         try:
             taskData = TaskResponseQueueManager.Pop()
             # Log.Write("TaskResponseQueueDispath", taskData)
             if taskData.From() == "user":
                 pass
         except Exception, e:
             Log.Write()
コード例 #25
0
 def SpawOneTimer(time, func, param):
     '''
     创建一个带参数的定时器
     :param time:
     :param func:
     :param param:
     :return:
     '''
     timerevent = gevent.event.Event()
     timerevent.wait(time)
     try:
         if param:
             func(param)
         else:
             func()
     except Exception, e:
         Log.Write(e)
         Log.Write(traceback.format_exc())
コード例 #26
0
 def DayHourTickProcess():
     '''
     检测执行函数 整点
     :return:
     '''
     Log.Write("DayHourTickProcess")
     nowtime1 = datetime.now()
     for k, v in PerDayHourConfig.items():  # 每小时运行一次
         nowhour = nowtime1.hour % 24
         k = k % 24
         if k == nowhour:
             # print("[DayHour] Hour: %d" % (k))
             for func in v:
                 try:
                     func()
                 except Exception, e:
                     Log.Write(e)
                     Log.Write(traceback.format_exc())
コード例 #27
0
ファイル: DBEngine.py プロジェクト: isoundy000/learn_python
 def DelGreenletSession(glet):
     '''
     删除携程的session
     :param glet:
     :return:
     '''
     session = DBEngine._commonsession
     try:
         session.commit()
         session.expunge_all()
     except Exception, e:
         Log.Write(e)
         Log.Write(traceback.format_exc())
         try:
             session.expunge_all()
         except Exception, e:
             Log.Write(e)
             Log.Write(traceback.format_exc())
コード例 #28
0
 def CloseConnection(sockfileno):
     '''
     关闭用户的连接
     :param sockfileno:
     :return:
     '''
     Log.Write("CloseConnection", sockfileno)
     Lock2(UserSocketManager._lock)
     if UserSocketManager._dict.has_key(sockfileno):
         UserSocketManager._dict[sockfileno]["close"].set()
コード例 #29
0
 def Status():
     '''
     统计在线的sock和玩家
     :return:
     '''
     Lock2(UserSocketManager._lock)
     c = len(UserSocketManager._dict)
     u = len(UserSocketManager._id)
     Log.Write("-status-usockcount-", c, u)
     t_log_connections.Now(c, u)
コード例 #30
0
ファイル: DBEngine.py プロジェクト: isoundy000/learn_python
    def _init():
        configmanager = ConfigManager.Singleton()
        dbconfig = configmanager["Server"]["DataBase"]["DB1"]
        Log.Write(dbconfig)
        unix_socket = None

        if dbconfig["echo"] == "true":
            bEngineEcho = True
        else:
            bEngineEcho = False

        if "unix_socket" in dbconfig and dbconfig["unix_socket"]:
            unix_socket = dbconfig["unix_socket"]
        if unix_socket:
            conn_str = "mysql://%s:%s@/%s?%s" % (
                dbconfig["user"], dbconfig["password"], dbconfig["db"],
                dbconfig["param"])
            DBEngine._engine = create_engine(
                conn_str,
                echo=bEngineEcho,
                pool_size=100,
                max_overflow=100,
                pool_recycle=10 * 60,
                connect_args={'unix_socket': '%s' % (unix_socket, )})
        else:
            conn_str = "mysql://%s:%s@%s:%s/%s?%s" % (
                dbconfig["user"], dbconfig["password"], dbconfig["host"],
                dbconfig["port"], dbconfig["db"], dbconfig["param"])
            DBEngine._engine = create_engine(conn_str,
                                             echo=bEngineEcho,
                                             pool_size=100,
                                             max_overflow=100,
                                             pool_recycle=10 * 60)

        Log.Write("conn_str", conn_str)
        # DBEngine._engine = create_engine(conn_str, echo=bEngineEcho,
        #                                  pool_size=100, max_overflow=100, pool_recycle=10 * 60, connect_args={'unix_socket': '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock'})

        try:
            DBEngine._engine.connect()
        except OperationalError, e:
            Log.Write(e)
            return False