Hello,

currently, in order to find out which capabilities a PlcConnection provides (reading, writing, subscription) we must invoke operations that return an Optional value (getReader() or readRequestBuilder()) and check if the value is not empty. These methods must also be called in order to actually perform the required operations (reading/writing/subscription).

I believe that these are two related but different concerns and should be separated. For example, when checking whether a PlcConnection supports reading we should not be required to actually obtain an instance of PlcReader/PlcReadRequest.Builder. Analogously, if we already know that a PlcConnection supports reading, we should not have to deal with an optional value when obtaining an instance of PlcReader/PlcReadRequest.Builder off it (and call .get() on it).

Therefore, I suggest that we provide a separate interface/operation for obtaining metaformation on PlcConnection (describing its capabilities) and make getReader()/readRequestBuilder() operations return a non-optional value (and throw an Exception when invoked on a PlcConnection that does not provide the required capability).

This would allow to check for capabilities independently from actually using them, for example in early initialization stages. Furthermore, this would also simplify the usage of the capabilities since we would not be required to deal with optional values at that stages anymore.

What do you think?

Best regards,
Andrey

Reply via email to