Placeholder-Software / Dissonance

Unity Voice Chat Asset
70 stars 5 forks source link

[help/feature] Support for multiple versions of Dissonance in one Unity app #113

Closed haydenjameslee closed 5 years ago

haydenjameslee commented 5 years ago

Since our product involves enterprise realtime meetings, we need to minimize the impact of backwards incompatible updates. We cannot force our customers to update since their enterprise systems put limitations on software installs along with it being frustrating to delay a meeting by 5 or so minutes while waiting for the update.

With that context out of the way, to prevent any backwards incompatibility issues we would like to include multiple versions of Dissonance in our build. Once a reasonable percentage of customers have updated to the new version then (via a software switch on our server) we can tell all clients to use the newer version.

So the question is: can we currently support multiple versions of Dissonance in one build? If so, how? And if not, would this be possible to add?

martindevans commented 5 years ago

So you basically want to be able to have the updated version of Dissonance in the application (but not in use) and then switch to using it remotely? I think the best way to do that would probably be to use assembly definitions to isolate the two version of Dissonance from each other (check out this issue for some details on using asmdefs with Dissonance). Then everywhere you interact with Dissonance you'd need to add in a switch which checks the version and uses the correct Dissonance version.

Alternatively if you have all of Dissonance isolated in another DLL (through asmdefs) you could try swapping the Dissonance dll created by your assembly definitions. In principle that should just work (tm) but I'm not sure how well that would work in reality with Unity.

However I'm not sure this is necessary for Dissonance. Although it's not impossible that we would make a breaking network protocol change it's very unlikely - we've frozen the network protocol and will try to ensure that all changes are done in a backwards and forwards compatible manner (i.e. old can speak to new, and new can speak to old).

haydenjameslee commented 5 years ago

Just for reference, here's a link to the thread on backwards compatibility: https://github.com/Placeholder-Software/Dissonance/issues/84

haydenjameslee commented 5 years ago

Yes you're understanding of what we want to do is correct. The immediate concern is with the breaking change mentioned in #84 however we'll have to evaluate if its worth the tradeoff of extra dev time to prevent forcing customers to update.

I'll look into what's involved for the asmdefs.

martindevans commented 5 years ago

Ah yes if you're before 6.0.2 this is a problem, we only decided to freeze the protocol after that came up as a problem. Besides asmdefs to split things up I think the best I can do is to say that we are very unlikely to break network compatibility after this, so if you do force the update at least it should only be one time.

haydenjameslee commented 5 years ago

Cool, that's good to know.

martindevans commented 5 years ago

I'm going to close this issue for now. We've added the asmdef support with Dissonance 6.2.5 which I think will help you solve this issue yourself. Please don't hesitate to re-open the issue if you still have problems with this :)