/// <summary> /// 接收信息 /// </summary> /// <param name="session"></param> public bool Receive(IDummySession session, PacketBase pb) { if (!this.m_mapLink.ContainsKey(session)) { return false; } this.m_mapLink[session].Receive(pb); return true; }
protected override UniversalGuid?Process(PacketBase basePacket, PacketClientUseGameObject packet) { return(packet.GameObject); }
protected override UniversalGuid?Process(PacketBase basePacket, PacketQuestGiverAcceptQuest packet) { return(packet.QuestGiver); }
public void Send(PacketBase packet) => Send(CallPacketToString(packet));
void OnReceive(PacketBase msg) { Debug.Log("<=receivecallback msg;;;;;"); pools.Enqueue(msg); }
public void SendMsg(PacketBase msg) { client.SendMsg(msg); }
protected override UniversalGuid?Process(PacketBase packetBaseData, PacketGossipSelect packet) { return(packet.GossipUnit); }
protected override UniversalGuid?Process(PacketBase packetBaseData, PacketGossipClose packet) { return(packet.GossipSource); }
public PacketWrapper(SerializationInfo information, StreamingContext context) { _isPseudoPacket = information.GetBoolean("isPseudoPacket"); _packetNumber = information.GetInt32("packetNumber"); _requestNumber = information.GetInt32("requestNumber"); _timestamp = (DateTime)information.GetValue("timestamp", typeof(DateTime)); _readerIndex = (int?)information.GetValue("readerIndex", typeof(int?)); _readerName = information.GetString("readerName"); _packetType = (PacketType?)information.GetValue("packetType", typeof(PacketType?)); _elapsedMs = information.GetInt64("elapsedMs"); _readRequest = information.GetString("readRequest"); if (_isPseudoPacket) { // _packet = new CommandPsuedoPacket(information.GetString("RequestName"), (object [])information.GetValue("DataValues", typeof(object []))); _packet = new CommandPsuedoPacket(information.GetString("RequestName"), (byte [])information.GetValue("DataValues", typeof(byte[]))); } else { Type theType; theType = GetTypeFromPacketType((PacketType)_packetType); _packet = (PacketBase)information.GetValue("packet", theType); _rawPacket = (byte[])information.GetValue("rawPacket", typeof(byte[])); // _commandPacketNumber= (int?)information.GetValue("commandPacketNumber", typeof(int?)); } }
// Constructor for PacketCallBackFromReader public PacketWrapper(PacketData.PacketBase Packet, PacketType type, byte[] packetData, int requestNumber, long elapsedMs, int readerIndex, string readerName) { _packet = Packet; _packetType = type; _requestNumber = requestNumber; _elapsedMs = elapsedMs; _readerIndex = readerIndex; _readerName = readerName; _rawPacket = packetData.Clone() as byte[]; _isPseudoPacket = false; }
public PacketWrapper(PacketData.PacketBase Packet, PacketType type) { _packet = Packet; _packetType = type; }
public PacketWrapper(PacketWrapper envelope) { if (envelope == null) return; _isPseudoPacket = envelope._isPseudoPacket; _packetNumber = envelope._packetNumber; _timestamp = envelope._timestamp; _elapsedMs = envelope._elapsedMs; _readerIndex = envelope._readerIndex; _readerName = envelope._readerName; _packetType = envelope._packetType; _packet = envelope._packet; _rawPacket = (byte[])(envelope._rawPacket == null ? null : envelope._rawPacket.Clone()); _requestNumber = envelope._requestNumber; }
public abstract void Receive(PacketBase pb);
public abstract void Send(PacketBase pb);
protected override UniversalGuid?Process(PacketBase packetBaseData, PacketPlaySound packet) { return(packet.Source); }
protected override UniversalGuid?Process(PacketBase basePacket, PacketChat packet) { return(packet.Sender); }
/// <summary> /// ParsePacket /// </summary> /// <param name="buffer">packet data to be parsed.</param> /// <param name="header">output parameter to hold the message header.</param> /// <param name="errorMessage">output parameter to hold any error message.</param> /// <returns>The packet type of the packet. /// </returns> public static PacketType ParsePacket(byte[] buffer, out PacketBase packet, out string errorMessage) { // Initalize output paramters packet = null; errorMessage = null; // Check parameters if (buffer == null) { errorMessage = SysLogger.LogError(new ArgumentNullException("buffer", "Attempted to parse an empty packet buffer.")); return PacketType.U_N_D_F_I_N_E_D; } if (buffer.Length < PREAMBLE_SIZE) { errorMessage = SysLogger.LogError(new rfidInvalidPacketException(rfidErrorCode.PacketDataTooSmall, buffer, 0)); return PacketType.U_N_D_F_I_N_E_D; } // Initialize locals PacketType rslt = GetPacketTypeFromBuffer(buffer, 0); if (rslt == PacketType.U_N_D_F_I_N_E_D) { errorMessage = SysLogger.LogError(new rfidInvalidPacketException(rfidErrorCode.UnknownPacketType, buffer, 0)); return PacketType.U_N_D_F_I_N_E_D; } packet = PacketData.CreatePacket(rslt); try { Parse_Fields(packet, buffer, 0, FullPacketBytes(buffer, 0)); } catch (rfidInvalidPacketException exp) { errorMessage =SysLogger.LogError(exp); packet = null; return PacketType.U_N_D_F_I_N_E_D; } return rslt; }
protected override UniversalGuid?Process(PacketBase basePacket, PacketMonsterMove packet) { return(packet.Mover); }
private static int Find_String_Length(PacketBase body, System.Reflection.FieldInfo info) { switch (info.DeclaringType.Name) { case "rfidError": switch (info.Name) { // case "reason": // return ((Greenwater.rfidError)body).reasonlen; default: throw new rfidInvalidPacketException(String.Format("Cannot find the string length of {0}.{1}.", info.DeclaringType.Name, info.Name)); } default: throw new rfidInvalidPacketException(String.Format("Cannot find the length of strings in {0}.", info.DeclaringType.Name)); } }
/// <summary> /// Parses a buffer that hold a packet data and updates the packet structure with data from the buffer. /// </summary> /// <param name="obj"></param> /// <param name="buffer"></param> /// <param name="offset"></param> /// <returns>New offset after parsing the buffer</returns> /// 01-01-05-00-03-00-DC-65-C3-3B-02-00-10-00-00-00-00-00-EB-6B private static int Parse_Fields(PacketBase obj, byte[] buffer, int offset, int size) { int offsetLimit = offset + size; if (offsetLimit > buffer.Length) throw new rfidInvalidPacketException(rfidErrorCode.PacketDataTooSmall, buffer, 0); foreach (System.Reflection.FieldInfo info in obj.GetType().GetFields()) { #region Parse Tracing code #if false if (info.FieldType.IsArray) { System.Diagnostics.Debug.WriteLine(String.Format("ParseMessage:: {0}: {1}", info.FieldType.Name, info.Name), "TRACE"); } else { System.Diagnostics.Debug.WriteLine(String.Format("ParseMessage:: {0} {1}: {2} = {3}", info.IsInitOnly ? "RO" : "", info.FieldType.Name, info.Name, info.GetValue(obj).ToString()), "TRACE"); } #endif #endregion switch (info.FieldType.Name) { case "Byte[]": int arraySize = 0; if (info.GetValue(obj) != null) // This is for fixed length byte arrays (none right now) { arraySize = ((byte[])info.GetValue(obj)).Length; if (offset + arraySize > offsetLimit) return -1; byte[] newArray = new byte[arraySize]; for (int i = 0; i < arraySize; i++) newArray[i] = buffer[offset+i]; // Reverse the array if it has tag data if (info.Name == "inventory_data") Array.Reverse(newArray); info.SetValue(obj, newArray); } else { // Variable length array (assume the rest of the packet is the data) arraySize = buffer.Length - offset; byte[] newArray = new byte[arraySize]; for (int i = 0; i < arraySize; i++) newArray[i] = buffer[offset+i]; info.SetValue(obj, newArray); } offset += arraySize; // binaryWriter.Write((byte[])info.GetValue(obj), 0, arraySize); break; case "Byte": if (offset + 1 > offsetLimit) return -1; if (info.IsInitOnly) { if ((byte)info.GetValue(obj) != (byte)buffer[offset]) throw new rfidInvalidPacketFieldException(info.Name, info.GetValue(obj).ToString(), buffer[offset].ToString()); } else { info.SetValue(obj, buffer[offset]); } offset += 1; break; case "UInt16": if (offset + 2 > offsetLimit) return -1; if (info.IsInitOnly) { if ((UInt16)info.GetValue(obj) != Parse_UInt16(buffer, offset)) throw new rfidInvalidPacketFieldException(info.Name, info.GetValue(obj).ToString(), Parse_UInt16(buffer, offset).ToString()); } else { info.SetValue(obj, Parse_UInt16(buffer, offset)); } offset += 2; break; case "UInt32": if (offset + 4 > offsetLimit) return -1; if (info.IsInitOnly) { if ((UInt32)info.GetValue(obj) != Parse_UInt32(buffer, offset)) throw new rfidInvalidPacketFieldException(info.Name, info.GetValue(obj).ToString(), Parse_UInt32(buffer, offset).ToString()); } else { info.SetValue(obj, Parse_UInt32(buffer, offset)); } offset += 4; break; case "String": int strlen = Find_String_Length(obj, info); if (offset + 12 > offsetLimit) return -1; info.SetValue(obj, Parse_String(buffer, offset, strlen)); offset += strlen; break; // case "Char[]": // binaryWriter.Write((char[])info.GetValue(obj)); // break; default: throw new ApplicationException("Parse_Fields Error " + info.Name + "(" + info.FieldType.Name + ") is an unsupported type."); } } return offset; }
public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase packet, ref Peer pPlayer) { GCNewItemBox pPacket = (GCNewItemBox)packet; //当前流程是主流程 if (GameProcedure.GetActiveProcedure() == (GameProcedure)GameProcedure.s_ProcMain) { CObjectManager pObjectManager = CObjectManager.Instance; //检查位置是否合法 fVector2 pos = new fVector2(pPacket.Position.m_fX, pPacket.Position.m_fZ); if (!WorldManager.Instance.ActiveScene.IsValidPosition(ref pos)) { LogManager.LogError("Valid Position @GCNewItemBoxHandler.Execute"); return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_ERROR); } if ((int)ITEMBOX_TYPE.ITYPE_DROPBOX == pPacket.ObjectType) { bool bMustCreater = true; CObject pObj = (CObject)(pObjectManager.FindServerObject((int)pPacket.MonsterID)); if (pObj != null && pObj is CObject_Character) { CObject_Character pCharacter = (CObject_Character)pObj; if (!pCharacter.IsDie()) { uint idItemBox = (uint)pPacket.ObjectID; uint idOwner = (uint)pPacket.OwnerID; WORLD_POS posCreate = pPacket.Position; pCharacter.AddDropBoxEvent(idItemBox, idOwner, ref posCreate); bMustCreater = false; } } if (bMustCreater) { //创建ItemBox CTripperObject_ItemBox pBox = (CTripperObject_ItemBox)CObjectManager.Instance.NewTripperItemBox((int)pPacket.ObjectID); pBox.Initial(null); //设置位置 pBox.SetMapPosition(pPacket.Position.m_fX, pPacket.Position.m_fZ); //设置掉落箱的归属 pBox.SetOwnerGUID((uint)pPacket.OwnerID); CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_DROP_ITEMBOX); } } else { //创建矿物生长点 CTripperObject_Resource pResource = (CTripperObject_Resource)CObjectManager.Instance.NewTripperResource((int)pPacket.ObjectID); if (!(pResource.SetResourceID((int)pPacket.ObjectType))) { //非法的资源ID CObjectManager.Instance.DestroyObject(pResource); return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE); } pResource.Initial(null); //设置位置 pResource.SetMapPosition(pPacket.Position.m_fX, pPacket.Position.m_fZ); jhCount++; } } return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE); }
public void SendMsg(PacketBase msg, PacketType cmd, System.Action <PacketBase> callback) { AddEventOnceListener((int)cmd, callback); client.SendMsg(msg); }
/// <summary> /// Adds the packet to the output queue. /// </summary> /// <param name="packet">message to be sent</param> /// <param name="client">client receiver</param> public static void Send(PacketBase packet, NetPeer client) { instance.baseServer.AddOutputMessage(new NetMessage(packet, client)); }
void Update() { ////////////////////////////////////// if (Application.internetReachability == NetworkReachability.NotReachable) { /* if (client.onlineHallSocket == true) * Game.DialogMgr.PushDialog(UIDialog.SingleBtnDialog, "没有联网!"); * if (client.onlineMsgSocket == true) * Game.DialogMgr.PushDialog(UIDialog.SingleBtnDialog, "没有联网!"); * if (client.onlineGameSockett == true) * Game.DialogMgr.PushDialog(UIDialog.SingleBtnDialog, "没有联网!"); */ Debug.LogFormat("没有联网!!!"); if (Game.SocketGame.SocketNetTools.client != null) { client.onlineGameSockett = false; Game.SocketGame.SocketNetTools.StopClient(); } /* if (Game.SocketHall.SocketNetTools.client != null) * { * client.onlineHallSocket = false; * Game.SocketHall.SocketNetTools.StopClient(); * } * if (Game.SocketMsg.SocketNetTools.client != null) * { * client.onlineMsgSocket = false; * Game.SocketMsg.SocketNetTools.StopClient(); * }*/ } if (Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork) { /* if (client != null && client.onlineHallSocket == false) * { * StopClient(); * * string gameserver = "daqingmj.youhao88.com:5000"; * Game.InitHallSocket(gameserver); * // Game.DialogMgr.OnBackPressed(); * * client.onlineHallSocket = true; * * } * if (client != null && client.onlineMsgSocket == false) * { * StopClient(); * * string gameserver = "daqingmj.youhao88.com:4000"; * Game.InitMsgSocket(gameserver); * // Game.DialogMgr.OnBackPressed(); * * client.onlineMsgSocket = true; * * }*/ if (client != null && client.onlineGameSockett == false) { Game.SocketGame.SocketNetTools.StopClient(); string gameserver = "daqingmj.youhao88.com:7000"; Game.InitGameSocket(gameserver); // Game.DialogMgr.OnBackPressed(); client.onlineGameSockett = true; } // Debug.LogFormat("使用Wi-Fi!!!"); } if (Application.internetReachability == NetworkReachability.ReachableViaCarrierDataNetwork) { /* if (client != null && client.onlineHallSocket == false) * { * StopClient(); * * string gameserver = "daqingmj.youhao88.com:5000"; * Game.InitHallSocket(gameserver); * // Game.DialogMgr.OnBackPressed(); * * client.onlineHallSocket = true; * * } * if (client != null && client.onlineMsgSocket == false) * { * StopClient(); * * string gameserver = "daqingmj.youhao88.com:4000"; * Game.InitMsgSocket(gameserver); * // Game.DialogMgr.OnBackPressed(); * * client.onlineMsgSocket = true; * * }*/ if (client != null && client.onlineGameSockett == false) { Game.SocketGame.SocketNetTools.StopClient(); string gameserver = "daqingmj.youhao88.com:7000"; Game.InitGameSocket(gameserver); // Game.DialogMgr.OnBackPressed(); client.onlineGameSockett = true; } // Debug.LogFormat("使用移动网络!!!"); } ///////////////////////////////////////// /* if (Game.SocketHall.SocketNetTools.Connected == false) * { * if (Game.SocketHall.SocketNetTools.client != null) * { * string gameserver = "daqingmj.youhao88.com:5000"; * Game.InitHallSocket(gameserver); * } * } * if (Game.SocketMsg.SocketNetTools.Connected == false) * { * if (Game.SocketMsg.SocketNetTools.client != null) * { * * string gameserver = "daqingmj.youhao88.com:4000"; * Game.InitMsgSocket(gameserver); * } * }*/ /* if (Game.SocketGame.SocketNetTools.Connected == false) * { * if (Game.SocketGame.SocketNetTools.client != null) * { * Game.SocketGame.SocketNetTools.StopClient(); * string gameserver = "daqingmj.youhao88.com:7000"; * Game.InitGameSocket(gameserver); * * } * }else * { * * // PacketBase testmsg = new PacketBase() { packetType = PacketType.HEARTBEAT }; * // Game.SocketGame.SocketNetTools.client.SendMsg(testmsg); * } */ ///////////////////////////////////// if (connectFinish) { connectFinish = false; if (null != OnConnect) { OnConnect(); } } if (pools.Count > 0) { PacketBase msg = pools.Dequeue(); if (null != msg) { DispatchEvent((int)msg.packetType, msg); DispatchOnceEvent((int)msg.packetType, msg); } } }
/// <summary> /// Adds the packet to the output queue, for every client except the given one. /// </summary> /// <param name="packet">data to be sent</param> /// <param name="client">client excluded (usually the original sender)</param> public static void SendExcluding(PacketBase packet, NetPeer client) { instance.baseServer.AddMessageExcluding(packet, client); }
public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase Packet, ref Peer pPlayer) { if (GameProcedure.GetActiveProcedure() == (GameProcedure)GameProcedure.s_ProcMain) { LogManager.Log("Receive GCPickResult Packet"); GCPickResult pPacket = (GCPickResult)Packet; CObjectManager pObjectManager = CObjectManager.Instance; CDataPool pDataPool = GameProcedure.s_pDataPool; //if( pPacket.getItemBoxId() != pDataPool.GetItemBoxID() ) bool bLog = (GameProcedure.s_pUISystem != null)?true:false; // 放置每一个物品 if (pPacket.getResult() == (byte)PickResultCode.PICK_SUCCESS) { int nIndex = 0; CObject_Item pItem = CDataPool.Instance.ItemBox_GetItem( pPacket.getItemID().m_World, pPacket.getItemID().m_Server, pPacket.getItemID().m_Serial, ref nIndex); if (pItem == null) { if (bLog) { GameProcedure.s_pEventSystem.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, "内部错误,非法的物品GUID!"); } return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE); } // 先保存物品名称,后面可能会删除掉落包里的物品 [6/13/2011 ivan edit] string strItemName = pItem.GetName(); //如果发生物品转移,(从箱子里面移到包裹里),则改变客户端id,以表示在客户端是不同物体 ObjectSystem.Instance.ChangeItemClientID(pItem); ((CObject_Item)pItem).SetTypeOwner(ITEM_OWNER.IO_MYSELF_PACKET); CObject_Item pItemBag = CDataPool.Instance.UserBag_GetItem(pPacket.getBagIndex()); if (pItemBag != null) { //有东西,应该一定是一类物品 if (pItem.GetIdTable() == pItemBag.GetIdTable()) { //同一类物品 //CDataPool.GetMe().ItemBox_SetItem(nIndex, NULL, FALSE); // 不删除会泄露内存 [6/10/2011 ivan edit] CDataPool.Instance.ItemBox_SetItem(nIndex, null, true); } else { return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE); } } else { //没东西 //存入数据池 CDataPool.Instance.UserBag_SetItem(pPacket.getBagIndex(), pItem, true, true); CDataPool.Instance.ItemBox_SetItem(nIndex, null, false); CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_GET_NEWEQUIP, pItem.GetID()); } //通知ActionButton CActionSystem.Instance.UserBag_Update(); CActionSystem.Instance.ItemBox_Update(); //产生ui事件 if (bLog) { //ADDTALKMSG(strItemName); //todo } CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_LOOT_SLOT_CLEARED); CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_PACKAGE_ITEM_CHANGED, pPacket.getBagIndex()); //如果掉落箱空,关闭 if (CDataPool.Instance.ItemBox_GetNumber() == 0) { CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_LOOT_CLOSED); } } else { switch (pPacket.getResult()) { case (byte)PickResultCode.PICK_BAG_FULL: { if (bLog) { GameProcedure.s_pEventSystem.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, ("背包已满!")); } //CSoundSystemFMod._PlayUISoundFunc(96); todo } break; case (byte)PickResultCode.PICK_INVALID_OWNER: { if (bLog) { GameProcedure.s_pEventSystem.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, ("不属于自己的背包!")); } } break; case (byte)PickResultCode.PICK_INVALID_ITEM: { if (bLog) { GameProcedure.s_pEventSystem.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, ("非法物品!")); } } break; case (byte)PickResultCode.PICK_TOO_FAR: { if (bLog) { GameProcedure.s_pEventSystem.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, ("距离太远!")); } } break; default: break; } } } return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE); }
void OnMsgCome(PacketBase msg) { }
protected override UniversalGuid?Process(PacketBase basePacket, PacketQuestGiverCompleteQuestRequest packet) { return(packet.QuestGiver); }
protected override Unit Process(PacketBase packetBaseData, PacketGossipHello packet) { Console.WriteLine("Talking to " + packet.GossipSource.Entry); return(default);
protected override UniversalGuid?Process(PacketBase basePacket, PacketClientQuestGiverChooseReward packet) { return(packet.QuestGiver); }
/// <summary> /// Reads data from incoming stream (if bytes exist in buffer). Tries to construct /// one or more game packets. Fires event for each valid game packet. /// </summary> private void ReadData() { try { //vars List <byte[]> packets = new List <byte[]>(); //lock queue lock (_incomingQueue) { //return if zero bytes if (_incomingQueue.Count == 0) { return; } //queue overflow? if (_incomingQueue.Count > 100000) { Log.Write($"ReadData: Incoming byte queue overflow"); _incomingQueue.Clear(); } //loop while (true) { //break if zero bytes if (_incomingQueue.Count == 0) { break; } //find first four matching footer bytes (terminator) int firstIndex = FindToken(_incomingQueue, PacketBase.PACKET_FOOTER); //break if no footer if (firstIndex == -1) { Log.Write($"ReadData: Incomplete data ({_incomingQueue.Count} bytes) left in buffer"); break; } //dequeue bytes int count = firstIndex + 4; byte[] bytes = _incomingQueue.Dequeue(count).ToArray(); //add to list packets.Add(bytes); } } //return if no new packets if (packets.Count <= 0) { return; } //loop through packet (candidates) foreach (byte[] bytes in packets) { //reject if invalid PacketBase packet = PacketBase.FromBytes(bytes); if (packet == null) { Log.Write($"ReadData: Invalid packet from '{_remoteIP}' with {bytes.Length} bytes was discarded"); continue; } //fire event PacketReceived?.InvokeFromTask(this, packet); //WARNING, CHANGED THIS!! } } catch (Exception ex) { _stop = true; Log.Write("ReadData: Error reading or processing data"); ErrorHandler.LogError(ex); } }
protected override UniversalGuid?Process(PacketBase packetBaseData, PacketEmote packet) { return(packet.Sender); }
static string CallPacketToString(PacketBase packet) => NetworkSystem.PacketToString(packet);
protected override UniversalGuid?Process(PacketBase packetBaseData, PacketSpellStart packet) { return(packet.Data?.Caster); }
public static void Send(PacketBase packet) { clients.ForEach(x => x.Send(packet)); }
protected override UniversalGuid?Process(PacketBase packetBaseData, PacketAuraUpdate packet) { return(packet.Unit); }
public static void SendMessage(Client recipient, PacketType packetType, object data) { if (recipient == null) { return; } #if DEBUG // // If we're debugging, make sure that the data type matches that required by the packetType, or else throw an exception. // var type = DataPacket.PacketTypeMap[packetType]; if (type != null) { var testObject = Convert.ChangeType(data, type); } else { if (data != null) { throw new ArgumentException("Data from this packet type was expected to be null, but wasn't."); } } #endif // ToDo: Don't hardcode Packet Version 1 here. Instead, add a packet version property to Client, and switch on that. var packetBase = new PacketBase { PacketVersion = PacketVersion.Version1 }; var packetV1 = new PacketV1 { PacketType = packetType, Data = data, Sender = ServerName }; packetV1.Recipients.Add(recipient.UserInfo.EmailAddress); packetBase.Data = packetV1; dynamic baseBuffer; using (var stream = new MemoryStream()) { var binaryWriter = new BinaryWriter(stream); packetBase.Write(binaryWriter); baseBuffer = stream.ToArray(); } var messageSize = baseBuffer.Length; byte[] bytes = BitConverter.GetBytes(messageSize); if (BitConverter.IsLittleEndian) { Array.Reverse(bytes); } var offset = 0; var messageBuffer = new byte[sizeof(uint) + messageSize]; bytes.CopyTo(messageBuffer, offset); offset += sizeof(uint); baseBuffer.CopyTo(messageBuffer, offset); recipient.Send(messageBuffer); }
protected override UniversalGuid?Process(PacketBase basePacket, PacketPhaseShift packet) { return(packet.Client); }
public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase pPack, ref Peer pPlayer) { LogManager.Log("RECV GCCharEquipment Packet "); if (GameProcedure.GetActiveProcedure() == (GameProcedure)GameProcedure.s_ProcMain) { CObjectManager pObjectManager = CObjectManager.Instance; GCCharEquipment pPacket = (GCCharEquipment)pPack; CObject pObj = (CObject)(pObjectManager.FindServerObject((int)pPacket.getObjID())); if (pObj == null || !(pObj is CObject_Character)) { return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE); } /* * static UINT pBuf[UPDATE_CHAR_ATT_NUMBERS]; * pPacket.FillParamBuf( (VOID*)pBuf ); * * SCommand_Object cmdTemp; * cmdTemp.m_wID = OC_UPDATE_EQUIPMENT; * cmdTemp.m_adwParam[0] = pPacket.getFlags(); * cmdTemp.m_apParam[1] = (VOID*)pBuf; * pObj.PushCommand(&cmdTemp ); */ //刷入数据池 CCharacterData pCharacterData = ((CObject_Character)pObj).GetCharacterData(); // if(pObj == (CObject*)CObjectManager::GetMe().GetMySelf()) { uint dwEquipFlag = pPacket.getFlags(); if ((dwEquipFlag & (1 << (int)HUMAN_EQUIP.HEQUIP_WEAPON)) != 0) { pCharacterData.Set_EquipGem(HUMAN_EQUIP.HEQUIP_WEAPON, (int)pPacket.getWeaponGemID()); pCharacterData.Set_Equip(HUMAN_EQUIP.HEQUIP_WEAPON, (int)pPacket.getWeaponID()); } if ((dwEquipFlag & (1 << (int)HUMAN_EQUIP.HEQUIP_CAP)) != 0) { pCharacterData.Set_Equip(HUMAN_EQUIP.HEQUIP_CAP, (int)pPacket.getCapID()); } if ((dwEquipFlag & (1 << (int)HUMAN_EQUIP.HEQUIP_ARMOR)) != 0) { pCharacterData.Set_Equip(HUMAN_EQUIP.HEQUIP_ARMOR, (int)pPacket.getArmourID()); pCharacterData.Set_EquipGem(HUMAN_EQUIP.HEQUIP_ARMOR, (int)pPacket.getArmourGemID()); } if ((dwEquipFlag & (1 << (int)HUMAN_EQUIP.HEQUIP_CUFF)) != 0) { pCharacterData.Set_Equip(HUMAN_EQUIP.HEQUIP_CUFF, (int)pPacket.getCuffID()); } if ((dwEquipFlag & (1 << (int)HUMAN_EQUIP.HEQUIP_BOOT)) != 0) { pCharacterData.Set_Equip(HUMAN_EQUIP.HEQUIP_BOOT, (int)pPacket.getBootID()); } // [8/30/2010 Sun] if ((dwEquipFlag & (1 << (int)HUMAN_EQUIP.HEQUIP_BACK)) != 0) { pCharacterData.Set_Equip(HUMAN_EQUIP.HEQUIP_BACK, (int)pPacket.getBackID()); } // 支持进入游戏时,服务器刷新肩甲 [4/27/2011 ivan edit] if ((dwEquipFlag & (1 << (int)HUMAN_EQUIP.HEQUIP_SASH)) != 0) { pCharacterData.Set_Equip(HUMAN_EQUIP.HEQUIP_SASH, (int)pPacket.getSashID()); pCharacterData.Set_EquipGem(HUMAN_EQUIP.HEQUIP_SASH, (int)pPacket.getSashGemID()); } } pObj.PushDebugString("GCCharEquipment"); pObj.SetMsgTime(GameProcedure.s_pTimeSystem.GetTimeNow()); } return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE); }
protected override UniversalGuid?Process(PacketBase basePacket, PacketPlayMusic packet) { return(packet.Target); }
public abstract PACKET_EXC_RES Execute( Dispatch dispatch , PacketBase packet);