eclipse-uprotocol / up-spec

uProtocol Specifications
Apache License 2.0
31 stars 25 forks source link

Add the table for listeners to distinguish different message types. #188

Closed evshary closed 1 month ago

evshary commented 2 months ago

As @PLeVasseur suggested here, add the table mapping for listeners and message type. This should be helpful for the implementation.

PLeVasseur commented 1 month ago

Hey @evshary -- is this generally useful to include in e.g. the uAttributes spec?

That's what I had originally thought

gregmedd commented 1 month ago

I agree that this seems like it belongs in the UAttributes (or even better, UUri) spec. It's not zenoh specific.

It would also be really helpful to have a similar table of the allowable values for both source and sink when sending a message.

evshary commented 1 month ago

@PLeVasseur @gregmedd @sophokles73 Thanks for your suggestion. I thought it was the only issue Zenoh faced, but it seems like we can view it more generically. I've moved it to uattributes.adoc now.

evshary commented 1 month ago

@stevenhartley The idea of the table is to distinguish message type from different source and sink resource_id combinations. You gave a good suggestion to add use cases here, which I didn't think of before.

I've updated the table now. I think the FFFF of the resource_id indicates that we don't care about the value. For the case {0, FFFF}, it should have the same meaning as {0, [1-7FFF]}, while {0, [8000-FFFE]} is not valid. However, I agree that users might never use the way to listen to the resource_id. The same concept can be applied to index 6 to index 9. We can leave these combinations here (although users never use them) or perhaps we can forbid these combinations to make the table simpler. WDYT?

index source resource_id sink resource_id Publish Notification Request Response Use Case
1 [8000-FFFE] None V A uE listens for a specific published message
2 [8000-FFFE] 0 V A uE listens for a specific notification message
3 0 [1-7FFF] V A uE listens for a specific request
4 [1-7FFF] 0 V A uE listens for a specific response
5 FFFF 0 V V A uE listens for all notifications and responses
6 FFFF [1-7FFF] V Same as {0, [1-7FFF]}
7 0 FFFF V Same as {0, [1-7FFF]}
8 [1-7FFF] FFFF V Same as {[1-7FFF], 0}
9 [8000-FFFE] FFFF V Same as {[8000-FFFE], 0}
10 FFFF FFFF V V V uStreamer listens for all notifications, requests, and responses
stevenhartley commented 1 month ago

IMHO the table is just getting too complicated. We should only list the known examples that uEs (and/or the streamer) should use and then get rid of any of the combinations that don't make any sense.

evshary commented 1 month ago

Then the table can be simplified as

index source resource_id sink resource_id Publish Notification Request Response Use Case
1 [8000-FFFE] None V A uE listens for a specific published message
2 [8000-FFFE] 0 V A uE listens for a specific notification message
3 0 [1-7FFF] V A uE listens for a specific request
4 [1-7FFF] 0 V A uE listens for a specific response
5 FFFF 0 V V A uE listens for all notifications and responses
6 FFFF FFFF V V V uStreamer listens for all notifications, requests, and responses

These combinations only make sense to users, and we can forbid users from using other combinations explicitly. If you agree with this, then I'll update the table.

stevenhartley commented 1 month ago

Then the table can be simplified as

index source resource_id sink resource_id Publish Notification Request Response Use Case 1 [8000-FFFE] None V A uE listens for a specific published message 2 [8000-FFFE] 0 V A uE listens for a specific notification message 3 0 [1-7FFF] V A uE listens for a specific request 4 [1-7FFF] 0 V A uE listens for a specific response 5 FFFF 0 V V A uE listens for all notifications and responses 6 FFFF FFFF V V V uStreamer listens for all notifications, requests, and responses These combinations only make sense to users, and we can forbid users from using other combinations explicitly. If you agree with this, then I'll update the table.

@evshary I'm ok with the latest changes. Please update the PR and I will approve it