using UnityEngine; 
 | 
using System; 
 | 
using System.Collections.Generic; 
 | 
  
 | 
public class PackageRegedit 
 | 
{ 
 | 
    #region 主工程原生的封包 
 | 
    static object lockojb1 = new object(); 
 | 
    static Dictionary<ushort, Type> m_PackageTable = new Dictionary<ushort, Type>(); 
 | 
    static Dictionary<ushort, Type> packageTable 
 | 
    { 
 | 
        get 
 | 
        { 
 | 
            lock (lockojb1) { return m_PackageTable; } 
 | 
        } 
 | 
    } 
 | 
    static object lockojb2 = new object(); 
 | 
    static Dictionary<ushort, DtcBasic> m_PackToBusinessTable = new Dictionary<ushort, DtcBasic>(); 
 | 
    static Dictionary<ushort, DtcBasic> packToBusinessTable 
 | 
    { 
 | 
        get 
 | 
        { 
 | 
            lock (lockojb2) { return m_PackToBusinessTable; } 
 | 
        } 
 | 
    } 
 | 
    #endregion 
 | 
  
 | 
    public static void Init() 
 | 
    { 
 | 
        // 登记相应的数据体及对应的数据转逻辑类(去重后) 
 | 
        Register(typeof(H0102_tagCDBPlayer), typeof(DTC0102_tagCDBPlayer)); 
 | 
        Register(typeof(HA004_tagServerDateTime), typeof(DTCA004_tagServerDateTime)); 
 | 
        Register(typeof(HA005_tagOpenServerDay), typeof(DTCA005_tagOpenServerDay)); 
 | 
        Register(typeof(H0403_tagPlayerLoginLoadOK), typeof(DTC0403_tagPlayerLoginLoadOK)); 
 | 
        Register(typeof(H0101_tagServerPrepared), typeof(DTC0101_tagServerPrepared)); 
 | 
        Register(typeof(H0104_tagServerDisconnect), typeof(DTC0104_tagServerDisconnect)); 
 | 
        Register(typeof(H0724_tagRolePackCanUseCount), typeof(DTC0724_tagRolePackCanUseCount)); 
 | 
        Register(typeof(H0725_tagRolePackRefreshEx), typeof(DTC0725_tagRolePackRefreshEx)); 
 | 
        Register(typeof(H0704_tagRolePackRefresh), typeof(DTC0704_tagRolePackRefresh)); 
 | 
        Register(typeof(H0706_tagUseItemSuccess), typeof(DTC0706_tagUseItemSuccess)); 
 | 
        Register(typeof(H0707_tagItemCountRefresh), typeof(DTC0707_tagItemCountRefresh)); 
 | 
        Register(typeof(H0709_tagClearItem), typeof(DTC0709_tagClearItem)); 
 | 
        Register(typeof(H0711_tagClearItemPack), typeof(DTC0711_tagClearItemPack)); 
 | 
        Register(typeof(HA204_tagMCVPackRefresh), typeof(DTCA204_tagMCVPackRefresh)); 
 | 
        Register(typeof(HA205_tagMCVPackClear), typeof(DTCA205_tagMCVPackClear)); 
 | 
        Register(typeof(HA206_tagMCAutoItemCountRefresh), typeof(DTCA206_tagMCAutoItemCountRefresh)); 
 | 
        Register(typeof(HA710_tagMCGuideState), typeof(DTCA710_tagMCGuideState)); 
 | 
        Register(typeof(H0418_tagObjInfoRefresh), typeof(DTC0418_tagObjInfoRefresh)); 
 | 
        Register(typeof(HA709_tagObjInfoListRefresh), typeof(DTCA709_tagObjInfoListRefresh)); 
 | 
        Register(typeof(H0113_tagServerHeart), typeof(DTC0113_tagServerHeart)); 
 | 
        Register(typeof(H0111_tagOnlineReply), typeof(DTC0111_tagOnlineReply)); 
 | 
        Register(typeof(H0608_tagNPCDie), typeof(DTC0608_tagNPCDie)); 
 | 
        Register(typeof(H0612_tagClearObjBuff), typeof(DTC0612_tagClearObjBuff)); 
 | 
        Register(typeof(HA110_tagMCCoinToGoldCountInfo), typeof(DTCA110_tagMCCoinToGoldCountInfo)); 
 | 
        Register(typeof(HA008_tagGCPlayerRecInfo), typeof(DTCA008_tagGCPlayerRecInfo)); 
 | 
        Register(typeof(HAA02_tagSCFirstChargeInfo), typeof(DTCAA02_tagSCFirstChargeInfo)); 
 | 
        Register(typeof(HAA03_tagMCDailyPackBuyGiftInfo), typeof(DTCAA03_tagMCDailyPackBuyGiftInfo)); 
 | 
        Register(typeof(HA302_tagMCFuncOpenStateList), typeof(DTCA302_tagMCFuncOpenStateList)); 
 | 
        Register(typeof(HA320_tagSCFBInfoList), typeof(DTCA320_tagSCFBInfoList)); 
 | 
        Register(typeof(H0212_tagNotifyCode), typeof(DTC0212_tagNotifyCode)); 
 | 
        Register(typeof(H0316_tagPackResetOK), typeof(DTC0316_tagPackResetOK)); 
 | 
        Register(typeof(HA3BD_tagMCBuyEnterInfo), typeof(DTCA3BD_tagMCBuyEnterInfo)); 
 | 
        Register(typeof(HA350_tagMCTreasureResult), typeof(DTCA350_tagMCTreasureResult)); 
 | 
        Register(typeof(HA351_tagMCTreasureInfo), typeof(DTCA351_tagMCTreasureInfo)); 
 | 
        Register(typeof(HA362_tagMCMailList), typeof(DTCA362_tagMCMailList)); 
 | 
        Register(typeof(HA363_tagMCMailStateChange), typeof(DTCA363_tagMCMailStateChange)); 
 | 
        Register(typeof(HA501_tagMCNotifyRequestJoinFamilyInfo), typeof(DTCA501_tagMCNotifyRequestJoinFamilyInfo)); 
 | 
        Register(typeof(HA705_tagSCQueryPlayerCacheResult), typeof(DTCA705_tagSCQueryPlayerCacheResult)); 
 | 
        Register(typeof(HA801_tagMCGiveAwardInfo), typeof(DTCA801_tagMCGiveAwardInfo)); 
 | 
        Register(typeof(HA802_tagMCShopItemDayBuyCntInfo), typeof(DTCA802_tagMCShopItemDayBuyCntInfo)); 
 | 
        Register(typeof(HA809_tagMCItemDayUseCntInfo), typeof(DTCA809_tagMCItemDayUseCntInfo)); 
 | 
        Register(typeof(HA811_tagMCShoppingResult), typeof(DTCA811_tagMCShoppingResult)); 
 | 
        Register(typeof(HA721_tagMCEmojiPackInfo), typeof(DTCA721_tagMCEmojiPackInfo)); 
 | 
        Register(typeof(HB117_tagMCFaceInfo), typeof(DTCB117_tagMCFaceInfo)); 
 | 
        Register(typeof(HB118_tagMCFacePicInfo), typeof(DTCB118_tagMCFacePicInfo)); 
 | 
        Register(typeof(HB120_tagMCZhanlingInfo), typeof(DTCB120_tagMCZhanlingInfo)); 
 | 
        Register(typeof(HA311_tagMCSyncRealmInfo), typeof(DTCA311_tagMCSyncRealmInfo)); 
 | 
        Register(typeof(HB110_tagMCTaskInfo), typeof(DTCB110_tagMCTaskInfo)); 
 | 
        Register(typeof(HA921_tagUpdatePlayerNameResult), typeof(DTCA921_tagUpdatePlayerNameResult)); 
 | 
        Register(typeof(H3202_tagServerResponse), typeof(DTC3202_tagServerResponse)); 
 | 
        Register(typeof(HA130_tagMCViewBillboardRet), typeof(DTCA130_tagMCViewBillboardRet)); 
 | 
        Register(typeof(HB420_tagMCTurnFightState), typeof(DTCB420_tagMCTurnFightState)); 
 | 
        Register(typeof(HB421_tagMCTurnFightObjAction), typeof(DTCB421_tagMCTurnFightObjAction)); 
 | 
        Register(typeof(HB422_tagMCTurnFightObjDead), typeof(DTCB422_tagMCTurnFightObjDead)); 
 | 
        Register(typeof(HB423_tagMCTurnFightObjReborn), typeof(DTCB423_tagMCTurnFightObjReborn)); 
 | 
        Register(typeof(HB424_tagSCTurnFightInit), typeof(DTCB424_tagSCTurnFightInit)); 
 | 
        Register(typeof(HB425_tagSCTurnFightReportSign), typeof(DTCB425_tagSCTurnFightReportSign)); 
 | 
        Register(typeof(HB426_tagSCTurnFightTag), typeof(DTCB426_tagSCTurnFightTag)); 
 | 
        Register(typeof(HB427_tagSCUseSkill), typeof(DTCB427_tagSCUseSkill)); 
 | 
        Register(typeof(HB428_tagSCBuffRefresh), typeof(DTCB428_tagSCBuffRefresh)); 
 | 
        Register(typeof(HB429_tagSCBuffDel), typeof(DTCB429_tagSCBuffDel)); 
 | 
        Register(typeof(HB430_tagSCTurnFightReport), typeof(DTCB430_tagSCTurnFightReport)); 
 | 
        Register(typeof(H0407_tagNPCDisappear), typeof(DTC0407_tagNPCDisappear)); 
 | 
        Register(typeof(HB418_tagSCObjPropertyRefreshView), typeof(DTCB418_tagSCObjPropertyRefreshView)); 
 | 
        Register(typeof(HB124_tagSCLineupInfo), typeof(DTCB124_tagSCLineupInfo)); 
 | 
        Register(typeof(HA207_tagSCPackBuyInfo), typeof(DTCA207_tagSCPackBuyInfo)); 
 | 
        Register(typeof(H0722_tagItemDeadLockRefresh), typeof(DTC0722_tagItemDeadLockRefresh)); 
 | 
        Register(typeof(HB125_tagSCPlayerHeroInfo), typeof(DTCB125_tagSCPlayerHeroInfo)); 
 | 
        Register(typeof(HA814_tagMCMakeItemAnswer), typeof(DTCA814_tagMCMakeItemAnswer)); 
 | 
        Register(typeof(HB122_tagSCHeroInfo), typeof(DTCB122_tagSCHeroInfo)); 
 | 
        Register(typeof(HA338_tagMCInvestInfo), typeof(DTCA338_tagMCInvestInfo)); 
 | 
        Register(typeof(HB121_tagMCTreeInfo), typeof(DTCB121_tagMCTreeInfo)); 
 | 
        Register(typeof(HA720_tagMCCreateRoleAwardState), typeof(DTCA720_tagMCCreateRoleAwardState)); 
 | 
        Register(typeof(HB405_tagMCAddExp), typeof(DTCB405_tagMCAddExp)); 
 | 
        Register(typeof(HB123_tagSCDropBootyInfo), typeof(DTCB123_tagSCDropBootyInfo)); 
 | 
        Register(typeof(HB036_tagSCGoldRushInfo), typeof(DTCB036_tagSCGoldRushInfo)); 
 | 
        Register(typeof(HB037_tagSCGoldRushCampInfo), typeof(DTCB037_tagSCGoldRushCampInfo)); 
 | 
        Register(typeof(HA722_tagSCADInfoList), typeof(DTCA722_tagSCADInfoList)); 
 | 
        Register(typeof(H0320_tagFBEnd), typeof(DTC0320_tagFBEnd)); 
 | 
        Register(typeof(HA502_tagSCDonateCntInfo), typeof(DTCA502_tagSCDonateCntInfo)); 
 | 
        Register(typeof(HA513_tagMCFamilyActionInfo), typeof(DTCA513_tagMCFamilyActionInfo)); 
 | 
        Register(typeof(HA520_tagMCRoleFamilyInfo), typeof(DTCA520_tagMCRoleFamilyInfo)); 
 | 
        Register(typeof(HA521_tagMCFamilyChange), typeof(DTCA521_tagMCFamilyChange)); 
 | 
        Register(typeof(HA522_tagMCFamilyReqJoinInfo), typeof(DTCA522_tagMCFamilyReqJoinInfo)); 
 | 
        Register(typeof(HA523_tagMCFamilyViewList), typeof(DTCA523_tagMCFamilyViewList)); 
 | 
        Register(typeof(HA009_tagSCGameRecInfo), typeof(DTCA009_tagSCGameRecInfo)); 
 | 
        Register(typeof(HA922_tagSCArenaMatchList), typeof(DTCA922_tagSCArenaMatchList)); 
 | 
        Register(typeof(HA923_tagSCArenaPlayerInfo), typeof(DTCA923_tagSCArenaPlayerInfo)); 
 | 
    } 
 | 
  
 | 
    //主工程注册封包 
 | 
    public static void Register(Type _pack, Type _business) 
 | 
    { 
 | 
        var packInstance = _pack.Assembly.CreateInstance(_pack.Name) as GameNetPackBasic; 
 | 
        var businessInstance = _business.Assembly.CreateInstance(_business.Name) as DtcBasic; 
 | 
        if (packToBusinessTable.ContainsKey(packInstance.cmd)) 
 | 
        { 
 | 
            Debug.LogErrorFormat("重复封包登记: {0}!", _pack.Name); 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            packToBusinessTable[packInstance.cmd] = businessInstance; 
 | 
            packageTable[packInstance.cmd] = _pack; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public static bool Contain(ushort _cmd) 
 | 
    { 
 | 
        return packToBusinessTable.ContainsKey(_cmd); 
 | 
    } 
 | 
    public static void Distribute(GameNetPackBasic _package) 
 | 
    { 
 | 
        try 
 | 
        { 
 | 
            //执行主工程的封包 
 | 
            if (packToBusinessTable.ContainsKey(_package.cmd) && BattleManager.Instance.IsCanDistributePackage(_package)) 
 | 
                packToBusinessTable[_package.cmd].Done(_package); 
 | 
  
 | 
        } 
 | 
        catch (Exception ex) 
 | 
        { 
 | 
            Debug.LogError(ex.Message + "\r\n" + ex.StackTrace); 
 | 
            Debug.LogErrorFormat("封包是否为Null:{0};", _package == null); 
 | 
            if (_package != null) 
 | 
            { 
 | 
                Debug.LogErrorFormat("封包编号是:{0};", _package.cmd); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /// <summary> 
 | 
    /// 转换一个协议包 
 | 
    /// </summary> 
 | 
    /// <param name="vBytes"></param> 
 | 
    /// <returns></returns> 
 | 
    public static GameNetPackBasic TransPack(ServerType socketType, ushort cmd, byte[] vBytes) 
 | 
    { 
 | 
#if UNITY_EDITOR 
 | 
        int length = vBytes.Length; 
 | 
        string vStr = ""; 
 | 
        for (int i = 0; i < length; i++) 
 | 
        { 
 | 
            vStr += vBytes[i].ToString("x2").ToUpper() + ","; 
 | 
        } 
 | 
#endif 
 | 
        // 主工程有登记 
 | 
        if (packageTable.ContainsKey(cmd)) 
 | 
        { 
 | 
            var packageType = packageTable[cmd]; 
 | 
            // 实例化并强转为协议包基类 
 | 
            var packageInstance = packageType.Assembly.CreateInstance(packageType.Name) as GameNetPackBasic; 
 | 
            packageInstance.ReadFromBytes(vBytes);// 解析内容 
 | 
  
 | 
            packageInstance.socketType = socketType; 
 | 
#if UNITY_EDITOR 
 | 
            NetPkgCtl.RecordPackage(socketType, vStr, NetPackagetType.Server, packageInstance.ToString(), FieldPrint.PrintFields(packageInstance), FieldPrint.PrintFieldsExpand(packageInstance, true)); 
 | 
#endif 
 | 
            return packageInstance; 
 | 
        } 
 | 
        else //未注册 
 | 
        { 
 | 
#if UNITY_EDITOR 
 | 
            NetPkgCtl.RecordPackage(socketType, vStr, NetPackagetType.Server, string.Empty, string.Empty, null); 
 | 
#endif 
 | 
        } 
 | 
        return null; 
 | 
    } 
 | 
} 
 |