diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_10.3_MasterClass/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/GameClient.java index f5e773f25c..448d04a051 100644 --- a/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_C4_ScionsOfDestiny/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -185,28 +186,34 @@ public class GameClient extends NetClient return; } + // Keep the order of packets if sent by multiple threads. _pendingPackets.add(packet); synchronized (_pendingPackets) { - try + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - if ((getChannel() != null) && getChannel().isConnected()) + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); + if (byteBuffer != null) { - final ServerPacket nextPacket = _pendingPackets.poll(); - final ByteBuffer byteBuffer = nextPacket.getSendableByteBuffer(_encryption); - if (byteBuffer != null) + // Send the packet data. + try { - // Send the packet data. - getChannel().write(byteBuffer); - - // Run packet implementation. - nextPacket.run(_player); + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } } + catch (Exception ignored) + { + } + + // Run packet implementation. + sendPacket.run(_player); } } - catch (Exception ignored) - { - } } } diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/GameClient.java index 12b0b79ae2..8a1706a715 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -177,40 +178,35 @@ public class GameClient extends NetClient return; } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/network/GameClient.java index 60a11a8b99..b92e098bee 100644 --- a/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -194,40 +195,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/network/GameClient.java index 60a11a8b99..b92e098bee 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -194,40 +195,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/network/GameClient.java index fff81b5d35..24773f06f4 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -201,40 +202,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/network/GameClient.java index 0511f7df6b..f86571e675 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId) diff --git a/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/GameClient.java b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/GameClient.java index c94108a4d2..b179e4f968 100644 --- a/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/GameClient.java +++ b/L2J_Mobius_Essence_6.3_Crusader/java/org/l2jmobius/gameserver/network/GameClient.java @@ -17,6 +17,7 @@ package org.l2jmobius.gameserver.network; import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -219,40 +220,35 @@ public class GameClient extends NetClient } } - if (Config.PACKET_ENCRYPTION) + // Keep the order of packets if sent by multiple threads. + _pendingPackets.add(packet); + synchronized (_pendingPackets) { - _pendingPackets.add(packet); - synchronized (_pendingPackets) + final SocketChannel channel = getChannel(); + if ((channel != null) && channel.isConnected()) { - writePacket(_pendingPackets.poll()); - } - } - else - { - writePacket(packet); - } - } - - private void writePacket(ServerPacket packet) - { - try - { - if ((getChannel() != null) && getChannel().isConnected()) - { - final ByteBuffer byteBuffer = packet.getSendableByteBuffer(_encryption); + final ServerPacket sendPacket = _pendingPackets.poll(); + final ByteBuffer byteBuffer = sendPacket.getSendableByteBuffer(_encryption); if (byteBuffer != null) { // Send the packet data. - getChannel().write(byteBuffer); + try + { + // Loop while there are remaining bytes in the buffer. + while (byteBuffer.hasRemaining()) + { + channel.write(byteBuffer); + } + } + catch (Exception ignored) + { + } // Run packet implementation. - packet.run(_player); + sendPacket.run(_player); } } } - catch (Exception ignored) - { - } } public void sendPacket(SystemMessageId systemMessageId)