discord/Discord/Gateway/WebSocket.cs
2024-06-09 18:51:48 +12:00

47 lines
1.3 KiB
C#

using System.Net.WebSockets;
using System.Text;
namespace Discord.Gateway
{
internal class WebSocket
{
private ClientWebSocket ws;
public WebSocket()
{
ws = new ClientWebSocket();
}
public async Task Connect(string url)
{
await ws.ConnectAsync(new Uri(url), CancellationToken.None);
}
public async Task Send(string text)
{
await ws.SendAsync(new ReadOnlyMemory<byte>(Encoding.UTF8.GetBytes(text)), WebSocketMessageType.Text, true, CancellationToken.None);
}
public async Task<string> Recieve()
{
Memory<byte> buffer = new Memory<byte>(new byte[1024]);
ValueWebSocketReceiveResult result;
int offset = 0;
do
{
result = await ws.ReceiveAsync(buffer[offset..], CancellationToken.None);
offset += result.Count;
if (!result.EndOfMessage && offset >= buffer.Length)
{
ArraySegment<byte> newBuffer = new ArraySegment<byte>(new byte[buffer.Length * 2]);
buffer.CopyTo(newBuffer);
buffer = newBuffer;
}
} while (!result.EndOfMessage);
return Encoding.UTF8.GetString(buffer.ToArray(), 0, offset);
}
}
}