# -*- coding: GBK -*-  
 | 
# ¶ÁÈ¡µØÍ¼ÇÐͼµã  
 | 
# author: Alee  
 | 
# Date: 2011.9.1  
 | 
# history:  2011.9.1     Created  
 | 
  
 | 
import string  
 | 
import CommFunc  
 | 
import binascii  
 | 
import os  
 | 
import logging  
 | 
from ConfigurationReader import ConfigIniReader  
 | 
  
 | 
DUMP_TRANSPORT = False  
 | 
  
 | 
  
 | 
class  tagTransportRefresh:  
 | 
    RefreshID = 0       # (DWORD RefreshID )  
 | 
    MapID = 0       # (WORD MapID )  
 | 
    PosX = 0        # (WORD PosX )     //×ø±ê  
 | 
    PosY = 0        # (WORD PosY )  
 | 
    Range = 0       # (WORD Range )     //·¶Î§  
 | 
    TargetMapID = 0     # (WORD TargetMapID )     //Ä¿±êµØÍ¼ID  
 | 
    TargetPosX = 0      # (WORD TargetPosX )     //Ä¿±ê×ø±ê  
 | 
    TargetPosY = 0      # (WORD TargetPosY )  
 | 
    count = 8  
 | 
    def __init__(self):  
 | 
        self.Clear()  
 | 
  
 | 
        return  
 | 
    def ReadData(self, _lpData, _pos=0, _Len=0):  
 | 
        self.Clear()  
 | 
  
 | 
        self.RefreshID, _pos = CommFunc.ReadDWORD(_lpData, _pos)  
 | 
        self.MapID, _pos = CommFunc.ReadWORD(_lpData, _pos)  
 | 
        self.PosX, _pos = CommFunc.ReadWORD(_lpData, _pos)  
 | 
        self.PosY, _pos = CommFunc.ReadWORD(_lpData, _pos)  
 | 
        self.Range, _pos = CommFunc.ReadWORD(_lpData, _pos)  
 | 
        self.TargetMapID, _pos = CommFunc.ReadWORD(_lpData, _pos)  
 | 
        self.TargetPosX, _pos = CommFunc.ReadWORD(_lpData, _pos)  
 | 
        self.TargetPosY, _pos = CommFunc.ReadWORD(_lpData, _pos)  
 | 
  
 | 
        if _Len != 0 and _pos != _Len:  
 | 
            logging.error("Error in tagTransportRefresh : %s "% binascii.b2a_hex(_lpData))  
 | 
            return 0  
 | 
        return _pos  
 | 
  
 | 
    def Clear(self):  
 | 
        self.RefreshID = 0  
 | 
        self.MapID = 0  
 | 
        self.PosX = 0  
 | 
        self.PosY = 0  
 | 
        self.Range = 0  
 | 
        self.TargetMapID = 0  
 | 
        self.TargetPosX = 0  
 | 
        self.TargetPosY = 0  
 | 
        self.count = 0  
 | 
        return  
 | 
  
 | 
    def GetLength(self):  
 | 
        length = 0  
 | 
        length += 4  
 | 
        length += 2  
 | 
        length += 2  
 | 
        length += 2  
 | 
        length += 2  
 | 
        length += 2  
 | 
        length += 2  
 | 
        length += 2  
 | 
        return  length;  
 | 
  
 | 
    def GetBuffer(self):  
 | 
        data = ''  
 | 
        data = CommFunc.WriteDWORD(data, self.RefreshID)  
 | 
        data = CommFunc.WriteWORD(data, self.MapID)  
 | 
        data = CommFunc.WriteWORD(data, self.PosX)  
 | 
        data = CommFunc.WriteWORD(data, self.PosY)  
 | 
        data = CommFunc.WriteWORD(data, self.Range)  
 | 
        data = CommFunc.WriteWORD(data, self.TargetMapID)  
 | 
        data = CommFunc.WriteWORD(data, self.TargetPosX)  
 | 
        data = CommFunc.WriteWORD(data, self.TargetPosY)  
 | 
        return data  
 | 
  
 | 
    def ReadFromList(self, curList):  
 | 
        self.RefreshID = CommFunc.ToIntDef(curList[0])  
 | 
        self.MapID = CommFunc.ToIntDef(curList[1])  
 | 
        self.PosX = CommFunc.ToIntDef(curList[2])  
 | 
        self.PosY = CommFunc.ToIntDef(curList[3])  
 | 
        self.Range = CommFunc.ToIntDef(curList[4])  
 | 
        self.TargetMapID = CommFunc.ToIntDef(curList[5])  
 | 
        self.TargetPosX = CommFunc.ToIntDef(curList[6])  
 | 
        self.TargetPosY = CommFunc.ToIntDef(curList[7])  
 | 
        self.count = 8  
 | 
        return  
 | 
  
 | 
    def __str__(self):  
 | 
        DumpString = "Çл»µã¶¨Òå#tagTransportRefresh:"\  
 | 
                            "RefreshID:%d,"\  
 | 
                            "MapID:%d,"\  
 | 
                            "PosX:%d,"\  
 | 
                            "PosY:%d,"\  
 | 
                            "Range:%d,"\  
 | 
                            "TargetMapID:%d,"\  
 | 
                            "TargetPosX:%d,"\  
 | 
                            "TargetPosY:%d"\  
 | 
                            %( \  
 | 
                            self.RefreshID,\  
 | 
                            self.MapID,\  
 | 
                            self.PosX,\  
 | 
                            self.PosY,\  
 | 
                            self.Range,\  
 | 
                            self.TargetMapID,\  
 | 
                            self.TargetPosX,\  
 | 
                            self.TargetPosY\  
 | 
                            )  
 | 
  
 | 
        return  DumpString  
 | 
      
 | 
      
 | 
class TransportDataReader():  
 | 
    def __init__(self, PyBaseRoot, mapDataPath ):  
 | 
        self.__AllTransportData = {}  
 | 
          
 | 
        mapTransportPath = os.path.join( PyBaseRoot, mapDataPath,'maptransport.txt' )  
 | 
        f = file(mapTransportPath)  
 | 
        lines = f.readlines()  
 | 
        for line in lines:  
 | 
            if line.strip() == '':  
 | 
                continue  
 | 
            items = line.split('\t')  
 | 
            curData = tagTransportRefresh()  
 | 
            if len(items) != 8:  
 | 
                continue  
 | 
            curData.ReadFromList(items)  
 | 
            if self.__AllTransportData.has_key(curData.MapID) == False:  
 | 
                self.__AllTransportData[curData.MapID] = []  
 | 
            self.__AllTransportData[curData.MapID].append(curData)  
 | 
          
 | 
    def GetAllTransportData(self):  
 | 
        return self.__AllTransportData  
 | 
      
 | 
    def GetTransportDataByMapID(self, mapID):  
 | 
        if not self.__AllTransportData.has_key( mapID ):  
 | 
            return []  
 | 
        else:  
 | 
            return self.__AllTransportData[mapID]  
 | 
          
 | 
    def __str__(self):  
 | 
        data = "TransportData Dump:\n"  
 | 
        for mapID in self.__AllTransportData.keys():  
 | 
            for transData in self.__AllTransportData[mapID]:  
 | 
                data += str(transData)  
 | 
                data += "\n"  
 | 
        return data  
 | 
      
 | 
      
 | 
__gTransportData = None  
 | 
  
 | 
def ReadTransportData( PyBaseRoot ):  
 | 
    global __gTransportData  
 | 
    if not __gTransportData:  
 | 
        __gTransportData =  TransportDataReader( PyBaseRoot,\  
 | 
                         ConfigIniReader.GetConfig().GetMapFilePath())  
 | 
        if DUMP_TRANSPORT:  
 | 
            logging.debug( "%s", str(__gTransportData) )  
 | 
          
 | 
          
 | 
def GetTransportData():  
 | 
    global __gTransportData  
 | 
    return __gTransportData  
 | 
     
 |