Files
PepperDashCore/src/Pepperdash Core/Logging/DebugWebsocketSink.cs
2023-11-06 18:31:28 -07:00

73 lines
1.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Serilog;
using Serilog.Core;
using Serilog.Events;
using Serilog.Configuration;
using WebSocketSharp.Server;
namespace PepperDash.Core
{
public class DebugWebsocketSink : ILogEventSink
{
private WebSocketServer _wssv;
public int Port
{ get
{
if(_wssv == null) return 0;
return _wssv.Port;
}
}
public bool IsListening
{ get
{
if (_wssv == null) return false;
return _wssv.IsListening;
}
}
private readonly IFormatProvider _formatProvider;
public DebugWebsocketSink()
{
_wssv = new WebSocketServer();
}
public void Emit(LogEvent logEvent)
{
if (_wssv == null || !_wssv.IsListening) return;
var message = logEvent.RenderMessage(_formatProvider);
_wssv.WebSocketServices.Broadcast(message);
}
public void StartServerAndSetPort(int port)
{
_wssv = new WebSocketServer(port);
_wssv.Start();
}
public void StopServer()
{
_wssv.Stop();
}
}
public static class DebugWebsocketSinkExtensions
{
public static LoggerConfiguration DebugWebsocketSink(
this LoggerSinkConfiguration loggerConfiguration,
IFormatProvider formatProvider = null)
{
return loggerConfiguration.Sink(new DebugWebsocketSink());
}
}
}