Skip to main content

ObjectDetectionClient

class · sealed IAsyncDisposable thread-safe
namespace AR51.Net;

public sealed class ObjectDetectionClient : IObjectDetectionClient, IAsyncDisposable

Implements: IObjectDetectionClient · IAsyncDisposable

Dispose it with await using (or DisposeAsync): this stops every stream and closes every connection. Calling it again does nothing.

Receives live tracked objects from the AR 51 object detection service. Get one from IAR51Client.ObjectDetection (recommended: the server is found for you), or create one on its own with the service's address.

How-to

This page is reference (facts only). For a walkthrough with a complete sample, see the Object detection guide.

Example
await using var objects = new ObjectDetectionClient("192.168.1.20", 1503);
objects.ObjectReceived += (_, e) => Console.WriteLine($"{e.Object.Name} at {e.Object.Position}");
await objects.StartAsync();

Properties​

PropertyTypeAccessDescription
IsAvailableboolgettrue when the object detection service's address is known (always, for a standalone ObjectDetectionClient). Implements IObjectDetectionClient.IsAvailable.

Method summary​

MethodReturns
Constructor—constructor
StartAsyncTaskimplements
StopAsyncTaskimplements
StreamAsyncIAsyncEnumerable<TrackedObject>implements
DisposeAsyncValueTask

→ Full descriptions in Method details below.

Events​

Standard .NET events (EventHandler<T>): subscribe with +=, unsubscribe with -=. They are raised on a background thread.

EventArgsRaised when
ObjectReceivedTrackedObjectEventArgsRaised for every object received while started, one event per object per frame, on a background thread. Keep handlers short: they run on the receiving thread. An exception thrown by a handler is logged and does not stop the others or the stream. Implements IObjectDetectionClient.ObjectReceived.

Method details​

Constructor​

method
public ObjectDetectionClient(string host, int port, ILoggerFactory? loggerFactory = null);

Creates a standalone client for the object detection service at host:port. Call StartAsync to begin receiving.

Parameters
hoststringHost name or IP address of the AR 51 server running the object detection service.
portintPort of the service: the same as the skeleton service's.
loggerFactoryILoggerFactory?Receives the client's diagnostic log. null disables logging. Optional.
Throws
ArgumentExceptionhost is empty.
ArgumentOutOfRangeExceptionport is not between 1 and 65535.
note

AR 51 service ports are not fixed. Prefer IAR51Client.ObjectDetection, which finds the service for you.

StartAsync​

methodimplements IObjectDetectionClient
public Task StartAsync(CancellationToken cancellationToken = default);

Starts receiving objects into ObjectReceived. Returns at once; calling it again does nothing.

Parameters
cancellationTokenCancellationTokenIgnored. Optional.
ReturnsTaskA completed task.
Throws
ObjectDisposedExceptionThe client was disposed.
note

Receiving begins as soon as the service is reachable, and resumes by itself after the service restarts or the network drops, until StopAsync or dispose.

StopAsync​

methodimplements IObjectDetectionClient
public Task StopAsync(CancellationToken cancellationToken = default);

Stops receiving objects: stops ObjectReceived, ends every StreamAsync loop running now, and waits until the event stream is closed. Calling it again does nothing.

Parameters
cancellationTokenCancellationTokenStops waiting for the stream to close; the stream still closes. Optional.
ReturnsTaskA task that completes when the event stream is closed.
note

StreamAsync loops end normally, without an exception, after the object they are handling. Loops started after this call are not affected.

StreamAsync​

methodimplements IObjectDetectionClient
public IAsyncEnumerable<TrackedObject> StreamAsync([EnumeratorCancellation] CancellationToken cancellationToken = default);

Streams objects until StopAsync is called (the loop ends normally), cancellationToken is cancelled, or the connection drops. Works without StartAsync.

Parameters
cancellationTokenCancellationTokenStops the stream. Optional.
ReturnsIAsyncEnumerable<TrackedObject>Objects in the order they arrive, one per object per frame.
Throws
AR51ExceptionThe object detection service is not available, or the stream failed.
OperationCanceledExceptioncancellationToken was cancelled.
ObjectDisposedExceptionThe client was disposed.
note

Each call opens its own stream, which closes when the loop ends. Unlike ObjectReceived, it does not reconnect: start a new loop after an AR51Exception.

DisposeAsync​

method
public ValueTask DisposeAsync();

Stops receiving, closes every stream and, for a standalone client, its connection. Calling it again does nothing.

ReturnsValueTaskA task that completes when everything is closed.

See also​

Was this page helpful?