Let ServerPacket Handle the writting of packet data.

This commit is contained in:
hondacrx
2017-07-06 11:01:31 -04:00
parent a6b30c73e4
commit 210a2958ff
18 changed files with 73 additions and 80 deletions
+1
View File
@@ -637,6 +637,7 @@ namespace Game.Achievements
achievementEarned.EarnerNativeRealm = achievementEarned.EarnerVirtualRealm = Global.WorldMgr.GetVirtualRealmAddress();
achievementEarned.AchievementID = achievement.Id;
achievementEarned.Time = Time.UnixTime;
if (!achievement.Flags.HasAnyFlag(AchievementFlags.TrackingFlag))
_owner.SendMessageToSetInRange(achievementEarned, WorldConfig.GetFloatValue(WorldCfg.ListenRangeSay), true);
else
+1 -2
View File
@@ -349,13 +349,12 @@ namespace Game.BattleGrounds
timer.Type = TimerType.Pvp;
timer.TimeRemaining = countdownMaxForBGType - (GetElapsedTime() / 1000);
timer.TotalTime = countdownMaxForBGType;
timer.Write();
foreach (var guid in GetPlayers().Keys)
{
Player player = Global.ObjAccessor.FindPlayer(guid);
if (player)
player.SendPacket(timer, false);
player.SendPacket(timer);
}
m_CountdownTimer = 0;
+2 -3
View File
@@ -376,11 +376,10 @@ namespace Game.Entities
DuelComplete duelCompleted = new DuelComplete();
duelCompleted.Started = type != DuelCompleteType.Interrupted;
duelCompleted.Write();
SendPacket(duelCompleted, false);
SendPacket(duelCompleted);
if (duel.opponent.GetSession() != null)
duel.opponent.SendPacket(duelCompleted, false);
duel.opponent.SendPacket(duelCompleted);
if (type != DuelCompleteType.Interrupted)
{
+4 -4
View File
@@ -982,9 +982,9 @@ namespace Game.Entities
new PlayerAI GetAI() { return (PlayerAI)i_AI; }
//Network
public void SendPacket(ServerPacket data, bool writePacket = true)
public void SendPacket(ServerPacket data)
{
Session.SendPacket(data, writePacket);
Session.SendPacket(data);
}
//Time
@@ -5298,6 +5298,8 @@ namespace Game.Entities
if (WorldConfig.GetBoolValue(WorldCfg.AlwaysMaxskill)) // Max weapon skill when leveling up
UpdateSkillsToMaxSkillsForLevel();
_ApplyAllLevelScaleItemMods(true); // Moved to above SetFullHealth so player will have full health from Heirlooms
// set current level health and mana/energy to maximum after applying all mods.
SetFullHealth();
SetPower(PowerType.Mana, GetMaxPower(PowerType.Mana));
@@ -5306,8 +5308,6 @@ namespace Game.Entities
SetPower(PowerType.Rage, GetMaxPower(PowerType.Rage));
SetPower(PowerType.Focus, 0);
_ApplyAllLevelScaleItemMods(true);
// update level to hunter/summon pet
Pet pet = GetPet();
if (pet)
+2 -2
View File
@@ -64,7 +64,7 @@ namespace Game.Entities
playScene.Location = position;
playScene.TransportGUID = GetPlayer().GetTransGUID();
GetPlayer().SendPacket(playScene, true);
GetPlayer().SendPacket(playScene);
AddInstanceIdToSceneMap(sceneInstanceID, sceneTemplate);
@@ -91,7 +91,7 @@ namespace Game.Entities
CancelScene cancelScene = new CancelScene();
cancelScene.SceneInstanceID = sceneInstanceID;
GetPlayer().SendPacket(cancelScene, true);
GetPlayer().SendPacket(cancelScene);
}
public void OnSceneTrigger(uint sceneInstanceID, string triggerName)
+1 -3
View File
@@ -94,8 +94,6 @@ namespace Game.Entities
if (!player)
return;
packet.Write();
AccountTypes gmSecLevel = (AccountTypes)WorldConfig.GetIntValue(WorldCfg.GmLevelInWhoList);
foreach (var pair in _socialMap)
{
@@ -114,7 +112,7 @@ namespace Game.Entities
continue;
if (player.IsVisibleGloballyFor(target))
session.SendPacket(packet, false);
session.SendPacket(packet);
}
}
}
+1 -3
View File
@@ -562,8 +562,6 @@ namespace Game.Entities
i_source = src;
i_message = msg;
i_distSq = dist;
i_message.Write();
}
bool IsInRangeHelper(WorldObject obj)
@@ -636,7 +634,7 @@ namespace Game.Entities
if (!player.IsAdvancedCombatLoggingEnabled())
i_message.DisableAdvancedCombatLogging();
player.SendPacket(i_message, false);
player.SendPacket(i_message);
}
WorldObject i_source;
+6 -12
View File
@@ -823,7 +823,6 @@ namespace Game.Groups
lootRoll.Roll = rollNumber;
lootRoll.RollType = rollType;
roll.FillPacket(lootRoll.Item);
lootRoll.Write();
foreach (var pair in roll.playerVote)
{
@@ -832,7 +831,7 @@ namespace Game.Groups
continue;
if (pair.Value != RollType.NotValid)
p.SendPacket(lootRoll, false);
p.SendPacket(lootRoll);
}
}
@@ -845,7 +844,6 @@ namespace Game.Groups
lootRollWon.RollType = rollType;
roll.FillPacket(lootRollWon.Item);
lootRollWon.MainSpec = true; // offspec rolls not implemented
lootRollWon.Write();
foreach (var pair in roll.playerVote)
{
@@ -854,7 +852,7 @@ namespace Game.Groups
continue;
if (pair.Value != RollType.NotValid)
p.SendPacket(lootRollWon, false);
p.SendPacket(lootRollWon);
}
}
@@ -863,7 +861,6 @@ namespace Game.Groups
LootAllPassed lootAllPassed = new LootAllPassed();
lootAllPassed.LootObj = roll.getTarget().GetGUID();
roll.FillPacket(lootAllPassed.Item);
lootAllPassed.Write();
foreach (var pair in roll.playerVote)
{
@@ -872,7 +869,7 @@ namespace Game.Groups
continue;
if (pair.Value != RollType.NotValid)
player.SendPacket(lootAllPassed, false);
player.SendPacket(lootAllPassed);
}
}
@@ -881,7 +878,6 @@ namespace Game.Groups
LootRollsComplete lootRollsComplete = new LootRollsComplete();
lootRollsComplete.LootObj = roll.getTarget().GetGUID();
lootRollsComplete.LootListID = (byte)(roll.itemSlot + 1);
lootRollsComplete.Write();
foreach (var pair in roll.playerVote)
{
@@ -890,7 +886,7 @@ namespace Game.Groups
continue;
if (pair.Value != RollType.NotValid)
player.SendPacket(lootRollsComplete, false);
player.SendPacket(lootRollsComplete);
}
}
@@ -1443,13 +1439,12 @@ namespace Game.Groups
PartyMemberState packet = new PartyMemberState();
packet.Initialize(player);
packet.Write();
for (GroupReference refe = GetFirstMember(); refe != null; refe = refe.next())
{
Player member = refe.GetSource();
if (member && member != player && (!member.IsInMap(player) || !member.IsWithinDist(player, member.GetSightRange(), false)))
member.SendPacket(packet, false);
member.SendPacket(packet);
}
}
@@ -1469,7 +1464,6 @@ namespace Game.Groups
public void BroadcastPacket(ServerPacket packet, bool ignorePlayersInBGRaid, int group = -1, ObjectGuid ignore = default(ObjectGuid))
{
packet.Write();
for (GroupReference refe = GetFirstMember(); refe != null; refe = refe.next())
{
Player player = refe.GetSource();
@@ -1477,7 +1471,7 @@ namespace Game.Groups
continue;
if (player.GetSession() != null && (group == -1 || refe.getSubGroup() == group))
player.SendPacket(packet, false);
player.SendPacket(packet);
}
}
+3 -6
View File
@@ -1402,39 +1402,36 @@ namespace Game.Guilds
public void BroadcastPacketToRank(ServerPacket packet, byte rankId)
{
packet.Write();
foreach (var member in m_members.Values)
{
if (member.IsRank(rankId))
{
Player player = member.FindPlayer();
if (player != null)
player.SendPacket(packet, false);
player.SendPacket(packet);
}
}
}
public void BroadcastPacket(ServerPacket packet)
{
packet.Write();
foreach (var member in m_members.Values)
{
Player player = member.FindPlayer();
if (player != null)
player.SendPacket(packet, false);
player.SendPacket(packet);
}
}
public void BroadcastPacketIfTrackingAchievement(ServerPacket packet, uint criteriaId)
{
packet.Write();
foreach (var member in m_members.Values)
{
if (member.IsTrackingCriteriaId(criteriaId))
{
Player player = member.FindPlayer();
if (player)
player.SendPacket(packet, false);
player.SendPacket(packet);
}
}
}
+1 -1
View File
@@ -342,7 +342,7 @@ namespace Game.Guilds
Player player = Global.ObjAccessor.FindPlayer(guild.GetLeaderGUID());
if (player)
player.SendPacket(applicantListChanged, false);
player.SendPacket(applicantListChanged);
}
void SendMembershipRequestListUpdate(Player player)
+2 -3
View File
@@ -74,10 +74,9 @@ namespace Game
plTarget.duel.startTimer = now;
DuelCountdown packet = new DuelCountdown(3000);
packet.Write();
player.SendPacket(packet, false);
plTarget.SendPacket(packet, false);
player.SendPacket(packet);
plTarget.SendPacket(packet);
}
void HandleDuelCancelled()
+7 -10
View File
@@ -785,10 +785,10 @@ namespace Game.Maps
obj.BuildOutOfRangeUpdateBlock(data);
UpdateObject packet;
data.BuildPacket(out packet);
packet.Write();
foreach (var pl in players)
if (pl.GetTransport() != obj)
pl.SendPacket(packet, false);
pl.SendPacket(packet);
}
if (!_transports.Contains(obj))
@@ -2215,9 +2215,8 @@ namespace Game.Maps
public void SendToPlayers(ServerPacket data)
{
data.Write();
foreach (Player pl in m_activePlayers)
pl.SendPacket(data, false);
pl.SendPacket(data);
}
public bool ActiveObjectsNearGrid(Grid grid)
@@ -2653,11 +2652,10 @@ namespace Game.Maps
if (!players.Empty())
{
PlayMusic data = new PlayMusic(musicId);
data.Write();
foreach (var player in players)
if (player.GetZoneId() == zoneId)
player.SendPacket(data, false);
player.SendPacket(data);
}
}
@@ -2674,10 +2672,10 @@ namespace Game.Maps
if (!players.Empty())
{
WeatherPkt weather = new WeatherPkt(weatherId, weatherGrade);
weather.Write();
foreach (var player in players)
if (player.GetZoneId() == zoneId)
player.SendPacket(weather, false);
player.SendPacket(weather);
}
}
@@ -2697,11 +2695,10 @@ namespace Game.Maps
overrideLight.AreaLightID = _defaultLight;
overrideLight.OverrideLightID = lightId;
overrideLight.TransitionMilliseconds = fadeInTime;
overrideLight.Write();
foreach (var player in players)
if (player.GetZoneId() == zoneId)
player.SendPacket(overrideLight, false);
player.SendPacket(overrideLight);
}
}
+31 -14
View File
@@ -29,13 +29,13 @@ namespace Game.Network
_worldPacket = worldPacket;
}
public abstract void Read();
public void Dispose()
{
_worldPacket.Dispose();
}
public abstract void Read();
public ClientOpcodes GetOpcode() { return (ClientOpcodes)_worldPacket.GetOpcode(); }
public void LogPacket(WorldSession session)
@@ -46,7 +46,7 @@ namespace Game.Network
protected WorldPacket _worldPacket;
}
public abstract class ServerPacket : IDisposable
public abstract class ServerPacket
{
public ServerPacket(ServerOpcodes opcode)
{
@@ -60,15 +60,21 @@ namespace Game.Network
_worldPacket = new WorldPacket(opcode);
}
public void Dispose()
public void Clear()
{
_worldPacket.Dispose();
_worldPacket.Clear();
buffer = null;
}
public void Clear() { _worldPacket.Clear(); }
public ServerOpcodes GetOpcode() { return (ServerOpcodes)_worldPacket.GetOpcode(); }
public uint GetSize() { return _worldPacket.GetSize(); }
public byte[] GetData() { return _worldPacket.GetData(); }
public ServerOpcodes GetOpcode()
{
return (ServerOpcodes)_worldPacket.GetOpcode();
}
public byte[] GetData()
{
return buffer;
}
public void LogPacket(WorldSession session)
{
@@ -77,10 +83,21 @@ namespace Game.Network
public abstract void Write();
public void WritePacketData()
{
if (buffer != null)
return;
Write();
buffer = _worldPacket.GetData();
_worldPacket.Dispose();
}
public ConnectionType GetConnection() { return connectionType; }
byte[] buffer;
ConnectionType connectionType;
protected WorldPacket _worldPacket;
}
@@ -88,12 +105,12 @@ namespace Game.Network
{
public WorldPacket(ServerOpcodes opcode = ServerOpcodes.None)
{
Opcode = (uint)opcode;
this.opcode = (uint)opcode;
}
public WorldPacket(byte[] data, uint opcode) : base(data)
{
Opcode = opcode;
this.opcode = opcode;
}
public ObjectGuid ReadPackedGuid()
@@ -201,9 +218,9 @@ namespace Game.Network
WriteFloat(o);
}
public uint GetOpcode() { return Opcode; }
public uint GetOpcode() { return opcode; }
uint Opcode;
uint opcode;
}
public class ServerPacketHeader
+5 -8
View File
@@ -250,21 +250,18 @@ namespace Game.Network
return true;
}
public void SendPacket(ServerPacket packet, bool writePacket = true)
public void SendPacket(ServerPacket packet)
{
if (!IsOpen())
return;
packet.LogPacket(_worldSession);
if (writePacket)
packet.Write();
uint packetSize = packet.GetSize();
ServerOpcodes opcode = packet.GetOpcode();
packet.WritePacketData();
var data = packet.GetData();
packet.Dispose();
uint packetSize = (uint)data.Length;
ServerOpcodes opcode = packet.GetOpcode();
PacketLog.Write(data, opcode, GetRemoteIpAddress(), GetRemotePort(), _connectType);
if (packetSize > 0x400 && worldCrypt.IsInitialized)
@@ -602,7 +599,7 @@ namespace Game.Network
//else
//{
// transfer_aborted when/if we get map node redirection
// SendPacket(*WorldPackets.Auth.ResumeComms().Write());
// SendPacket(*WorldPackets.Auth.ResumeComms());
//}
}
+1 -2
View File
@@ -181,14 +181,13 @@ namespace Game.PvP
void BroadcastPacket(ServerPacket packet)
{
// This is faster than sWorld.SendZoneMessage
packet.Write();
for (int team = 0; team < 2; ++team)
{
foreach (var guid in m_players[team])
{
Player player = Global.ObjAccessor.FindPlayer(guid);
if (player)
player.SendPacket(packet, false);
player.SendPacket(packet);
}
}
}
+1 -2
View File
@@ -1401,13 +1401,12 @@ namespace Game
public bool SendZoneMessage(uint zone, ServerPacket packet, WorldSession self = null, uint team = 0)
{
bool foundPlayerToSend = false;
packet.Write();
foreach (var session in m_sessions.Values)
{
if (session != null && session.GetPlayer() && session.GetPlayer().IsInWorld &&
session.GetPlayer().GetZoneId() == zone && session != self && (team == 0 || (uint)session.GetPlayer().GetTeam() == team))
{
session.SendPacket(packet, false);
session.SendPacket(packet);
foundPlayerToSend = true;
}
}
+2 -2
View File
@@ -373,7 +373,7 @@ namespace Game
Log.outError(LogFilter.Network, "Received unexpected opcode {0} Status: {1} Reason: {2} from {3}", (ClientOpcodes)packet.GetOpcode(), status, reason, GetPlayerInfo());
}
public void SendPacket(ServerPacket packet, bool writePacket = true)
public void SendPacket(ServerPacket packet)
{
if (packet == null)
return;
@@ -397,7 +397,7 @@ namespace Game
return;
}
m_Socket[(int)conIdx].SendPacket(packet, writePacket);
m_Socket[(int)conIdx].SendPacket(packet);
}
public void AddInstanceConnection(WorldSocket sock) { m_Socket[(int)ConnectionType.Instance] = sock; }
+2 -3
View File
@@ -3636,10 +3636,9 @@ namespace Game.Spells
packet.ArbiterGUID = pGameObj.GetGUID();
packet.RequestedByGUID = caster.GetGUID();
packet.RequestedByWowAccount = caster.GetSession().GetAccountGUID();
packet.Write();
caster.SendPacket(packet, false);
target.SendPacket(packet, false);
caster.SendPacket(packet);
target.SendPacket(packet);
// create duel-info
DuelInfo duel = new DuelInfo();