sharp-chat/SharpChat/SockChatConnection.cs

37 lines
1.5 KiB
C#
Raw Permalink Normal View History

using Fleck;
using Microsoft.Extensions.Logging;
using SharpChat.Connections;
using SharpChat.SockChat;
using System.Net;
namespace SharpChat;
public class SockChatConnection(IWebSocketConnection sock, IPEndPoint remoteEndPoint, ILogger logger) : Connection {
public IWebSocketConnection Socket { get; } = sock;
public IPEndPoint RemoteEndPoint { get; } = remoteEndPoint;
public ILogger Logger { get; } = logger;
public async Task Send(S2CPacket packet) {
if(!Socket.IsAvailable)
return;
string data = packet.Pack();
if(!string.IsNullOrWhiteSpace(data))
await Socket.Send(data);
}
public void Close(ConnectionCloseReason reason = ConnectionCloseReason.Unexpected) {
Socket.Close(reason switch {
ConnectionCloseReason.ShuttingDown => WebSocketCloseCode.GoingAway,
ConnectionCloseReason.Error => WebSocketCloseCode.InternalError,
ConnectionCloseReason.Restarting => WebSocketCloseCode.ServiceRestart,
ConnectionCloseReason.Unavailable => WebSocketCloseCode.ServiceRestart,
ConnectionCloseReason.Unauthorized => WebSocketCloseCode.Unauthorized,
ConnectionCloseReason.TimeOut => WebSocketCloseCode.Timeout,
ConnectionCloseReason.AccessDenied => WebSocketCloseCode.Forbidden,
ConnectionCloseReason.TooManyConnections => WebSocketCloseCode.TryAgainLater,
_ => WebSocketCloseCode.NormalClosure,
});
}
}