| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| ##@package GameConfig  | 
| # ÅäÖÃÎļþ¶ÁÈ¡  | 
| #  | 
| # @author wdb  | 
| # @date 2012-11-02  | 
| # @version 1.3  | 
| #  | 
| # @note  | 
| # @change: "2012-11-21 12:00" wdb ¿ç·þÈü·þÎñÆ÷ÐÅÏ¢  | 
| # @change: "2012-11-29 10:30" jiang ÐÞ¸ÄMergeWarMapIDĬÈϵĵØÍ¼ID  | 
| # @change: "2012-11-30 11:00" wdb Ôö¼ÓÖØ¶ÁÅäÖñêÖ¾  | 
| #---------------------------------------------------------------------  | 
| """Version = 2012-11-30 11:00"""  | 
| #---------------------------------------------------------------------  | 
| import traceback  | 
| import ConfigParser  | 
| import os  | 
| import GameWorld  | 
| import ChConfig  | 
| import ShareDefine  | 
| import ReadChConfig  | 
| #---------------------------------------------------------------------  | 
|   | 
| #ÅäÖÃÏî  | 
| ConfigSet ={            | 
| "MergeWarMapID":[173, "config"],   # ¿ç·þÕ½µØÍ¼id  | 
| "IsMergeWarServe":[0, "config"],   # ±¾·þÊÇ·ñʱ¿ç·þ·þÎñÆ÷  | 
| "MergeServerIP":["", "config"],   # Íò¹ú·þÎñÆ÷IP  | 
| "MergeServerPort":[19006, "config"],   # ±¾·þÊÇ·ñʱ¿ç·þ·þÎñÆ÷  | 
| }  | 
|                    | 
| ## ¶ÁÈ¡Åä±í  | 
| # @param None  | 
| # @return  | 
| def ReadConfig():  | 
|     global g_config  | 
|       | 
|     try:  | 
|         g_config = {}  | 
|         configFile = ConfigParser.ConfigParser()  | 
|           | 
|         #¶ÁÈ¡Êý¾Ý¿âÅäÖÃÎļþconfig.ini  | 
|         configPath = os.path.join(ChConfig.GameServerPath, 'config.ini')  | 
|         if os.path.isfile(configPath):  | 
|             configFile.read(configPath)  | 
|           | 
|         # »ñµÃÅäÖÃÖµ  | 
|         for key, value in ConfigSet.items():   | 
|             value = ReadCongfigValue(configFile, value[1], key, value[0])  | 
|               | 
|             if value == None:  | 
|                 return False  | 
|             g_config[key] = value  | 
|   | 
|     except:  | 
|         GameWorld.ErrLog('%s'%traceback.format_exc())  | 
|         return False      | 
|     return True  | 
|   | 
|   | 
| ## »ñµÃÅäÖÃÖµ  | 
| # @param config ÅäÖÃÎļþ  | 
| # @param secname ¶ÎÂäÃû  | 
| # @param keyname ¼üÃû  | 
| # @param defvalue Ä¬ÈÏÖµ  | 
| # @return  | 
| def ReadCongfigValue(config, secname, keyname, defvalue):  | 
|     try:  | 
|         if config.has_option(secname, keyname):  | 
|             value = config.get(secname, keyname)  | 
|   | 
|             if type(defvalue) == bool:  | 
|                 value = type(defvalue)(int(value))  | 
|             else:  | 
|                 value = type(defvalue)(value)  | 
|         else:  | 
|             return defvalue    | 
|     except:  | 
|         msg = 'config secname = %s, keyname = %s, defvalue = %s\n%s'%(secname, keyname, defvalue,  | 
|                                                                        traceback.format_exc())  | 
|         GameWorld.ErrLog(msg)  | 
|         return None   | 
|     return value  | 
|   | 
|   | 
| # ÅäÖÃ×Öµä  | 
| g_config = None  | 
|   | 
| ## ³õʼ»¯ÅäÖà  | 
| # @param None  | 
| # @return  | 
| def GetConfig():  | 
|     global g_config  | 
|   | 
|     #ÊÇ·ñÖØ¶ÁËùÓеÄÅäÖÃ±í  | 
|     if GameWorld.GetGameWorld().GetDictByKey(ShareDefine.Def_Notify_WorldKey_ReloadConfig):  | 
|         ReadChConfig.ClearAllConfig()  | 
|               | 
|     elif g_config != None:  | 
|         return g_config  | 
|                   | 
|     if not ReadConfig():  | 
|         GameWorld.ErrLog("Init config failed.")  | 
|     return g_config  | 
|   | 
|   | 
| ## É¾³ýÅäÖà  | 
| # @param None  | 
| # @return  | 
| def ClearConfig():  | 
|     global g_config  | 
|       | 
|     g_config = None  | 
|     return  | 
|   | 
|                  |