public static void InitialiseUdp(DistributedRoutingTable localTable, int port) { UdpContact.localTable = localTable; client = new UdpClient(port); listenThread = new Thread(() => { while (listen) { IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, port); byte[] bytes = client.Receive(ref groupEP); using (MemoryStream m = new MemoryStream(bytes)) { using (BinaryReader r = new BinaryReader(m)) { PacketFlag f = (PacketFlag)r.ReadByte(); switch (f) { case PacketFlag.Ping: ParsePing(r); break; case PacketFlag.Data: ParseData(r); break; default: Console.WriteLine("Unknown packet type " + f); break; } } } } }); listenThread.Start(); }
void proxy_OnJoinGameResponse(RealmServer.JoinGameResponse packet, ref PacketFlag flag) { // If this instance receives a join game success packet if (packet.Result == RealmServer.JoinGameResult.Sucess) { try { // If this is the active diablo 2 window (active tab or last clicked in overview tab) if (this.proxy.DiabloWindow != null && this.proxy.DiabloWindow.IsActive()) { Console.WriteLine(this.proxy.DiabloWindow.KeyOwner + " joined a game, telling hero mercs to join"); // loop through all running heromerc plugins to tell them to join the same game foreach (HeroMercPlugin heroMerc in runningPlugins) { // Ignore the current instance as we are already in the game if (heroMerc != this) { // tell the other instance to join the game heroMerc.JoinGame(gameName, gamePassword); } } } } catch (Exception ex) { Console.WriteLine(ex.Message); } } }
void proxy_OnSendMessage(GameClient.SendMessage Packet, ref PacketFlag flag) { if (Packet.Message.Equals("debug")) { Console.WriteLine(this.proxy.DiabloWindow.KeyOwner + " said debug"); } }
protected override void DiabloToBattleNet(byte[] data, ref PacketFlag flag) { byte[] packetData; if (firstPacket) { packetData = new byte[data.Length - 3]; Buffer.BlockCopy(data, 3, packetData, 0, data.Length - 3); firstPacket = false; } else { packetData = new byte[data.Length - 2]; Buffer.BlockCopy(data, 2, packetData, 0, data.Length - 2); } RealmClientPacket PacketID = (RealmClientPacket)packetData[0]; try { switch (PacketID) { //TODO: Add the rest of these... case RealmClientPacket.RealmStartupRequest: OnRealmStartupRequest(new RealmClient.RealmStartupRequest(packetData), ref flag); break; case RealmClientPacket.CharacterLogonRequest: OnCharacterLogonRequest(new RealmClient.CharacterLogonRequest(packetData), ref flag); break; case RealmClientPacket.JoinGameRequest: OnJoinGameRequest(new RealmClient.JoinGameRequest(packetData), ref flag); break; } } catch (Exception ex) { Console.WriteLine(PacketID.ToString() + ": " + ex.Message); } }
public Packet(int packetID, bool isLongConnect = false) : this(packetID, 0) { if (!isLongConnect) {//在这里附加session PacketFlag |= PacketFlag.WithSession; m_writer.Write(m_packetIdentity); m_writer.WriteAscii(MessageTransfer.Singleton.Session, 32); } }
void proxy_OnPlayerLeaveGame(GameServer.PlayerLeaveGame Packet, ref PacketFlag flag) { Console.WriteLine(" Starting Exiting Script "); foreach (HeroMercPlugin heroMerc in runningPlugins) { if (heroMerc == this) { Console.WriteLine(this.proxy.DiabloWindow.KeyOwner + " Merc Exiting "); this.proxy.DiabloWindow.ExitGame(); } } }
void RealmProxy_OnJoinGameResponse(RealmServer.JoinGameResponse packet, ref PacketFlag flag) { if (packet.Result == RealmServer.JoinGameResult.Sucess) { this.GameAddress = packet.GameServerIP; this.GamePort = 4000; flag = PacketFlag.PacketFlag_Hidden; byte[] patchedBytes = packet.PatchedByteArray(); this.SendToDiablo(patchedBytes); } }
protected override void BattleNetToDiablo(byte[] data, ref PacketFlag flag) { if (data[0] == 0xff) { byte[] packetData = new byte[data.Length - 1]; Buffer.BlockCopy(data, 1, packetData, 0, data.Length - 1); BnetServerPacket PacketID = (BnetServerPacket)packetData[0]; try { switch (PacketID) { case BnetServerPacket.AdInfo: OnAdInfo(new BnetServer.AdInfo(packetData), ref flag); break; case BnetServerPacket.BnetAuthResponse: OnBnetAuthResponse(new BnetServer.BnetAuthResponse(packetData), ref flag); break; case BnetServerPacket.BnetConnectionResponse: OnBnetConnectionResponse(new BnetServer.BnetConnectionResponse(packetData), ref flag); break; case BnetServerPacket.BnetLogonResponse: OnBnetLogonResponse(new BnetServer.BnetLogonResponse(packetData), ref flag); break; case BnetServerPacket.BnetPing: OnBnetPing(new BnetServer.BnetPing(packetData), ref flag); break; case BnetServerPacket.ChannelList: OnChannelList(new BnetServer.ChannelList(packetData), ref flag); break; case BnetServerPacket.ChatEvent: OnChatEvent(new BnetServer.ChatEvent(packetData), ref flag); break; case BnetServerPacket.EnterChatResponse: OnEnterChatResponse(new BnetServer.EnterChatResponse(packetData), ref flag); break; case BnetServerPacket.ExtraWorkInfo: OnExtraWorkInfo(new BnetServer.ExtraWorkInfo(packetData), ref flag); break; case BnetServerPacket.FileTimeInfo: OnFileTimeInfo(new BnetServer.FileTimeInfo(packetData), ref flag); break; case BnetServerPacket.KeepAlive: OnServerKeepAlive(new BnetServer.KeepAlive(packetData), ref flag); break; case BnetServerPacket.NewsInfo: OnNewsInfo(new BnetServer.NewsInfo(packetData), ref flag); break; case BnetServerPacket.QueryRealmsResponse: OnQueryRealmsResponse(new BnetServer.QueryRealmsResponse(packetData), ref flag); break; case BnetServerPacket.RealmLogonResponse: OnRealmLogonResponse(new BnetServer.RealmLogonResponse(packetData), ref flag); break; case BnetServerPacket.RequiredExtraWorkInfo: OnRequiredExtraWorkInfo(new BnetServer.RequiredExtraWorkInfo(packetData), ref flag); break; } } catch (Exception ex) { Console.WriteLine(PacketID.ToString() + ": " + ex.Message); } } }
// Initializes a new outgoing packet internal Packet(PacketType Type, PacketFlag Flag, bool ResponseRequired, bool Success = true) { this.Type = Type; this.Flag = Flag; Body = new PortableStorage(); Header = new PacketHeader() { Signature = 0x0101010101012101UL, ProtocolVersion = 1, CommandCode = (uint)Type, ResponseRequired = ResponseRequired, ReturnCode = (uint)(Success ? 0 : 1), // 0 = success Flag = (uint)Flag }; }
public void Reset(int packetID, bool isLongConnect) { PacketFlag = PacketFlag.Normal; PacketID = (short)packetID; DispatcherID = 0; m_writer.Clear(); m_packetIdentity++; m_datalength = 0; m_useDataBufferLength = false; if (!isLongConnect) {//在这里附加session PacketFlag |= PacketFlag.WithSession; m_writer.Write(m_packetIdentity); m_writer.WriteAscii(MessageTransfer.Singleton.Session, 32); } }
/// <summary> /// /// </summary> private void ProcessPacket(byte[] payload) { // first packet doesn't follow the standard structure if (!receivedFirstPacket) { ProcessFirstPacket(payload); return; } if (payload.Length == sizeof(int)) { ProcessPingPacket(); return; } using (var stream = new MemoryStream(payload)) { using (var reader = new BinaryReader(stream)) { reader.ReadUInt32(); PacketFlag flags = (PacketFlag)reader.ReadPackedUInt32(); byte[] packetPayload; if ((flags & PacketFlag.Encrypted) != 0) { packetPayload = decryptor.Decrypt(payload); } else { packetPayload = reader.ReadBytes((int)(stream.Length - stream.Position)); } if ((flags & PacketFlag.Raw) != 0) { ProcessRawPacket(packetPayload); } else { ProcessObjectPacket(packetPayload); } } } }
protected virtual void HandleServerReceive(byte[] packetBytes) { PacketFlag flag = PacketFlag.PacketFlag_Normal; BattleNetToDiablo(packetBytes, ref flag); try { if (flag == PacketFlag.PacketFlag_Normal) { diabloStream.BeginWrite(packetBytes, 0, packetBytes.Length, new AsyncCallback(OnClientSend), diabloStream); } } catch (Exception ex) { Console.WriteLine(this.GetType().Name + ":" + "Client Write Error" + ex.Message); Disconnect(); } }
protected override void BattleNetToDiablo(byte[] data, ref PacketFlag flag) { byte[] packetData = new byte[data.Length - 2]; Buffer.BlockCopy(data, 2, packetData, 0, data.Length - 2); RealmServerPacket PacketID = (RealmServerPacket)packetData[0]; try { switch (PacketID) { //TODO: Add the rest of these... case RealmServerPacket.JoinGameResponse: OnJoinGameResponse(new RealmServer.JoinGameResponse(packetData), ref flag); break; } } catch (Exception ex) { Console.WriteLine(PacketID.ToString() + ": " + ex.Message); } }
protected override void DiabloToBattleNet(byte[] data, ref PacketFlag flag) { byte[] packetData = new byte[data.Length - 1]; Buffer.BlockCopy(data, 1, packetData, 0, data.Length - 1); BnetClientPacket PacketID = (BnetClientPacket)packetData[0]; try { switch (PacketID) { //TODO: Add the rest of these... case BnetClientPacket.RealmLogonRequest: OnRealmLogonRequest(new BnetClient.RealmLogonRequest(packetData), ref flag); break; case BnetClientPacket.BnetAuthRequest: OnBnetAuthRequest(new BnetClient.BnetAuthRequest(packetData), ref flag); break; } } catch (Exception ex) { Console.WriteLine(PacketID.ToString() + ": " + ex.Message); } }
private void proxy_OnWalkVerify(GameServer.WalkVerify Packet, ref PacketFlag flag) { this.PlayerX = Packet.X; this.PlayerY = Packet.Y; }
void proxy_OnSendMessage(GameClient.SendMessage Packet, ref PacketFlag flag) { if (Packet.Message.Equals("debug")) { } }
public PacketType PacketType; // { get; set; } public BasicHeader(PacketType type = PacketType.Unknown) { PacketType = type; PacketFlag = PacketFlag.None; }
void RealmProxy_OnJoinGameRequest(RealmClient.JoinGameRequest packet, ref PacketFlag flag) { ProxyServer.RealmProxyJoiningGame = this; }
private void proxy_OnGameHandshake(GameServer.GameHandshake Packet, ref PacketFlag flag) { this.PlayerId = Packet.UID; }
void RealmProxy_OnCharacterLogonRequest(RealmClient.CharacterLogonRequest packet, ref PacketFlag flag) { CharacterName = packet.Name; }
void RealmProxy_OnRealmStartupRequest(RealmClient.RealmStartupRequest packet, ref PacketFlag flag) { bnetProxy = ProxyServer.FindBnetProxyForRealm(packet.Username); if (bnetProxy != null) { bnetProxy.Proxy.RealmProxy = this; this.Proxy = bnetProxy.Proxy; } }
protected override void DiabloToBattleNet(byte[] data, ref PacketFlag flag) { byte[] packetData; if (firstPacket) { packetData = new byte[data.Length - 3]; Buffer.BlockCopy(data, 3, packetData, 0, data.Length - 3); firstPacket = false; } else { packetData = new byte[data.Length - 2]; Buffer.BlockCopy(data, 2, packetData, 0, data.Length - 2); } RealmClientPacket PacketID = (RealmClientPacket)packetData[0]; try { switch (PacketID) { //TODO: Add the rest of these... case RealmClientPacket.RealmStartupRequest : OnRealmStartupRequest(new RealmClient.RealmStartupRequest(packetData), ref flag); break; case RealmClientPacket.CharacterLogonRequest: OnCharacterLogonRequest(new RealmClient.CharacterLogonRequest(packetData), ref flag); break; case RealmClientPacket.JoinGameRequest: OnJoinGameRequest(new RealmClient.JoinGameRequest(packetData), ref flag); break; } } catch (Exception ex) { Console.WriteLine(PacketID.ToString() + ": " + ex.Message); } }
private void SendData(byte[] data, PacketFlag flag) { HashSet<Contact> childrenCopy = new HashSet<Contact>(); HashSet<Contact> timedOut = new HashSet<Contact>(); foreach (var item in children) if (item.Value + ChildrenTimeout > DateTime.Now) childrenCopy.Add(item.Key); else timedOut.Add(item.Key); DateTime d; foreach (var child in timedOut) children.TryRemove(child, out d); foreach (var child in childrenCopy.Where(a => a != null).Where(a => !a.Equals(RoutingTable.LocalContact))) Send(child, ConsumerId, (byte)flag, data); }
void BnetProxy_OnBnetAuthRequest(BnetClient.BnetAuthRequest packet, ref PacketFlag flag) { this.ProxyServer.RaiseAttachDiabloWindow(this.Proxy, packet.OwnerName); }
protected abstract void BattleNetToDiablo(byte[] data, ref PacketFlag flag);
private void BnetProxy_OnRealmLogonResponse(BnetServer.RealmLogonResponse packet, ref PacketFlag flag) { this.RealmAddress = packet.RealmServerIP; this.RealmPort = packet.RealmServerPort; string ip = packet.RealmServerIP.ToString(); this.Username = packet.Username; flag = PacketFlag.PacketFlag_Hidden; this.SendToDiablo(packet.PatchedByteArray()); }
void GameProxy_OnSendMessage(GameClient.SendMessage Packet, ref PacketFlag flag) { flag = PacketFlag.PacketFlag_Hidden; this.CompressSendToDiablo(GameServer.GameMessage.Build(D2Data.GameMessageType.GameMessage, "BlueVex2", "Hello World")); }
protected override void DiabloToBattleNet(byte[] data, ref PacketFlag flag) { GameClientPacket packetId = (GameClientPacket)data[0]; try { switch (packetId) { case GameClientPacket.GameLogonRequest: OnGameLogonRequest(new GameClient.GameLogonRequest(data), ref flag); break; case GameClientPacket.WalkToLocation: OnWalkToLocation(new GameClient.WalkToLocation(data), ref flag); break; case GameClientPacket.WalkToTarget: OnWalkToTarget(new GameClient.WalkToTarget(data), ref flag); break; case GameClientPacket.RunToLocation: OnRunToLocation(new GameClient.RunToLocation(data), ref flag); break; case GameClientPacket.RunToTarget: OnRunToTarget(new GameClient.RunToTarget(data), ref flag); break; case GameClientPacket.CastLeftSkill: OnCastLeftSkill(new GameClient.CastLeftSkill(data), ref flag); break; case GameClientPacket.CastLeftSkillOnTarget: OnCastLeftSkillOnTarget(new GameClient.CastLeftSkillOnTarget(data), ref flag); break; case GameClientPacket.CastLeftSkillOnTargetStopped: OnCastLeftSkillOnTargetStopped(new GameClient.CastLeftSkillOnTargetStopped(data), ref flag); break; case GameClientPacket.RecastLeftSkill: OnRecastLeftSkill(new GameClient.RecastLeftSkill(data), ref flag); break; case GameClientPacket.RecastLeftSkillOnTarget: OnRecastLeftSkillOnTarget(new GameClient.RecastLeftSkillOnTarget(data), ref flag); break; case GameClientPacket.RecastLeftSkillOnTargetStopped: OnRecastLeftSkillOnTargetStopped(new GameClient.RecastLeftSkillOnTargetStopped(data), ref flag); break; case GameClientPacket.CastRightSkill: OnCastRightSkill(new GameClient.CastRightSkill(data), ref flag); break; case GameClientPacket.CastRightSkillOnTarget: OnCastRightSkillOnTarget(new GameClient.CastRightSkillOnTarget(data), ref flag); break; case GameClientPacket.CastRightSkillOnTargetStopped: OnCastRightSkillOnTargetStopped(new GameClient.CastRightSkillOnTargetStopped(data), ref flag); break; case GameClientPacket.RecastRightSkill: OnRecastRightSkill(new GameClient.RecastRightSkill(data), ref flag); break; case GameClientPacket.RecastRightSkillOnTarget: OnRecastRightSkillOnTarget(new GameClient.RecastRightSkillOnTarget(data), ref flag); break; case GameClientPacket.RecastRightSkillOnTargetStopped: OnRecastRightSkillOnTargetStopped(new GameClient.RecastRightSkillOnTargetStopped(data), ref flag); break; case GameClientPacket.UnitInteract: OnUnitInteract(new GameClient.UnitInteract(data), ref flag); break; case GameClientPacket.SendOverheadMessage: OnSendOverheadMessage(new GameClient.SendOverheadMessage(data), ref flag); break; case GameClientPacket.SendMessage: OnSendMessage(new GameClient.SendMessage(data), ref flag); break; case GameClientPacket.PickItem: OnPickItem(new GameClient.PickItem(data), ref flag); break; case GameClientPacket.DropItem: OnDropItem(new GameClient.DropItem(data), ref flag); break; case GameClientPacket.DropItemToContainer: OnDropItemToContainer(new GameClient.DropItemToContainer(data), ref flag); break; case GameClientPacket.PickItemFromContainer: OnPickItemFromContainer(new GameClient.PickItemFromContainer(data), ref flag); break; case GameClientPacket.EquipItem: OnEquipItem(new GameClient.EquipItem(data), ref flag); break; case GameClientPacket.UnequipItem: OnUnequipItem(new GameClient.UnequipItem(data), ref flag); break; case GameClientPacket.SwapEquippedItem: OnSwapEquippedItem(new GameClient.SwapEquippedItem(data), ref flag); break; case GameClientPacket.SwapContainerItem: OnSwapContainerItem(new GameClient.SwapContainerItem(data), ref flag); break; case GameClientPacket.UseInventoryItem: OnUseInventoryItem(new GameClient.UseInventoryItem(data), ref flag); break; case GameClientPacket.StackItems: OnStackItems(new GameClient.StackItems(data), ref flag); break; case GameClientPacket.AddBeltItem: OnAddBeltItem(new GameClient.AddBeltItem(data), ref flag); break; case GameClientPacket.RemoveBeltItem: OnRemoveBeltItem(new GameClient.RemoveBeltItem(data), ref flag); break; case GameClientPacket.SwapBeltItem: OnSwapBeltItem(new GameClient.SwapBeltItem(data), ref flag); break; case GameClientPacket.UseBeltItem: OnUseBeltItem(new GameClient.UseBeltItem(data), ref flag); break; case GameClientPacket.IdentifyItem: OnIdentifyItem(new GameClient.IdentifyItem(data), ref flag); break; case GameClientPacket.EmbedItem: OnEmbedItem(new GameClient.EmbedItem(data), ref flag); break; case GameClientPacket.ItemToCube: OnItemToCube(new GameClient.ItemToCube(data), ref flag); break; case GameClientPacket.TownFolkInteract: OnTownFolkInteract(new GameClient.TownFolkInteract(data), ref flag); break; case GameClientPacket.TownFolkCancelInteraction: OnTownFolkCancelInteraction(new GameClient.TownFolkCancelInteraction(data), ref flag); break; case GameClientPacket.DisplayQuestMessage: OnDisplayQuestMessage(new GameClient.DisplayQuestMessage(data), ref flag); break; case GameClientPacket.BuyItem: OnBuyItem(new GameClient.BuyItem(data), ref flag); break; case GameClientPacket.SellItem: OnSellItem(new GameClient.SellItem(data), ref flag); break; case GameClientPacket.CainIdentifyItems: OnCainIdentifyItems(new GameClient.CainIdentifyItems(data), ref flag); break; case GameClientPacket.TownFolkRepair: OnTownFolkRepair(new GameClient.TownFolkRepair(data), ref flag); break; case GameClientPacket.HireMercenary: OnHireMercenary(new GameClient.HireMercenary(data), ref flag); break; case GameClientPacket.IdentifyGambleItem: OnIdentifyGambleItem(new GameClient.IdentifyGambleItem(data), ref flag); break; case GameClientPacket.TownFolkMenuSelect: OnTownFolkMenuSelect(new GameClient.TownFolkMenuSelect(data), ref flag); break; case GameClientPacket.IncrementAttribute: OnIncrementAttribute(new GameClient.IncrementAttribute(data), ref flag); break; case GameClientPacket.IncrementSkill: OnIncrementSkill(new GameClient.IncrementSkill(data), ref flag); break; case GameClientPacket.SelectSkill: OnSelectSkill(new GameClient.SelectSkill(data), ref flag); break; case GameClientPacket.HoverUnit: OnHoverUnit(new GameClient.HoverUnit(data), ref flag); break; case GameClientPacket.SendCharacterSpeech: OnSendCharacterSpeech(new GameClient.SendCharacterSpeech(data), ref flag); break; case GameClientPacket.RequestQuestLog: OnRequestQuestLog(new GameClient.RequestQuestLog(data), ref flag); break; case GameClientPacket.Respawn: OnRespawn(new GameClient.Respawn(data), ref flag); break; case GameClientPacket.WaypointInteract: OnWaypointInteract(new GameClient.WaypointInteract(data), ref flag); break; case GameClientPacket.RequestReassign: OnRequestReassign(new GameClient.RequestReassign(data), ref flag); break; case GameClientPacket.ClickButton: OnClickButton(new GameClient.ClickButton(data), ref flag); break; case GameClientPacket.DropGold: OnDropGold(new GameClient.DropGold(data), ref flag); break; case GameClientPacket.SetSkillHotkey: OnSetSkillHotkey(new GameClient.SetSkillHotkey(data), ref flag); break; case GameClientPacket.CloseQuest: OnCloseQuest(new GameClient.CloseQuest(data), ref flag); break; case GameClientPacket.GoToTownFolk: OnGoToTownFolk(new GameClient.GoToTownFolk(data), ref flag); break; case GameClientPacket.SetPlayerRelation: OnSetPlayerRelation(new GameClient.SetPlayerRelation(data), ref flag); break; case GameClientPacket.PartyRequest: OnPartyRequest(new GameClient.PartyRequest(data), ref flag); break; case GameClientPacket.UpdatePosition: OnUpdatePosition(new GameClient.UpdatePosition(data), ref flag); break; case GameClientPacket.SwitchWeapons: OnSwitchWeapons(new GameClient.SwitchWeapons(data), ref flag); break; case GameClientPacket.ChangeMercEquipment: OnChangeMercEquipment(new GameClient.ChangeMercEquipment(data), ref flag); break; case GameClientPacket.ResurrectMerc: OnResurrectMerc(new GameClient.ResurrectMerc(data), ref flag); break; case GameClientPacket.InventoryItemToBelt: OnInventoryItemToBelt(new GameClient.InventoryItemToBelt(data), ref flag); break; case GameClientPacket.WardenResponse: OnWardenResponse(new GameClient.WardenResponse(data), ref flag); break; case GameClientPacket.ExitGame: OnExitGame(new GameClient.ExitGame(data), ref flag); break; case GameClientPacket.EnterGame: OnEnterGame(new GameClient.EnterGame(data), ref flag); break; case GameClientPacket.Ping: OnPing(new GameClient.Ping(data), ref flag); break; case GameClientPacket.GoToLocation: OnGoToLocation(new GameClient.GoToLocation(data), ref flag); break; case GameClientPacket.GoToTarget: OnGoToTarget(new GameClient.GoToTarget(data), ref flag); break; } } catch (Exception ex) { Console.WriteLine(packetId.ToString() + ": " + ex.Message); } }
public TrackableHeader(int requestId, PacketFlag flag) : base(PacketType.Trackable) { PacketFlag = flag; RequestId = requestId; }
protected abstract void DiabloToBattleNet(byte[] data, ref PacketFlag flag);
public virtual BasicHeader Deserialize(RecyclableMemoryStream target) { PacketType = (PacketType)target.ReadByte(); PacketFlag = (PacketFlag)target.ReadByte(); return(this); }
void GameProxy_OnGameLogonRequest(GameClient.GameLogonRequest Packet, ref PacketFlag flag) { string playerName = Packet.Name; RealmProxy realmProxy = ProxyServer.FindRealmProxyForGame(playerName); realmProxy.Proxy.GameProxy = this; this.Proxy = realmProxy.Proxy; }
// Store the game name and password when joining a game void proxy_OnJoinGameRequest(RealmClient.JoinGameRequest packet, ref PacketFlag flag) { gameName = packet.Name; gamePassword = packet.Password; }
protected override void BattleNetToDiablo(byte[] data, ref PacketFlag flag) { GameServerPacket packetId = (GameServerPacket)data[0]; try { switch (packetId) { case GameServerPacket.AboutPlayer: OnAboutPlayer(new GameServer.AboutPlayer(data), ref flag); break; case GameServerPacket.AcceptTrade: OnAcceptTrade(new GameServer.AcceptTrade(data), ref flag); break; case GameServerPacket.AddUnit: OnAddUnit(new GameServer.AddUnit(data), ref flag); break; case GameServerPacket.AssignGameObject: OnAssignGameObject(new GameServer.AssignGameObject(data), ref flag); break; case GameServerPacket.AssignMerc: OnAssignMerc(new GameServer.AssignMerc(data), ref flag); break; case GameServerPacket.AssignNPC: OnAssignNPC(new GameServer.AssignNPC(data), ref flag); break; case GameServerPacket.AssignPlayer: OnAssignPlayer(new GameServer.AssignPlayer(data), ref flag); break; case GameServerPacket.AssignPlayerCorpse: OnAssignPlayerCorpse(new GameServer.AssignPlayerCorpse(data), ref flag); break; case GameServerPacket.AssignPlayerToParty: OnAssignPlayerToParty(new GameServer.AssignPlayerToParty(data), ref flag); break; case GameServerPacket.AssignSkill: OnAssignSkill(new GameServer.AssignSkill(data), ref flag); break; case GameServerPacket.AssignSkillHotkey: OnAssignSkillHotkey(new GameServer.AssignSkillHotkey(data), ref flag); break; case GameServerPacket.AssignWarp: OnAssignWarp(new GameServer.AssignWarp(data), ref flag); break; case GameServerPacket.AttributeByte: OnAttributeNotification(new GameServer.AttributeByte(data), ref flag); break; case GameServerPacket.AttributeDWord: OnAttributeNotification(new GameServer.AttributeDWord(data), ref flag); break; case GameServerPacket.AttributeWord: OnAttributeNotification(new GameServer.AttributeWord(data), ref flag); break; case GameServerPacket.ByteToExperience: OnGainExperience(new GameServer.ByteToExperience(data), ref flag); break; case GameServerPacket.DelayedState: OnDelayedState(new GameServer.DelayedState(data), ref flag); break; case GameServerPacket.DWordToExperience: OnGainExperience(new GameServer.DWordToExperience(data), ref flag); break; case GameServerPacket.EndState: OnEndState(new GameServer.EndState(data), ref flag); break; case GameServerPacket.GameHandshake: OnGameHandshake(new GameServer.GameHandshake(data), ref flag); break; case GameServerPacket.GameLoading: OnGameLoading(new GameServer.GameLoading(data), ref flag); break; case GameServerPacket.GameLogonReceipt: OnGameLogonReceipt(new GameServer.GameLogonReceipt(data), ref flag); break; case GameServerPacket.GameLogonSuccess: OnGameLogonSuccess(new GameServer.GameLogonSuccess(data), ref flag); break; case GameServerPacket.GameLogoutSuccess: OnGameLogoutSuccess(new GameServer.GameLogoutSuccess(data), ref flag); break; case GameServerPacket.GameMessage: OnReceiveMessage(new GameServer.GameMessage(data), ref flag); break; case GameServerPacket.GameOver: OnGameOver(new GameServer.GameOver(data), ref flag); break; case GameServerPacket.GoldTrade: OnGoldTrade(new GameServer.GoldTrade(data), ref flag); break; case GameServerPacket.InformationMessage: OnInformationMessage(new GameServer.InformationMessage(data), ref flag); break; case GameServerPacket.ItemTriggerSkill: OnItemTriggerSkill(new GameServer.ItemTriggerSkill(data), ref flag); break; case GameServerPacket.LoadAct: OnLoadAct(new GameServer.LoadAct(data), ref flag); break; case GameServerPacket.LoadDone: OnLoadDone(new GameServer.LoadDone(data), ref flag); break; case GameServerPacket.MapAdd: OnMapAdd(new GameServer.MapAdd(data), ref flag); break; case GameServerPacket.MapRemove: OnMapRemove(new GameServer.MapRemove(data), ref flag); break; case GameServerPacket.MercAttributeByte: OnMercAttributeNotification(new GameServer.MercAttributeByte(data), ref flag); break; case GameServerPacket.MercAttributeDWord: OnMercAttributeNotification(new GameServer.MercAttributeDWord(data), ref flag); break; case GameServerPacket.MercAttributeWord: OnMercAttributeNotification(new GameServer.MercAttributeWord(data), ref flag); break; case GameServerPacket.MercByteToExperience: OnMercGainExperience(new GameServer.MercByteToExperience(data), ref flag); break; case GameServerPacket.MercForHire: OnMercForHire(new GameServer.MercForHire(data), ref flag); break; case GameServerPacket.MercForHireListStart: OnMercForHireListStart(new GameServer.MercForHireListStart(data), ref flag); break; case GameServerPacket.MercWordToExperience: OnMercGainExperience(new GameServer.MercWordToExperience(data), ref flag); break; case GameServerPacket.MonsterAttack: OnMonsterAttack(new GameServer.MonsterAttack(data), ref flag); break; case GameServerPacket.NPCAction: OnNPCAction(new GameServer.NPCAction(data), ref flag); break; case GameServerPacket.NPCGetHit: OnNPCGetHit(new GameServer.NPCGetHit(data), ref flag); break; case GameServerPacket.NPCHeal: OnNPCHeal(new GameServer.NPCHeal(data), ref flag); break; case GameServerPacket.NPCInfo: OnNPCInfo(new GameServer.NPCInfo(data), ref flag); break; case GameServerPacket.NPCMove: OnNPCMove(new GameServer.NPCMove(data), ref flag); break; case GameServerPacket.NPCMoveToTarget: OnNPCMoveToTarget(new GameServer.NPCMoveToTarget(data), ref flag); break; case GameServerPacket.NPCStop: OnNPCStop(new GameServer.NPCStop(data), ref flag); break; case GameServerPacket.NPCWantsInteract: OnNPCWantsInteract(new GameServer.NPCWantsInteract(data), ref flag); break; case GameServerPacket.OpenWaypoint: OnOpenWaypoint(new GameServer.OpenWaypoint(data), ref flag); break; case GameServerPacket.OwnedItemAction: OnOwnedItemAction(new GameServer.OwnedItemAction(data), ref flag); break; case GameServerPacket.PartyMemberPulse: OnPartyMemberPulse(new GameServer.PartyMemberPulse(data), ref flag); break; case GameServerPacket.PartyMemberUpdate: OnPartyMemberUpdate(new GameServer.PartyMemberUpdate(data), ref flag); break; case GameServerPacket.PartyRefresh: OnPartyRefresh(new GameServer.PartyRefresh(data), ref flag); break; case GameServerPacket.PlayerAttributeNotification: OnPlayerAttributeNotification(new GameServer.PlayerAttributeNotification(data), ref flag); break; case GameServerPacket.PlayerClearCursor: OnPlayerClearCursor(new GameServer.PlayerClearCursor(data), ref flag); break; case GameServerPacket.PlayerCorpseVisible: OnPlayerCorpseVisible(new GameServer.PlayerCorpseVisible(data), ref flag); break; case GameServerPacket.PlayerInGame: OnPlayerInGame(new GameServer.PlayerInGame(data), ref flag); break; case GameServerPacket.PlayerInSight: OnPlayerInSight(new GameServer.PlayerInSight(data), ref flag); break; case GameServerPacket.PlayerKillCount: OnPlayerKillCount(new GameServer.PlayerKillCount(data), ref flag); break; case GameServerPacket.PlayerLeaveGame: OnPlayerLeaveGame(new GameServer.PlayerLeaveGame(data), ref flag); break; case GameServerPacket.PlayerLifeManaChange: OnPlayerLifeManaChange(new GameServer.PlayerLifeManaChange(data), ref flag); break; case GameServerPacket.PlayerMove: OnPlayerMove(new GameServer.PlayerMove(data), ref flag); break; case GameServerPacket.PlayerMoveToTarget: OnPlayerMoveToTarget(new GameServer.PlayerMoveToTarget(data), ref flag); break; case GameServerPacket.PlayerPartyRelationship: OnPlayerPartyRelationship(new GameServer.PlayerPartyRelationship(data), ref flag); break; case GameServerPacket.PlayerReassign: OnPlayerReassign(new GameServer.PlayerReassign(data), ref flag); break; case GameServerPacket.PlayerRelationship: OnPlayerRelationship(new GameServer.PlayerRelationship(data), ref flag); break; case GameServerPacket.PlayerStop: OnPlayerStop(new GameServer.PlayerStop(data), ref flag); break; case GameServerPacket.PlaySound: OnPlaySound(new GameServer.PlaySound(data), ref flag); break; case GameServerPacket.Pong: OnPong(new GameServer.Pong(data), ref flag); break; case GameServerPacket.PortalInfo: OnPortalInfo(new GameServer.PortalInfo(data), ref flag); break; case GameServerPacket.PortalOwnership: OnPortalOwnership(new GameServer.PortalOwnership(data), ref flag); break; case GameServerPacket.QuestItemState: OnQuestItemState(new GameServer.QuestItemState(data), ref flag); break; case GameServerPacket.Relator1: OnRelator1(new GameServer.Relator1(data), ref flag); break; case GameServerPacket.Relator2: OnRelator2(new GameServer.Relator2(data), ref flag); break; case GameServerPacket.RemoveGroundUnit: OnRemoveGroundUnit(new GameServer.RemoveGroundUnit(data), ref flag); break; case GameServerPacket.ReportKill: OnReportKill(new GameServer.ReportKill(data), ref flag); break; case GameServerPacket.RequestLogonInfo: OnRequestLogonInfo(new GameServer.RequestLogonInfo(data), ref flag); break; case GameServerPacket.SetGameObjectMode: OnSetGameObjectMode(new GameServer.SetGameObjectMode(data), ref flag); break; case GameServerPacket.SetItemState: OnSetItemState(new GameServer.SetItemState(data), ref flag); break; case GameServerPacket.SetNPCMode: OnSetNPCMode(new GameServer.SetNPCMode(data), ref flag); break; case GameServerPacket.SetState: OnSetState(new GameServer.SetState(data), ref flag); break; case GameServerPacket.SkillsLog: OnSkillsLog(new GameServer.SkillsLog(data), ref flag); break; case GameServerPacket.SmallGoldAdd: OnSmallGoldAdd(new GameServer.SmallGoldAdd(data), ref flag); break; case GameServerPacket.SummonAction: OnSummonAction(new GameServer.SummonAction(data), ref flag); break; case GameServerPacket.SwitchWeaponSet: OnSwitchWeaponSet(new GameServer.SwitchWeaponSet(data), ref flag); break; case GameServerPacket.TransactionComplete: OnTransactionComplete(new GameServer.TransactionComplete(data), ref flag); break; case GameServerPacket.UnitUseSkill: OnUnitUseSkill(new GameServer.UnitUseSkill(data), ref flag); break; case GameServerPacket.UnitUseSkillOnTarget: OnUnitUseSkillOnTarget(new GameServer.UnitUseSkillOnTarget(data), ref flag); break; case GameServerPacket.UnloadDone: OnUnloadDone(new GameServer.UnloadDone(data), ref flag); break; case GameServerPacket.UpdateGameQuestLog: OnUpdateGameQuestLog(new GameServer.UpdateGameQuestLog(data), ref flag); break; case GameServerPacket.UpdateItemStats: OnUpdateItemStats(new GameServer.UpdateItemStats(data), ref flag); break; case GameServerPacket.UpdateItemUI: OnUpdateItemUI(new GameServer.UpdateItemUI(data), ref flag); break; case GameServerPacket.UpdatePlayerItemSkill: OnUpdatePlayerItemSkill(new GameServer.UpdatePlayerItemSkill(data), ref flag); break; case GameServerPacket.UpdateQuestInfo: OnUpdateQuestInfo(new GameServer.UpdateQuestInfo(data), ref flag); break; case GameServerPacket.UpdateQuestLog: OnUpdateQuestLog(new GameServer.UpdateQuestLog(data), ref flag); break; case GameServerPacket.UpdateSkill: OnUpdateSkill(new GameServer.UpdateSkill(data), ref flag); break; case GameServerPacket.UseSpecialItem: OnUseSpecialItem(new GameServer.UseSpecialItem(data), ref flag); break; case GameServerPacket.UseStackableItem: OnUseStackableItem(new GameServer.UseStackableItem(data), ref flag); break; case GameServerPacket.WalkVerify: OnWalkVerify(new GameServer.WalkVerify(data), ref flag); break; case GameServerPacket.WardenCheck: OnWardenCheck(new GameServer.WardenCheck(data), ref flag); break; case GameServerPacket.WordToExperience: OnGainExperience(new GameServer.WordToExperience(data), ref flag); break; case GameServerPacket.WorldItemAction: OnWorldItemAction(new GameServer.WorldItemAction(data), ref flag); break; } } catch (Exception ex) { Console.WriteLine(packetId.ToString() + ": " + ex.Message); } }
/// <summary> /// 发送一个消息包 /// </summary> /// <param name="packet"></param> /// <param name="needencrypt">是否加密</param> /// <returns></returns> public override void SendPacket(Packet packet, bool encrypt_if_need) { if (m_sendlock == null) { UnityEngine.Debug.Log("m_sendlock == null"); return; } lock (this) { packet.SerialNumber = m_lastSendPacketSerialNumber; m_lastSendPacketSerialNumber++; byte[] data = packet.ToArray(); int datalength = packet.Length; PacketFlag packetflag = packet.PacketFlag; //加密,压缩消息包 if (m_secure_connection && m_connectionState == ConnectionState.Connected) { if (tls_sendSecureBuffer == null) { tls_sendSecureBuffer = new byte[Packet.MaxLength]; } //压缩 bool compressed = false; #if _NC_Compress if (data.Length > Packet.NeedCompressMinLength) { int outlen = Compress.LZO.Compress(data, Packet.NoCryptHeaderLength, data.Length - Packet.NoCryptHeaderLength, tls_sendSecureBuffer, Packet.NoCryptHeaderLength); if (outlen <= (data.Length - 20)) //压缩有实际效果 { //Buffer.BlockCopy(m_sendSecureBuffer, 0, data, Packet.NoCryptHeaderLength, outlen); datalength = outlen + Packet.NoCryptHeaderLength; Buffer.BlockCopy(data, 0, tls_sendSecureBuffer, 0, Packet.NoCryptHeaderLength); if (m_compressneedchecksum) { uint crccheck = HashHelp.CRC32hash(tls_sendSecureBuffer, Packet.NoCryptHeaderLength, outlen); ArrayUtility.SetInt(tls_sendSecureBuffer, (int)crccheck, datalength); datalength += 4; } packetflag |= PacketFlag.Compressed; data = tls_sendSecureBuffer; compressed = true; } } if (encrypt_if_need && m_encrypt != null) { if (!compressed) { Buffer.BlockCopy(data, 0, tls_sendSecureBuffer, 0, datalength); data = tls_sendSecureBuffer; } m_encrypt.Encrypt(data, Packet.NoCryptHeaderLength, datalength - Packet.NoCryptHeaderLength); packetflag |= PacketFlag.Encrypted; } #endif } //设置消息长度 ArrayUtility.SetByte(data, (byte)packetflag, Packet.OffsetFlag); ArrayUtility.SetShort(data, (short)datalength, Packet.OffsetLength); this.Send(data, datalength); } }