The SlotFactory creates slots for use in Records in Messages. It is expandable with custom slot types.
The SlotFactory can be fetched as a service via the ServiceRegistry:
final ISlotFactory slotFactory = CServiceRegistry.getInstance() .getService(ISlotFactory.class);
Creation of a slot
To create a slot we need the slot type:
ISlot create(CSlotType aType) throws CException;
The slot type can also be determined by the system by specifying a value:
ISlot fromObject(@Nullable Object aValue);
If you want to be on the safe side, you can also specify both:
ISlot fromObject(CSlotType aType, Object aValue) throws CException;
Slot I/O with Data Streams
Slots can certainly be written to streams and read from streams.
@Nullable ISlot fromStream(@NotNull DataInput aStream) throws IOException; void toStream(@NotNull DataOutput aStream, @NotNull ISlot aSlot) throws IOException;
For using JSON based transport protocol there is also a method for reading a slot from JSON. The methods for writing to a JSON format are included in the slot classes. The method is intended for internal use by the system. See also here.
@Nullable ISlot fromJson(@NotNull CSlotType aSlotType, @NotNull Object aValue, @NotNull Map<Integer, byte> aByteArrayStore);
Since a slot type is represented by the class CSlotType, there are also methods to get the instance of this class:
CSlotType getSlotTypeByName(@NotNull String aName); CSlotType getSlotTypeByOrdinal(int aOrdinal);
Registration of custom slot types
User-defined slot types can be registered. These can of course only be transported to other nodes, if they are used in all own nodes.
The registration takes place via:
void registerFactory(@NotNull CSlotType aType, @NotNull ISingleSlotTypeFactory aFactory);
The factory can be uninstalled via:
void deregisterFactory(@NotNull CSlotType aType, @NotNull ISingleSlotTypeFactory aFactory); void deregisterFactory(@NotNull CSlotType aType);