probil / vue-socket.io-extended

:v::zap: Socket.io bindings for Vue.js and Vuex (inspired by Vue-Socket.io)
MIT License
629 stars 38 forks source link

Add a `uninstall` or `reset` method #416

Open JonLev opened 5 years ago

JonLev commented 5 years ago

Hi,

I use this great lib for a chat widget, with the constraint to have the possibility of a dynamic reset. The issue is that when I make the reset I need to re-set the socket instance used by VueSocketIOExt with new parameters. What I do today is:

// First set-up
Vue.use(
        VueSocketIOExt,
        io(SOCKET_URL, OPTIONS),
)
// Before the reset
Vue.prototype.$socket.client.close();
Vue.prototype.$socket.client.destroy();
// Then the reset happening:
Vue.use(
        VueSocketIOExt,
        io(SOCKET_URL, MY_NEW_OPTIONS),
)

It seems that do not work because of VueJS use logic that do not apply all operations if the module was already installed: https://github.com/vuejs/vue/blob/399b53661b167e678e1c740ce788ff6699096734/test/unit/features/global-api/use.spec.js#L20

The result is that the emission try to use the old instance of SocketIO client and not the new one I just set. Would you consider in your roadmap to split the installation and the set of the SocketIO client ? today I need to do some hack like:

    const installedPluginIndex = Vue._installedPlugins.indexOf(VueSocketio);
    if (installedPluginIndex > 0) {
        Vue._installedPlugins.splice(installedPluginIndex, 1);
    }

but depending of VueJS core keys and that's not good...

capndave commented 5 years ago

@probil: This is a bit over my head, but a comment to this post suggests that this Vuex method may demonstrate a way to un-use / uninstall a Vue plugin. Will try to research more later.

ingles98 commented 4 years ago

I need this. My current project requires me to implement server selection for the users. When connecting to the first server, users cannot just "logout" and connect to a different one. Any way around this ?

disolva commented 3 years ago

Any news on this? Many thanks

cybersupernova commented 3 years ago

We also have a similar condition designing a SPA where we want to change socket connection on route change, depending upon route params.

I tried destroying the this.$socket.client object but this plugin seems not to emit events on the new connection