using UnityEngine; using System; using System.Collections.Generic; public class PackageRegedit { #region 主工程原生的封包 static object lockojb1 = new object(); static Dictionary m_PackageTable = new Dictionary(); static Dictionary packageTable { get { lock (lockojb1) { return m_PackageTable; } } } static object lockojb2 = new object(); static Dictionary m_PackToBusinessTable = new Dictionary(); static Dictionary 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(H0605_tagObjAddBuff), typeof(DTC0605_tagObjAddBuff)); Register(typeof(H0606_tagObjDelBuff), typeof(DTC0606_tagObjDelBuff)); Register(typeof(H0608_tagNPCDie), typeof(DTC0608_tagNPCDie)); Register(typeof(H0612_tagClearObjBuff), typeof(DTC0612_tagClearObjBuff)); Register(typeof(HA3A1_tagMCModuleFightPowerInfo), typeof(DTCA3A1_tagMCModuleFightPowerInfo)); Register(typeof(HA110_tagMCCoinToGoldCountInfo), typeof(DTCA110_tagMCCoinToGoldCountInfo)); Register(typeof(HA008_tagGCPlayerRecInfo), typeof(DTCA008_tagGCPlayerRecInfo)); Register(typeof(HAA02_tagMCFirstGoldInfo), typeof(DTCAA02_tagMCFirstGoldInfo)); Register(typeof(HAA03_tagMCDailyPackBuyGiftInfo), typeof(DTCAA03_tagMCDailyPackBuyGiftInfo)); Register(typeof(HA302_tagMCFuncOpenStateList), typeof(DTCA302_tagMCFuncOpenStateList)); Register(typeof(HA320_tagMCPlayerFBInfoData), typeof(DTCA320_tagMCPlayerFBInfoData)); Register(typeof(H0F03_tagRoleFamilyInfo), typeof(DTC0F03_tagRoleFamilyInfo)); Register(typeof(H0F05_tagFamilyChange), typeof(DTC0F05_tagFamilyChange)); Register(typeof(H0F07_tagFamilyRenameResult), typeof(DTC0F07_tagFamilyRenameResult)); Register(typeof(H0212_tagNotifyCode), typeof(DTC0212_tagNotifyCode)); Register(typeof(H0316_tagPackResetOK), typeof(DTC0316_tagPackResetOK)); Register(typeof(H0430_tagPlayerInFamilyInfoRefresh), typeof(DTC0430_tagPlayerInFamilyInfoRefresh)); Register(typeof(HA3BD_tagMCBuyEnterInfo), typeof(DTCA3BD_tagMCBuyEnterInfo)); Register(typeof(HA315_tagMCDailyActionCnt), typeof(DTCA315_tagMCDailyActionCnt)); Register(typeof(HA333_tagMCDailyActivityInfoList), typeof(DTCA333_tagMCDailyActivityInfoList)); 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(HA40D_tagGCServerCreatFamilyTimes), typeof(DTCA40D_tagGCServerCreatFamilyTimes)); Register(typeof(HA401_tagGCViewFamilyRequestInfo), typeof(DTCA401_tagGCViewFamilyRequestInfo)); Register(typeof(HA403_tagGCFamilyActionInfo), typeof(DTCA403_tagGCFamilyActionInfo)); Register(typeof(HA408_tagGCPyAllFamilyView), typeof(DTCA408_tagGCPyAllFamilyView)); 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(HB430_tagSCTurnFightReport), typeof(DTCB430_tagSCTurnFightReport)); Register(typeof(H0407_tagNPCDisappear), typeof(DTC0407_tagNPCDisappear)); Register(typeof(H0423_tagObjPropertyRefreshView), typeof(DTC0423_tagObjPropertyRefreshView)); Register(typeof(H0604_tagUseSkillAttack), typeof(DTC0604_tagUseSkillAttack)); } //主工程注册封包 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); } } } /// /// 转换一个协议包 /// /// /// 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; } }