private async void StartListen()
{
var buffer = new byte[ReceiveChunkSize];
try
{
while (_ws.State == WebSocketState.Open)
{
var stringResult = new StringBuilder();
WebSocketReceiveResult result;
do
{
result = await _ws.ReceiveAsync(new ArraySegment<byte>(buffer), _cancellationToken);
if (result.MessageType == WebSocketMessageType.Close)
{
Log.Warning(
"Close websocket message received. Close Status: {closeStatus} Close Description: {closeDescription}",
result.CloseStatus?.ToString(), result.CloseStatusDescription);
await _ws.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None);
CallOnDisconnected();
}
else
{
var str = Encoding.UTF8.GetString(buffer, 0, result.Count);
stringResult.Append(str);
}
} while (!result.EndOfMessage);
var message = stringResult.ToString();
if (string.IsNullOrWhiteSpace(message))
{
Log.Warning("Received empty message of type {msgType}", result.MessageType.ToString());
}
else
{
CallOnMessage(message);
}
}
}
catch (Exception)
{
CallOnDisconnected();
}
finally
{
_ws.Dispose();
}
}