#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#---------------------------------------------------------------------
|
#
|
#---------------------------------------------------------------------
|
##@package ReadCaptchaImage
|
# @todo: ¼ÓÔØÍ¼ÐÎÑéÖ¤Âë
|
#
|
# @author: panwei
|
# @date 2011-05-31 21:30
|
# @version 1.5
|
#
|
# @note:
|
# @change: "2011-06-05 01:20" Alee ÐÞ¸ÄΪ¶àÎļþ¶ÁÈ¡£¬²»´æÄÚ´æÖÐ
|
# @change: "2011-06-07 11:10" Alee ·µ»ØÖµÍ³Ò»
|
# @change: "2011-06-17 11:00" Alee Ìí¼ÓÖØ¶Á¹¦ÄÜ
|
# @change: "2011-06-23 13:40" Alee Ëæ»úÉú³ÉÑéÖ¤ÂëÖØÔØ
|
# @change: "2011-07-11 18:00" Alee ÐÞ¸´È«¾Ö²ÎÊý´«²ÎÎÞ·¨±ä¸üµÄÎÊÌâ
|
#---------------------------------------------------------------------
|
"""Version = 2011-07-11 18:00"""
|
#---------------------------------------------------------------------
|
import ChConfig
|
import GameWorld
|
import os
|
import random
|
import ShareDefine
|
import ReadChConfig
|
#---------------------------------------------------------------------
|
#È«¾Ö±äÁ¿
|
g_captchaImageTexDict = {}
|
g_captchaImageJpegDict = {}
|
|
#Ëæ»úÑéÖ¤Â뿪¹Ø
|
Def_Random_Captcha_Open = 1
|
#---------------------------------------------------------------------
|
#È«¾Ö³£Á¿
|
Def_FilePath = ChConfig.GetAppPath() + "\\" + "CaptchaImage\\"
|
|
#---------------------------------------------------------------------
|
##»ñÈ¡ÑéÖ¤Âë
|
# @param ÎÞ²ÎÊý
|
# @return ÑéÖ¤Âë´ð°¸, ÑéÖ¤ÂëÄÚÈÝ
|
# @remarks
|
def GetCaptchaImage():
|
global g_captchaImageTexDict
|
global g_captchaImageJpegDict
|
|
#¼ì²éËæ»úÑéÖ¤Â뿪¹Ø
|
if ReadChConfig.GetEvalChConfig("Random_Captcha_Open") == Def_Random_Captcha_Open:
|
captchaName, captchaStream, g_captchaImageJpegDict = \
|
GetCaptchaImageByExt(ShareDefine.Def_Notify_WorldKey_ReloadJpegCaptcha,
|
'jpegCaptchaPath.txt', g_captchaImageJpegDict)
|
|
#³É¹¦·µ»Ø
|
if captchaName != 0:
|
return captchaName, captchaStream
|
|
|
#Ëæ»úʧ°ÜÔò¶ÁÈ¡¹Ì¶¨tex
|
captchaName, captchaStream, g_captchaImageTexDict = \
|
GetCaptchaImageByExt(ShareDefine.Def_Notify_WorldKey_ReloadTexCaptcha,
|
'texCaptchaPath.txt', g_captchaImageTexDict)
|
|
return captchaName, captchaStream
|
|
##¸ù¾ÝÖ¸¶¨µÄÎļþ»ñÈ¡ÑéÖ¤Âë
|
# @param reloadKey ÖØ¶Á×Öµä
|
# @param fileName Ö¸¶¨Îļþ
|
# @param gameDict ´æ´¢ÑéÖ¤Âë·¾¶
|
# @return ÑéÖ¤Âë´ð°¸, ÑéÖ¤ÂëÄÚÈÝ
|
def GetCaptchaImageByExt(reloadKey, fileName, gameDict):
|
if GameWorld.GetGameWorld().GetGameWorldDictByKey(reloadKey):
|
#ÖØ¶Á
|
gameDict = {}
|
#¹Ø±Õ×Öµä
|
GameWorld.GetGameWorld().SetGameWorldDict(reloadKey, 0)
|
|
if len(gameDict) == 0:
|
#ÖØÐ¼ÓÔØÑéÖ¤Âë
|
gameDict = ReloadCaptchaImageDict(fileName, gameDict)
|
|
if len(gameDict) != 0:
|
#Ëæ»ú¸øÒ»¸ö
|
captchaInfo = random.choice(gameDict.items())
|
|
if len(captchaInfo) != 2:
|
GameWorld.ErrLog('Ëæ»ú³öÒ»¸ö´íÎóµÄͼÐÎÑéÖ¤Âë %s'%str(captchaInfo))
|
return 0, '', gameDict
|
|
fileName, fileStream = GetParseCaptchaInfo(captchaInfo)
|
|
return fileName, fileStream, gameDict
|
|
GameWorld.ErrLog('GetCaptchaImage Error, Def_FilePath = %s%s'%(Def_FilePath, fileName))
|
return 0, '', gameDict
|
|
|
##ÖØÐ¼ÓÔØÑéÖ¤Âë
|
# @param ÎÞ²ÎÊý
|
# @return ×Öµä
|
def ReloadCaptchaImageDict(fileName, gameDict):
|
filePath = Def_FilePath + fileName
|
if not os.path.isfile(filePath):
|
return
|
|
fileIns = open(filePath, 'r')
|
|
for imageStr in fileIns.readlines():
|
imageInfo = imageStr.split()
|
|
if len(imageInfo) != 2:
|
continue
|
|
gameDict.update({imageInfo[0].strip():imageInfo[1].strip()})
|
|
GameWorld.Log('ReloadCaptchaImage %s'%fileName)
|
|
return gameDict
|
|
##»ñµÃÎļþÃûºÍ¶þ½øÖÆÎļþÁ÷
|
# @param captchaInfo È¡µ½µÄ×Öµä¶Ô
|
# @return ÎļþÃûºÍ¶þ½øÖÆÎļþÁ÷
|
def GetParseCaptchaInfo(captchaInfo):
|
fileName = captchaInfo[0].split('_')[-1]
|
|
openfilePath = Def_FilePath + captchaInfo[1]
|
try:
|
openfile = open(openfilePath, 'rb')
|
except:
|
GameWorld.ErrLog('Ëæ»ú³öÒ»¸ö´íÎóµÄͼÐÎÑéÖ¤Âë·¾¶ %s'%str(openfilePath))
|
return 0, ''
|
|
return fileName, openfile.read()
|
|
###ÖØÐÂÉèÖÃͼÐÎÑéÖ¤Âë
|
## @param ÎÞ
|
## @return ÎÞ
|
#def ReSetCaptcha():
|
# #¿ª¹âÑéÖ¤
|
# if ReadChConfig.GetEvalChConfig("Random_Captcha_Open") != Def_Random_Captcha_Open:
|
# return
|
#
|
# curHour = GameWorld.GetCurrentTime().hour
|
#
|
# #ͼƬºÍÎļþÉú³ÉÖ»Ò»¸öµØÍ¼´¦Àí£¨¾©³Ç£©
|
# if GameWorld.GetMap().GetMapID() == ChConfig.Def_MapID_JingCheng \
|
# and GameWorld.GetGameWorld().GetCopyMapID() == 0:
|
#
|
# if curHour == 3:
|
# #5µãÖØÐÂÉú³ÉͼƬ
|
# os.system("start %s"%(Def_FilePath + "VerificationCodePic\\Start.bat"))
|
#
|
# elif curHour == 4:
|
# #6µãÖØÐÂÉú³ÉÎļþ¼Ç¼
|
# os.system("start %s"%(Def_FilePath + "jpeg.bat"))
|
#
|
# if curHour == 5:
|
# #7µãÖØ¶ÁÎļþ¼ÓÔØÖÁÓÎÏ·ÖÐ
|
# GameWorld.GetGameWorld().SetGameWorldDict(ShareDefine.Def_Notify_WorldKey_ReloadJpegCaptcha, 1)
|
#
|
# return
|
|
|
|