blob: e26b391bdea6a4273032d89b3211fcd257c363f7 [file] [log] [blame] [view]
Indirect Service Demo
=====================
This demo is intended to highlight the difference between requesting a service
and providing one. The demo is based on two services: IntegerService and
IndirectIntegerService.
interface IntegerService {
Increment() => (int32 value);
};
This trival interface just manages a single internal integer that's initialized
to 0. The Increment() method returns a new value.
interface IndirectIntegerService {
Set(IntegerService? service);
Get(IntegerService&? service);
};
This service delegates to the one IntegerService provided by the Set() method.
Clients use Get() to request a connection to an IntegerService that targets the
delegate. This is roughly an IntegerService "pointer".
The demo creates a set of threads all of which get their own connection to the
shared IntegerService via the IndirectIntegerService. The threads all access
the IntegerService at the same time and then display a little table of the
results.