|
- public interface INetMqAccessor : IDisposable
- {
- void StartServer(string endpoint);
- void SendMessage(string message);
- event Action<string> OnMessageReceived;
- }
- public class NetMqAccessor : INetMqAccessor
- {
- private RouterSocket server;
- private NetMQPoller poller;
-
- public event Action<string> OnMessageReceived;
-
- public void StartServer(string endpoint)
- {
- server = new RouterSocket();
- server.Bind(endpoint);
-
- server.ReceiveReady += (s, e) =>
- {
- var msg = e.Socket.ReceiveMultipartMessage();
- var clientAddress = msg[0];
- var content = msg[2].ConvertToString();
-
- OnMessageReceived?.Invoke(content);
-
- var response = new NetMQMessage();
- response.Append(clientAddress);
- response.AppendEmptyFrame();
- response.Append($"Echo: {content}");
- server.SendMultipartMessage(response);
- };
-
- poller = new NetMQPoller { server };
- poller.RunAsync();
- }
-
- public void SendMessage(string message)
- {
- // Optionnel si tu veux aussi gérer un client ici
- }
-
- public void Dispose()
- {
- poller?.Stop();
- server?.Dispose();
- }
- }
- ////////
- public interface INetMqClientAccessor : IDisposable
- {
- void Connect(string endpoint);
- void SendMessage<T>(T message);
- Task<TResponse> SendAndReceive<TRequest, TResponse>(TRequest message);
- }
-
- public class NetMqClientAccessor : INetMqClientAccessor
- {
- private RequestSocket client;
-
- public void Connect(string endpoint)
- {
- client = new RequestSocket();
- client.Connect(endpoint);
- }
-
- public void SendMessage<T>(T message)
- {
- byte[] packed = MessagePackSerializer.Serialize(message);
- client.SendFrame(packed);
- }
-
- public async Task<TResponse> SendAndReceive<TRequest, TResponse>(TRequest message)
- {
- byte[] packed = MessagePackSerializer.Serialize(message);
- client.SendFrame(packed);
-
- // Attente de la réponse
- byte[] responseBytes = client.ReceiveFrameBytes();
- TResponse response = MessagePackSerializer.Deserialize<TResponse>(responseBytes);
- return response;
- }
-
- public void Dispose()
- {
- client?.Dispose();
- }
- }
|