From: Forest Date: Mon, 15 Apr 2019 23:35:15 +0000 (-0700) Subject: Remove obvious allocation from UdpClientConnection. How did I miss that? X-Git-Tag: 1.0.0~47 X-Git-Url: https://git.deb.at/?a=commitdiff_plain;h=18ef45cb7482274516ae5cd09fea67f25d6a6856;p=rhonda%2Fimpostor.hazel.git Remove obvious allocation from UdpClientConnection. How did I miss that? --- diff --git a/Hazel/MessageReader.cs b/Hazel/MessageReader.cs index b1eab33..447c04d 100644 --- a/Hazel/MessageReader.cs +++ b/Hazel/MessageReader.cs @@ -44,18 +44,6 @@ namespace Hazel return output; } - public static MessageReader GetRaw(byte[] bytes, int offset, int length) - { - var output = ReaderPool.GetObject(); - - output.Buffer = bytes; - output.Offset = offset; - output.Position = 0; - output.Length = length; - output.Tag = byte.MaxValue; - return output; - } - public static MessageReader Get(byte[] buffer) { var output = ReaderPool.GetObject(); diff --git a/Hazel/Udp/UdpClientConnection.cs b/Hazel/Udp/UdpClientConnection.cs index 7ce5dbc..ee678fb 100644 --- a/Hazel/Udp/UdpClientConnection.cs +++ b/Hazel/Udp/UdpClientConnection.cs @@ -20,11 +20,6 @@ namespace Hazel.Udp /// private Socket socket; - /// - /// The buffer to store incomming data in. - /// - private byte[] dataBuffer = new byte[ushort.MaxValue]; - private Timer reliablePacketTimer; /// @@ -77,7 +72,7 @@ namespace Hazel.Udp } public event Action DataSentRaw; - public event Action DataReceivedRaw; + public event Action DataReceivedRaw; private void WriteBytesToConnectionReal(byte[] bytes, int length) { @@ -97,6 +92,7 @@ namespace Hazel.Udp { socket.EndSendTo(result); } + catch (NullReferenceException) { } catch (ObjectDisposedException) { Disconnect("Could not send as the socket was disposed of."); @@ -208,7 +204,15 @@ namespace Hazel.Udp /// void StartListeningForData() { - socket.BeginReceive(dataBuffer, 0, dataBuffer.Length, SocketFlags.None, ReadCallback, dataBuffer); + var msg = MessageReader.GetSized(ushort.MaxValue); + try + { + socket.BeginReceive(msg.Buffer, 0, msg.Buffer.Length, SocketFlags.None, ReadCallback, msg); + } + catch + { + msg.Recycle(); + } } /// @@ -217,35 +221,37 @@ namespace Hazel.Udp /// The asyncronous operation's result. void ReadCallback(IAsyncResult result) { - int bytesReceived; + var msg = (MessageReader)result.AsyncState; - //End the receive operation try { - bytesReceived = socket.EndReceive(result); + msg.Length = socket.EndReceive(result); + } + catch (NullReferenceException) + { + msg.Recycle(); + return; } catch (ObjectDisposedException) { - //If the socket's been disposed then we can just end there. + msg.Recycle(); return; } catch (SocketException e) { + msg.Recycle(); Disconnect("Socket exception while reading data: " + e.Message); return; } //Exit if no bytes read, we've failed. - if (bytesReceived == 0) + if (msg.Length == 0) { + msg.Recycle(); Disconnect("Received 0 bytes"); return; } - //Copy data to new array - byte[] bytes = new byte[bytesReceived]; - Buffer.BlockCopy(dataBuffer, 0, bytes, 0, bytesReceived); - //Begin receiving again try { @@ -274,9 +280,8 @@ namespace Hazel.Udp } } - DataReceivedRaw?.Invoke(bytes); - MessageReader msg = MessageReader.GetRaw(bytes, 0, bytesReceived); - HandleReceive(msg, bytesReceived); + DataReceivedRaw?.Invoke(msg.Buffer, msg.Length); + HandleReceive(msg, msg.Length); } ///