using UnityEngine;
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
//using ILCrossBinding;
|
|
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(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));
|
|
}
|
|
|
|
|
//主工程注册封包
|
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))
|
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;
|
}
|
|
|
|
}
|