Skip to content

Instantly share code, notes, and snippets.

@Hakkadaikon
Last active June 15, 2024 12:57
Show Gist options
  • Save Hakkadaikon/69fbcc43230b5bccaeb5b67599f888dd to your computer and use it in GitHub Desktop.
Save Hakkadaikon/69fbcc43230b5bccaeb5b67599f888dd to your computer and use it in GitHub Desktop.
NostrSubscriptionCSharp
// Subscribe
using System.Net.WebSockets;
using System.Text;
Uri uri = new("wss://yabu.me/");
using ClientWebSocket ws = new();
await ws.ConnectAsync(uri, default);
// ["REQ", "_", {"kinds":[1], "limit": 10}]
var req = "[\"REQ\",\"_\",{\"kinds\":[1],\"limit\":10}]";
Console.WriteLine("< " + req);
await ws.SendAsync(Encoding.UTF8.GetBytes(req), WebSocketMessageType.Text, true, default);
var buffer = new byte[1024];
while (true)
{
ArraySegment<byte> segment = new(buffer);
var result = await ws.ReceiveAsync(segment, default);
if (result.MessageType == WebSocketMessageType.Close)
{
await ws.CloseAsync(WebSocketCloseStatus.NormalClosure, "OK", default);
return;
}
var count = result.Count;
while (!result.EndOfMessage)
{
if (count >= buffer.Length)
{
await ws.CloseAsync(WebSocketCloseStatus.NormalClosure, "That's too long", default);
return;
}
segment = new ArraySegment<byte>(buffer, count, buffer.Length - count);
result = await ws.ReceiveAsync(segment, default);
count += result.Count;
}
var message = Encoding.UTF8.GetString(buffer, 0, count);
Console.WriteLine("> " + message);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment