mirror of https://github.com/quasar/Quasar.git
Reduced BufferSize to 16KB
This commit is contained in:
parent
4cb311f792
commit
b459c861de
|
@ -132,7 +132,7 @@ namespace xClient.Core.Networking
|
|||
/// <summary>
|
||||
/// The buffer size for receiving data in bytes.
|
||||
/// </summary>
|
||||
public int BUFFER_SIZE { get { return (1024 * 1024) * 1; } } // 1MB
|
||||
public int BUFFER_SIZE { get { return 1024 * 16; } } // 16KB
|
||||
|
||||
/// <summary>
|
||||
/// The keep-alive time in ms.
|
||||
|
@ -147,7 +147,12 @@ namespace xClient.Core.Networking
|
|||
/// <summary>
|
||||
/// The header size in bytes.
|
||||
/// </summary>
|
||||
public int HEADER_SIZE { get { return 3; } } // 3B
|
||||
public int HEADER_SIZE { get { return 4; } } // 4B
|
||||
|
||||
/// <summary>
|
||||
/// The maximum size of a packet in bytes.
|
||||
/// </summary>
|
||||
public int MAX_PACKET_SIZE { get { return (1024 * 1024) * 5; } } // 5MB
|
||||
|
||||
/// <summary>
|
||||
/// Returns an array containing all of the proxy clients of this client.
|
||||
|
@ -392,22 +397,22 @@ namespace xClient.Core.Networking
|
|||
if (_appendHeader)
|
||||
{
|
||||
Array.Copy(readBuffer, _readOffset, _tempHeader, _tempHeaderOffset, size);
|
||||
_payloadLen = (int)_tempHeader[0] | _tempHeader[1] << 8 | _tempHeader[2] << 16;
|
||||
_payloadLen = BitConverter.ToInt32(_tempHeader, 0);
|
||||
_tempHeaderOffset = 0;
|
||||
_appendHeader = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
_payloadLen = (int)readBuffer[_readOffset] | readBuffer[_readOffset + 1] << 8 |
|
||||
readBuffer[_readOffset + 2] << 16;
|
||||
_payloadLen = BitConverter.ToInt32(readBuffer, _readOffset);
|
||||
}
|
||||
|
||||
if (_payloadLen <= 0)
|
||||
if (_payloadLen <= 0 || _payloadLen > MAX_PACKET_SIZE)
|
||||
throw new Exception("invalid header");
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
process = false;
|
||||
Disconnect();
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -417,9 +422,9 @@ namespace xClient.Core.Networking
|
|||
}
|
||||
else // _parentServer.HEADER_SIZE < _readableDataLen
|
||||
{
|
||||
_appendHeader = true;
|
||||
Array.Copy(readBuffer, _readOffset, _tempHeader, _tempHeaderOffset, _readableDataLen);
|
||||
_tempHeaderOffset += _readableDataLen;
|
||||
_appendHeader = true;
|
||||
process = false;
|
||||
}
|
||||
break;
|
||||
|
@ -573,26 +578,9 @@ namespace xClient.Core.Networking
|
|||
payload = _sendBuffers.Dequeue();
|
||||
}
|
||||
|
||||
if (compressionEnabled)
|
||||
payload = SafeQuickLZ.Compress(payload);
|
||||
|
||||
if (encryptionEnabled)
|
||||
payload = AES.Encrypt(payload);
|
||||
|
||||
byte[] header = new byte[]
|
||||
{
|
||||
(byte)payload.Length,
|
||||
(byte)(payload.Length >> 8),
|
||||
(byte)(payload.Length >> 16)
|
||||
};
|
||||
|
||||
byte[] data = new byte[payload.Length + HEADER_SIZE];
|
||||
Array.Copy(header, data, header.Length);
|
||||
Array.Copy(payload, 0, data, HEADER_SIZE, payload.Length);
|
||||
|
||||
try
|
||||
{
|
||||
_handle.Send(data);
|
||||
_handle.Send(BuildPacket(payload));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
@ -603,6 +591,20 @@ namespace xClient.Core.Networking
|
|||
}
|
||||
}
|
||||
|
||||
private byte[] BuildPacket(byte[] payload)
|
||||
{
|
||||
if (compressionEnabled)
|
||||
payload = SafeQuickLZ.Compress(payload);
|
||||
|
||||
if (encryptionEnabled)
|
||||
payload = AES.Encrypt(payload);
|
||||
|
||||
byte[] packet = new byte[payload.Length + HEADER_SIZE];
|
||||
Array.Copy(BitConverter.GetBytes(payload.Length), packet, HEADER_SIZE);
|
||||
Array.Copy(payload, 0, packet, HEADER_SIZE, payload.Length);
|
||||
return packet;
|
||||
}
|
||||
|
||||
private void SendCleanup(bool clear = false)
|
||||
{
|
||||
lock (_sendingPacketsLock)
|
||||
|
|
|
@ -350,22 +350,22 @@ namespace xServer.Core.Networking
|
|||
if (_appendHeader)
|
||||
{
|
||||
Array.Copy(readBuffer, _readOffset, _tempHeader, _tempHeaderOffset, size);
|
||||
_payloadLen = (int)_tempHeader[0] | _tempHeader[1] << 8 | _tempHeader[2] << 16;
|
||||
_payloadLen = BitConverter.ToInt32(_tempHeader, 0);
|
||||
_tempHeaderOffset = 0;
|
||||
_appendHeader = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
_payloadLen = (int)readBuffer[_readOffset] | readBuffer[_readOffset + 1] << 8 |
|
||||
readBuffer[_readOffset + 2] << 16;
|
||||
_payloadLen = BitConverter.ToInt32(readBuffer, _readOffset);
|
||||
}
|
||||
|
||||
if (_payloadLen <= 0)
|
||||
if (_payloadLen <= 0 || _payloadLen > _parentServer.MAX_PACKET_SIZE)
|
||||
throw new Exception("invalid header");
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
process = false;
|
||||
Disconnect();
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -375,9 +375,9 @@ namespace xServer.Core.Networking
|
|||
}
|
||||
else // _parentServer.HEADER_SIZE < _readableDataLen
|
||||
{
|
||||
_appendHeader = true;
|
||||
Array.Copy(readBuffer, _readOffset, _tempHeader, _tempHeaderOffset, _readableDataLen);
|
||||
_tempHeaderOffset += _readableDataLen;
|
||||
_appendHeader = true;
|
||||
process = false;
|
||||
}
|
||||
break;
|
||||
|
@ -531,28 +531,11 @@ namespace xServer.Core.Networking
|
|||
payload = _sendBuffers.Dequeue();
|
||||
}
|
||||
|
||||
if (compressionEnabled)
|
||||
payload = SafeQuickLZ.Compress(payload);
|
||||
|
||||
if (encryptionEnabled)
|
||||
payload = AES.Encrypt(payload);
|
||||
|
||||
byte[] header = new byte[]
|
||||
{
|
||||
(byte)payload.Length,
|
||||
(byte)(payload.Length >> 8),
|
||||
(byte)(payload.Length >> 16)
|
||||
};
|
||||
|
||||
byte[] data = new byte[payload.Length + _parentServer.HEADER_SIZE];
|
||||
Array.Copy(header, data, header.Length);
|
||||
Array.Copy(payload, 0, data, _parentServer.HEADER_SIZE, payload.Length);
|
||||
|
||||
_parentServer.BytesSent += data.Length;
|
||||
|
||||
try
|
||||
{
|
||||
_handle.Send(data);
|
||||
var packet = BuildPacket(payload);
|
||||
_parentServer.BytesSent += packet.Length;
|
||||
_handle.Send(packet);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
@ -563,6 +546,20 @@ namespace xServer.Core.Networking
|
|||
}
|
||||
}
|
||||
|
||||
private byte[] BuildPacket(byte[] payload)
|
||||
{
|
||||
if (compressionEnabled)
|
||||
payload = SafeQuickLZ.Compress(payload);
|
||||
|
||||
if (encryptionEnabled)
|
||||
payload = AES.Encrypt(payload);
|
||||
|
||||
byte[] packet = new byte[payload.Length + _parentServer.HEADER_SIZE];
|
||||
Array.Copy(BitConverter.GetBytes(payload.Length), packet, _parentServer.HEADER_SIZE);
|
||||
Array.Copy(payload, 0, packet, _parentServer.HEADER_SIZE, payload.Length);
|
||||
return packet;
|
||||
}
|
||||
|
||||
private void SendCleanup(bool clear = false)
|
||||
{
|
||||
lock (_sendingPacketsLock)
|
||||
|
|
|
@ -134,7 +134,7 @@ namespace xServer.Core.Networking
|
|||
/// <summary>
|
||||
/// The buffer size for receiving data in bytes.
|
||||
/// </summary>
|
||||
public int BUFFER_SIZE { get { return (1024 * 1024) * 1; } } // 1MB
|
||||
public int BUFFER_SIZE { get { return 1024 * 16; } } // 16KB
|
||||
|
||||
/// <summary>
|
||||
/// The keep-alive time in ms.
|
||||
|
@ -149,7 +149,12 @@ namespace xServer.Core.Networking
|
|||
/// <summary>
|
||||
/// The header size in bytes.
|
||||
/// </summary>
|
||||
public int HEADER_SIZE { get { return 3; } } // 3B
|
||||
public int HEADER_SIZE { get { return 4; } } // 4B
|
||||
|
||||
/// <summary>
|
||||
/// The maximum size of a packet in bytes.
|
||||
/// </summary>
|
||||
public int MAX_PACKET_SIZE { get { return (1024 * 1024) * 5; } } // 5MB
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets if the server is currently processing data that should prevent disconnection.
|
||||
|
|
Loading…
Reference in New Issue