private void ReadCompleted(IAsyncResult result)
{
var stream = (Client) result.AsyncState;
try
{
var x = stream.Stream.EndRead(result);
if(x == 0) return;
for (int i = 0; i < x;i++)
{
if (isEndOfMessage(i))
{
byte[] data = _readBuffer.ToArray();
string actual;
if (_messageTermination == null)
actual = Encoding.UTF8.GetString(data, 0, data.Length);
else
actual = Encoding.UTF8.GetString(data, 0, data.Length - (_messageTermination.Length - 1));
if (IncomingMessage != null)
IncomingMessage(this, new MessageArgs(stream.ID, actual));
_readBuffer.SetLength(0);
}
else
{
_readBuffer.WriteByte(_buffer[i]);
}
}
stream.Stream.BeginRead(_buffer, 0, _buffer.Length, ReadCompleted, stream);
}
catch
{
disconnect(stream);
}
}