mirror of
https://github.com/aljazceru/BTCPayServerPlugins.git
synced 2025-12-17 15:44:26 +01:00
67 lines
1.8 KiB
C#
67 lines
1.8 KiB
C#
using System;
|
|
using System.Net.WebSockets;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using BTCPayServer.Plugins.FileSeller;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
namespace BTCPayServer.Plugins.BitcoinSwitch;
|
|
|
|
[AllowAnonymous]
|
|
public class BitcoinSwitchController:ControllerBase
|
|
{
|
|
private readonly BitcoinSwitchService _service;
|
|
|
|
public BitcoinSwitchController(BitcoinSwitchService service)
|
|
{
|
|
_service = service;
|
|
}
|
|
|
|
[Route("~/apps/{id}/pos/bitcoinswitch")]
|
|
public async Task Connect(string id)
|
|
{
|
|
if (HttpContext.WebSockets.IsWebSocketRequest)
|
|
{
|
|
using var webSocket = await HttpContext.WebSockets.AcceptWebSocketAsync();
|
|
|
|
await Echo(id, webSocket);
|
|
}
|
|
else
|
|
{
|
|
HttpContext.Response.StatusCode = StatusCodes.Status400BadRequest;
|
|
}
|
|
}
|
|
|
|
private async Task Echo(string id, WebSocket webSocket)
|
|
{
|
|
try
|
|
{
|
|
_service.AppToSockets.Add(id, webSocket);
|
|
var buffer = new byte[1024 * 4];
|
|
var receiveResult = await webSocket.ReceiveAsync(
|
|
new ArraySegment<byte>(buffer), CancellationToken.None);
|
|
|
|
while (!receiveResult.CloseStatus.HasValue && webSocket.State == WebSocketState.Open)
|
|
{
|
|
|
|
receiveResult = await webSocket.ReceiveAsync(
|
|
new ArraySegment<byte>(buffer), CancellationToken.None);
|
|
}
|
|
|
|
await webSocket.CloseAsync(
|
|
receiveResult.CloseStatus.Value,
|
|
receiveResult.CloseStatusDescription,
|
|
CancellationToken.None);
|
|
|
|
}
|
|
finally
|
|
{
|
|
_service.AppToSockets.Remove(id, webSocket);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
} |