New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Allow Desktop Agent To Join Multiple Channels #242
Comments
Isn't this already catered for by the current API? My recollection is hazy but I thought this is why we allow retrieving multiple channel objects and calling "join" on each... this is quite an advanced use case, and it is therefore supported by advanced API usage on individual channel objects. Happy to discuss how we can make it more accessible of course, but I need to understand more whether this is an actual use case people have - I have always thought there is a one-to-one correspondence between a single component and a single channel. It looks like you are rolling up the channels for multiple sub-components into one window, or am I misunderstanding? |
@rikoe - you can currently send and receive on multiple channels using the API. However, the DesktopAgent is limited to one channel. This means that other channels are meant exclusively for under the hood API communication as opposed to user driven linking of components. It also makes it a bit janky when you "join a channel" to be kicked off of other channels. While this is an advanced use case, it is not one hard to imagine on a Financial desktop. We currently support this in Finsemble and were initially planning on removing this functionality to make it simple - one component, one channel (plus would make it easy to adopt the current FDC3 as the standard method of communication in the product) until we had a customer report an issue with multiple channels and discovered that such functionality is in use by end users. |
We've also be brainstorming alternatives with 'single channels' but with a direction that the end-user can specify. The developer can (sort of) do that by just not listening OR not broadcasting, but thats inflexible and defeats the point of having a user accessible channel selector. Further, setting a channel per direction (listen/broadcast) needs a more complex UI. Hence, supporting joining multiple channels actually seems the simplest (to implement/for user to understand) approach... |
I don't have a problem with this requirement, I think you've illustrated the use case well with the accompanying picture. Some observations:
What about the following: joinChannel(channelId: string) : Promise<void>;
leaveChannel(channelId: string): Promise<void>;
leaveCurrentChannel() : Promise<void>;
getCurrentChannel() : Promise<Channel>;
getJoinedChannels(): Promise<Channel[]>; The only caveat is that the desktop agent will need to decide what the "current channel" is if joined to multiple - maybe the channel that most recently received a message? This is not ideal, but less bad than removing methods, imo. |
@sgd2z @rikoe @kriswest The intention was to allow apps to support multiple channel membership via channel subscriptions (i.e. |
@nkolba - I don't see how it matters what channel it came over. That could be a future enhancement to the spec. However, in the current state we have a hole: |
That sounds reasonable to me. Actually might just be easier to do the plurals:
|
I think this is a bad UX idea, but if we decide to adopt this, then I think we will also need to add timestamps to channel contexts. |
I think it worth clarifying that the case you point to only applies contexts already on the channels (presumably retrieved via We've spent some time canvassing clients on this topic as we needed to decide whether to move from multi-channel to single - the general consensus was that multi-channel membership is not hard to understand, has use-cases and is easy to make optional (the user doesn't have to use it and a product flag or preference could disable it without disrupting the API). |
@kriswest say I have a window that is connected to the Red and Green channel, and that it has been reacting to updates to 'the instrument' on the red channel and yellow channel. I then start a new window, and connect it to the Red and Green channel, so this should show the same Instrument as the first window, but there is only a 50% chance of that without the timestamp. I am not saying that this is a huge issue, it's not like missing a trade. Things will settle down on the next update of the Instrument, but it is a 'glitch' if not a bug, and could be fixed if contexts had a time stamp (or we disallowed being on multiple channels). Also in conclusion, as far as I know neither Refinitiv nor Bloomberg support a window joining multiple channels, and they have been using the concept of channels for a very long time. |
I then start a new window, and connect it to the Red and Green channel, so this should show the same Instrument as the first window, but there is only a 50% chance of that without the timestamp.
You can't add it to the 'Red and Green channel', you can add it to the Red Channel and then the Green channel or vice versa. The ordering is up to the user. Whether the component then checks the current context and applies it or waits for a message to be transmitted on either channel is up to the component developer (as retrieving current context requires an additional step - one you can't actually implement at the moment as the component doesn't know its been added to a channel!).
My point is that there isn't a `glitch` as you can't join the channels simultaneously - it's more intuitive than it looks at first glance. I'm being pedantic about the UX as I've used it and seen clients use it. However, I'm not actually arguing for or against it as a UX decision - other than to say that for multi-channel to be possible the API needs to enable it, however, single channel can also be supported via that API if preferred (by Desktop Agent or the Desktop owner).
|
|
Channels joined via the DesktopAgent are PubSub like - which should be clarified in the spec and documentation: #418 |
A Standards Working Group vote is needed on this issue; should it be updated and merged into the 2.0 scope or closed? Issue summary:
Please thumbs up to vote to proceed, thumbs down to vote to close. The vote will be kept open until a few days after the next SWG meeting (Thursday 22nd July 2021). |
If we allow optional support for 'join multiple channels', then we should add a desktop capabiltiies option, so an app can query if join multiple channels is supported. |
I am in favour of allowing an app to programatically join multiple channels (and needs to get list of available channels), we use this for briidge type applications. |
@lspiro-Tick42 The proposal is to allow the join multiple channels via the
As:
there seems little utility in discovering whether join multiple channels is supported - it would make no actual difference to code you write or run to interact with the channel(s). The only time it actually matters is when you are building your own channel selector inside a component (which wouldn't be supported if That said you could just check if |
@kriswest I would like to provide one real use-case that really needs multiple channels. On our users’ desktop, there are many different apps, e.g. trade booking app, market analytics app, pricing app, risk app and reporting app. For a specific app, users can choose which apps (colors of channel) to link (join channels) for contextualization. The given app should be able to link to multiple apps according to different scenarios. So far FDC3 doesn’t support multiple channels, so in order to satisfy this use-case, we had to create two extra APIs (publishToChannel and addChannelListener) that were not specified in FDC3 standard. addChannelListener allows users to link a specific app to multiple channels, and publishToChannel will broadcast the context to all linked channels. |
@Qiana-Citi many thanks for your input and details of your use-case.
We have been able to support multiple channels without the additional functions. As 'it’s users who join/leave channels rather than apps' we only had to modify the UI they do this with and allow apps to exist in multiple channels. The interface for the app developer is unmodified (they I wonder if you're two functions were proposed prior to the addition of channels in FDC3 1.1. Are you happy with the proposed additional functions ( |
@kriswest Thank you for the reply. Yes, the proposed additional functions are exactly what we are looking for. In our previous plan, we would deprecate the two extra APIs (publishToChannel and addChannelListener) right after the multiple channels are supported (leaveChannel and getJoinedChannels are specified) by FDC3 standard. If the two proposed additional functions won't be planned in FDC3 standard, we would consider implementing them as extensions. |
After the last SWG meeting (#459), and based on the informal votes received, it was decided to remove this issue from the FDC3 2.0 milestone - but not to close it to allow discussion to continue or a PR to be submitted for consideration. |
@timjenkel @keithbloom I was told at OSFF yesterday that there's interest at your firm's in being able to join multiple channels in FDC3. This issue hasn't moved in a long.time, but we can bring it back for a further discussion and I can post an updated proposal for (optional) additional API calls for working with it. If you are keen to see this move forward please post something here (a note on use case would be ideal) |
@kriswest I checked with the person you talked to and I think their comment was actually related to Desktop Agent Bridging and not this issue This does sound like a useful enhancement, but I'm not sure that we have an immediate use case that requires it |
Enhancement Request
We would like to propose allowing the desktop agent to join multiple channels.
Use Case:
Note the screenshot above. Here two blotters (let's say portfolio views) are sharing the same chart and news content. These portfolio views are themselves driven by different account views.
Workflow Description and Example:
Additional Information
This would require the following API additions
and following API removals
The text was updated successfully, but these errors were encountered: