Files
Raidenxd2 255b572a6f first
2026-08-07 04:45:59 -04:00

118 lines
3.9 KiB
C#

using System.Net.WebSockets;
using System.Text;
using System.Text.Json;
namespace asdfasdf;
public static class Notify
{
private static WebSocket ws;
private static WebApplication app;
private static HttpContext httpContext;
private static CancellationToken cancellationToken;
private const string json = "{}\x1e";
public static void Init(WebApplication app)
{
app.MapPost("/hub/v1/negotiate", (HttpRequest request) =>
{
Guid guid = Guid.NewGuid();
AvailableTransports transport = new()
{
transport = "WebSockets",
transferFormats = ["Text"]
};
HubNego nego = new()
{
negotiateVersion = "0",
connectionId = guid.ToString(),
connectionToken = guid.ToString(),
availableTransports = [transport]
};
return Results.Created("/hub/v1/negotiate", nego);
});
app.Map("/hub/v1", async (HttpContext context, CancellationToken cancellationToken) =>
{
if (context.WebSockets.IsWebSocketRequest)
{
await InitNotify(context, cancellationToken, app);
}
});
}
public static async Task InitNotify(HttpContext context, CancellationToken token, WebApplication wapp)
{
app = wapp;
httpContext = context;
cancellationToken = token;
ws = await context.WebSockets.AcceptWebSocketAsync();
await HandleConnection();
}
public static async Task HandleConnection()
{
while (!cancellationToken.IsCancellationRequested && ws.State == WebSocketState.Open)
{
await Task.Delay(TimeSpan.FromSeconds(0.25f));
var buffer = new byte[8];
using var memoryStream = new MemoryStream();
WebSocketReceiveResult result;
do
{
result = await ws.ReceiveAsync(buffer, CancellationToken.None);
memoryStream.Write(buffer, 0, result.Count);
} while (!result.EndOfMessage);
buffer = memoryStream.ToArray();
string receive = Encoding.UTF8.GetString(buffer).TrimEnd('\x1e');
app.Logger.LogInformation(receive);
app.Logger.LogInformation(receive.Length.ToString());
if (receive.Length == 33)
{
app.Logger.LogInformation("sending");
await ws.SendAsync(Encoding.UTF8.GetBytes(json), WebSocketMessageType.Text, true, CancellationToken.None);
}
else if (receive.Contains("SubscribeToPlayers"))
{
var response = new
{
type = 3,
invocationId = "fuckyuo",
result = (object?)null
};
app.Logger.LogInformation("SubscribeToPlayers");
// app.Logger.LogInformation(File.ReadAllText("websocket1.json") + "␞");
// await ws.SendAsync(Encoding.UTF8.GetBytes(File.ReadAllText("websocket1.json") + "␞"), WebSocketMessageType.Text, true, CancellationToken.None);
await ws.SendAsync(Encoding.UTF8.GetBytes(JsonSerializer.Serialize(response) + "\x1e"), WebSocketMessageType.Text, true, CancellationToken.None);
}
else if (receive.Length == 10)
{
app.Logger.LogInformation("type 6 ping or something idfk");
await ws.SendAsync(Encoding.UTF8.GetBytes(json), WebSocketMessageType.Text, true, CancellationToken.None);
}
}
if (ws.State == WebSocketState.CloseReceived)
{
await ws.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closed", CancellationToken.None);
}
app.Logger.LogInformation("WebSocket closed");
}
}