Hi Lukasz,

I fully agree … that’s why I already started implementing that path a bit in 
order to get a feeling on how it would be used.
Admittedly I’m in strong favor of calling “getUnsubscriptionRequest()” on the 
SubscriptionResponse object.

Chris

Von: Łukasz Dywicki <l...@code-house.org>
Datum: Dienstag, 26. März 2024 um 10:30
An: dev@plc4x.apache.org <dev@plc4x.apache.org>
Betreff: Re: AW: [DISCUSS] Where to regster the handler?
Hello Chris,
I believe both ways are fine, but if speak of simplicity the shorter
version wins. Given that after discussed changes unsubscribe call will
not need a builder, we can construct it for user request in one pass.
One consideration I'd make is keeping reference to smaller object rather
than larger ones. This means that
subscriptionResponse.getUnsubscriptionRequest() might be a better fit
than retaining entire subscription response which has much more fields
(field statuses etc.).

Best,
Łukasz

On 26.03.2024 10:17, Christofer Dutz wrote:
> Hi all,
>
> So, I’ve been fefactoring the Subscription stuff in a branch (not yet pushed 
> however).
> I stumbled over something:
>
> In the past we had an unsubscription request that took “subscription handles”
> This made sense as we had one subscription handle per field.
>
> Now that we’re changing things to have a callback for all fileds in the 
> subscription request, I think this method no longer really makes much sense.
>
> I would now rather have someone keep the subscription request and call an 
> “unsubscribe” method on this.
>
> So as soon as you’re finished with your subscription a 
> “subscriptionResponse.unsubscribe()” call would take care of that.
> Or possibly a “subscriptionResponse.getUnsubscriptionRequest().execute()” 
> (which might be more in line with our usual patterns.
> This way also someone could drop the subscription response and save the 
> unsubscriptionRequest till he needs it.
>
> What do you folks think?
>
> Chris
>
>
> Von: Christofer Dutz <christofer.d...@c-ware.de>
> Datum: Montag, 25. März 2024 um 09:32
> An: dev@plc4x.apache.org <dev@plc4x.apache.org>
> Betreff: AW: [DISCUSS] Where to regster the handler?
> Having another look at existing types:
>
> In browse-request we have:
>
>
>    *   execute()
>    *   executeWithInterceptor()
>
> In discovery-request we have:
>
>
>    *   execute()
>    *   executeWithHandler()
>
> So, in order to continue that pattern, what do you think about having two 
> options:
>
>
>    *   execute()
>    *   executeWithHandler()
>
> And to add the option to add a handler to the response.
>
> I know this could let users miss first responses, especially as ADS for 
> example sends an event directly after subscribing.
> However it would be more in line with the rest of the API, which all have an 
> “execute” without any arguments.
>
>
> Thinking even more about everything … I think moving the 
> “executeWithInterceptor” .. the interceptor adding should actually more be 
> added to the request and not the execution.
>
> Also could we add a “WithHandler” option to every type of request.
>
> Chris
>
>
>
> Von: Christofer Dutz <christofer.d...@c-ware.de>
> Datum: Montag, 25. März 2024 um 09:15
> An: dev@plc4x.apache.org <dev@plc4x.apache.org>
> Betreff: [DISCUSS] Where to regster the handler?
> Hi all,
>
> so yesterday I‘ve been working on the refactoring of the subscriptions as we 
> discussed that on the meetup.
> So, we said to register a callback for all fields before the “execute()”
>
>
> Consumer<PlcSubscriptionEvent> subscriptionConsumer = …;
> PlcSubscriptionRequest.Builder builder = 
> plcConnection.subscriptionRequestBuilder();
> for (int i = 0; i < options.getTagAddress().length; i++) {
>      builder.addChangeOfStateTagAddress("value-" + i, 
> options.getTagAddress()[i]);
> }
> PlcSubscriptionRequest subscriptionRequest = 
> builder.build(subscriptionConsumer);
>
> // Execute the subscription response.
> final PlcSubscriptionResponse subscriptionResponse = 
> subscriptionRequest.execute().get();
>
> Right now, I initially thought about adding it to the build()-method, but 
> that sort of felt oddly.
>
> Thinking about it a bit more, adding it to the “execute” seemed a bit more 
> like what I was looking for.
>
> So, what do you think about doing:
>
>
> Consumer<PlcSubscriptionEvent> subscriptionConsumer = …;
> PlcSubscriptionRequest.Builder builder = 
> plcConnection.subscriptionRequestBuilder();
> for (int i = 0; i < options.getTagAddress().length; i++) {
>      builder.addChangeOfStateTagAddress("value-" + i, 
> options.getTagAddress()[i]);
> }
> PlcSubscriptionRequest subscriptionRequest = builder.build();
>
> // Execute the subscription response.
> final PlcSubscriptionResponse subscriptionResponse = 
> subscriptionRequest.execute(subscriptionConsumer).get();
>
> What’s your opinion? I prefer the adding to the “execute” method.
>
> Chris
>

Reply via email to