CRecordGetTargetInfo
Fetch information about a registered target.
<record id="f7bdd19a-fd38-4eac-a3a2-c5957196e6d9" name="GET_TARGET_INFO" isNanoService="true" type="REQUEST">
<description>
Get information about one or more targets.
</description>
<namespaces>SYSTEM</namespaces>
<slot key="tid" name="TID" direction="REQUEST" presenceConstraint="OPTIONAL" type="ID">
<description>Optional: request information about a single target ID.</description>
</slot>
<slot key="tiDs" name="TIDS" direction="REQUEST" presenceConstraint="OPTIONAL" type="ID_ARRAY">
<description>Optional: request information about some target IDs.</description>
</slot>
<slot key="all" name="ALL_TARGETS" direction="REQUEST" presenceConstraint="OPTIONAL" type="BOOLEAN">
<description>True = request information about all registered targets.</description>
</slot>
<slot key="tgTs" name="TARGETS" direction="RESPONSE" presenceConstraint="OPTIONAL" type="RECORD_ARRAY">
<description>An array of records of type TARGET_INFO</description>
</slot>
</record>
Example of use of the class CRecordGetTargetInfo (after
There are three ways to fetch information about targets by message. The first option: we get the information for a single target.
private void getTargetInfoForOneTarget(@NotNull final IId aNamespaceId,
@NotNull final IId aTargetId) throws CException
{
final CEnvelope env = CEnvelope.forLocalNanoService(CWellKnownNID.SYSTEM);
final CRecord record = CRecordGetTargetInfo.create();
CRecordGetTargetInfo.setNamespaceId(record,
aNamespaceId);
CRecordGetTargetInfo.setTid(record,
aTargetId);
sendRequest(env,
record);
}
The second option: we fetch information about multiple targets.
private void getTargetInfoForMultipleTargets(@NotNull final IId aNamespaceId,
@NotNull final IId[] aTargetIds) throws CException
{
final CEnvelope env = CEnvelope.forLocalNanoService(CWellKnownNID.SYSTEM);
final CRecord record = CRecordGetTargetInfo.create();
CRecordGetTargetInfo.setNamespaceId(record,
aNamespaceId);
CRecordGetTargetInfo.setTids(record,
aTargetIds);
sendRequest(env,
record);
}
The third option: we fetch information about all targets in the namespace.
private void getTargetInfoForAllTargets(@NotNull final IId aNamespaceId) throws CException
{
final CEnvelope env = CEnvelope.forLocalNanoService(CWellKnownNID.SYSTEM);
final CRecord record = CRecordGetTargetInfo.create();
CRecordGetTargetInfo.setNamespaceId(record,
aNamespaceId);
CRecordGetTargetInfo.setAllTargets(record,
true);
sendRequest(env,
record);
}
To catch the reply, we need a message handler. We add it in the constructor of the message handler registry.
// constructor:
addMessageHandler(CRecordGetTargetInfo.ID,
this::asyncGetTargetInfo);
Regardless of which option is chosen, the answer is always handled in the same way:
private boolean asyncGetTargetInfo(@NotNull final CEnvelope aEnvelope,
@NotNull final CRecord aRecord)
{
if (aEnvelope.isAnswer())
{
final int rc = aEnvelope.getResultCode();
if (rc == CResultCode.SUCCESS)
{
final CRecord[] targets = CRecordGetTargetInfo.getTargets(aRecord,
null);
for (final CRecord target : targets)
{
final IId tid = CRecordDataTargetInfo.getTid(target,
null);
final String className = CRecordDataTargetInfo.getClassName(target,
"");
final String classSimpleName = CRecordDataTargetInfo.getClassSimpleName(target,
"");
final IId qid = CRecordDataTargetInfo.getQid(target,
null);
// ...
}
// ...
}
return true;
}
return false;
}