public static bool TryReceiveString(this IRoutingIdSocket socket, TimeSpan timeout, Encoding encoding, out uint routingId, [NotNullWhen(returnValue: true)] out string?str, CancellationToken cancellationToken = default) { var msg = new Msg(); msg.InitEmpty(); if (socket.TryReceive(ref msg, timeout, cancellationToken)) { routingId = msg.RoutingId; try { str = msg.Size > 0 ? msg.GetString(encoding) : string.Empty; return(true); } finally { msg.Close(); } } str = null; routingId = 0; msg.Close(); return(false); }
/// <summary> /// Provides a consuming IAsyncEnumerable for receiving messages from the socket. /// </summary> /// <param name="socket">The socket to receive from.</param> /// <param name="cancellationToken">The token to monitor for cancellation requests. The default value is <see cref="CancellationToken.None"/>.</param> /// <returns>An IAsyncEnumerable that receive and returns messages from the socket.</returns> /// <exception cref="System.OperationCanceledException">The token has had cancellation requested.</exception> public static async IAsyncEnumerable <(uint, string)> ReceiveStringAsyncEnumerable( this IRoutingIdSocket socket, [EnumeratorCancellation] CancellationToken cancellationToken = default) { while (true) { yield return(await socket.ReceiveStringAsync(cancellationToken)); } }
public static void Send(this IRoutingIdSocket socket, uint routingId, byte[] data, int length) { var msg = new Msg(); msg.InitPool(length); msg.RoutingId = routingId; data.Slice(0, length).CopyTo(msg); socket.Send(ref msg); msg.Close(); }
public static ValueTask SendAsync(this IRoutingIdSocket socket, uint routingId, string message) { if (socket.TrySend(routingId, message)) { return(new ValueTask()); } return(new ValueTask(Task.Factory.StartNew(() => Send(socket, routingId, message), TaskCreationOptions.LongRunning))); }
public static ValueTask SendAsync(this IRoutingIdSocket socket, uint routingId, byte[] data, int length) { if (socket.TrySend(routingId, data, length)) { return(new ValueTask()); } return(new ValueTask(Task.Factory.StartNew(() => Send(socket, routingId, data, length), TaskCreationOptions.LongRunning))); }
public static ValueTask <(uint, byte[])> ReceiveBytesAsync(this IRoutingIdSocket socket, CancellationToken cancellationToken = default) { if (TryReceiveBytes(socket, out var routingId, out var bytes)) { return(new ValueTask <(uint, byte[])>((routingId, bytes))); } // TODO: this is a hack, eventually we need kind of IO ThreadPool for thread-safe socket to wait on asynchronously return(new ValueTask <(uint, byte[])>(Task.Factory.StartNew(() => socket.ReceiveBytes(cancellationToken), cancellationToken, TaskCreationOptions.LongRunning, TaskScheduler.Default))); }
public static bool TrySend(this IRoutingIdSocket socket, TimeSpan timeout, uint routingId, byte[] data, int length) { var msg = new Msg(); msg.InitPool(length); msg.RoutingId = routingId; data.CopyTo(msg); if (!socket.TrySend(ref msg, timeout)) { msg.Close(); return(false); } msg.Close(); return(true); }
public static void Send(this IRoutingIdSocket socket, uint routingId, string message) { var msg = new Msg(); // Count the number of bytes required to encode the string. // Note that non-ASCII strings may not have an equal number of characters // and bytes. The encoding must be queried for this answer. // With this number, request a buffer from the pool. msg.InitPool(SendReceiveConstants.DefaultEncoding.GetByteCount(message)); msg.RoutingId = routingId; // Encode the string into the buffer SendReceiveConstants.DefaultEncoding.GetBytes(message, msg); socket.Send(ref msg); msg.Close(); }
public static (uint, byte[]) ReceiveBytes(this IRoutingIdSocket socket, CancellationToken cancellationToken = default) { var msg = new Msg(); msg.InitEmpty(); try { socket.Receive(ref msg, cancellationToken); var data = msg.CloneData(); var routingId = msg.RoutingId; return(routingId, data); } finally { msg.Close(); } }
public static (uint, string) ReceiveString(this IRoutingIdSocket socket, Encoding encoding, CancellationToken cancellationToken = default) { var msg = new Msg(); msg.InitEmpty(); try { socket.Receive(ref msg, cancellationToken); var routingId = msg.RoutingId; var str = msg.Size > 0 ? msg.GetString(encoding) : string.Empty; return(routingId, str); } finally { msg.Close(); } }
public static bool TryReceiveBytes(this IRoutingIdSocket socket, TimeSpan timeout, out uint routingId, [NotNullWhen(returnValue: true)] out byte[]?bytes, CancellationToken cancellationToken = default) { var msg = new Msg(); msg.InitEmpty(); if (!socket.TryReceive(ref msg, timeout, cancellationToken)) { msg.Close(); bytes = null; routingId = 0; return(false); } bytes = msg.CloneData(); routingId = msg.RoutingId; msg.Close(); return(true); }
public static bool TrySend(this IRoutingIdSocket socket, TimeSpan timeout, uint routingId, byte[] data) { return(TrySend(socket, timeout, routingId, data, data.Length)); }
public static void Send(this IRoutingIdSocket socket, uint routingId, byte[] data) { Send(socket, routingId, data, data.Length); }
public static bool TrySend(this IRoutingIdSocket socket, uint routingId, string message) { return(TrySend(socket, TimeSpan.Zero, routingId, message)); }
public static bool TryReceiveString(this IRoutingIdSocket socket, TimeSpan timeout, out uint routingId, [NotNullWhen(returnValue: true)] out string?str, CancellationToken cancellationToken = default) { return(socket.TryReceiveString(timeout, SendReceiveConstants.DefaultEncoding, out routingId, out str, cancellationToken)); }
public static bool TryReceiveString(this IRoutingIdSocket socket, Encoding encoding, out uint routingId, [NotNullWhen(returnValue: true)] out string?str) { return(socket.TryReceiveString(TimeSpan.Zero, encoding, out routingId, out str)); }
public static bool TryReceiveBytes(this IRoutingIdSocket socket, out uint routingId, [NotNullWhen(returnValue: true)] out byte[]?bytes) { return(socket.TryReceiveBytes(TimeSpan.Zero, out routingId, out bytes)); }
public static (uint, string) ReceiveString(this IRoutingIdSocket socket, CancellationToken cancellationToken = default) { return(socket.ReceiveString(SendReceiveConstants.DefaultEncoding, cancellationToken)); }
public static bool TrySend(this IRoutingIdSocket socket, uint routingId, byte[] data, int length) { return(TrySend(socket, TimeSpan.Zero, routingId, data, length)); }