public override async void Accept()
{
try
{
if (Sockets[0].AcceptSocket != null)
{
networkStream = new NetworkStream(Sockets[0].AcceptSocket);
tlsStream = new SslStream(networkStream, false);
tlsSemaphore = new SemaphoreSlim(1, 1);
await tlsStream.AuthenticateAsServerAsync(Manager.Session.Certificate, false, SslProtocols.Tls12, false);
if (tlsStream.IsAuthenticated && Manager.Session.Add(this))
{
var buffer = Sockets[0].Buffer;
int numReadBytes;
do
{
numReadBytes = await tlsStream.ReadAsync(buffer, 0, buffer.Length);
if (numReadBytes == 0)
break;
var headerLength = (buffer[0] << 8) | buffer[1];
var header = Header.Parser.ParseFrom(new CodedInputStream(buffer, 2, headerLength));
var data = new byte[header.Size];
if (header.Size > 0)
Buffer.BlockCopy(buffer, 2 + headerLength, data, 0, data.Length);
await Manager.BnetPacket.CallHandler(header, data, this);
} while (numReadBytes != 0);
}
}
}
catch (Exception ex)
{
Log.Message(LogTypes.Error, ex.Message);
}
finally
{
if (Manager.Session.Remove(this))
Dispose();
}
}