using NetMQ; using NetMQ.Sockets; namespace Phantom.Utils.Rpc; static class RpcExtensions { public static ReadOnlyMemory<byte> Receive(this ClientSocket socket, CancellationToken cancellationToken) { var msg = new Msg(); msg.InitEmpty(); try { socket.Receive(ref msg, cancellationToken); return msg.SliceAsMemory(); } finally { // Only releases references, so the returned ReadOnlyMemory is safe. msg.Close(); } } public static (uint, ReadOnlyMemory<byte>) Receive(this ServerSocket socket, CancellationToken cancellationToken) { var msg = new Msg(); msg.InitEmpty(); try { socket.Receive(ref msg, cancellationToken); return (msg.RoutingId, msg.SliceAsMemory()); } finally { // Only releases references, so the returned ReadOnlyMemory is safe. msg.Close(); } } }