mirror of
https://github.com/MetinSeylan/Vue-Socket.io.git
synced 2025-04-16 15:21:28 +02:00
add: support namespace listeners in components
This commit is contained in:
parent
54a8ff8f8c
commit
4943c1aca2
2 changed files with 50 additions and 15 deletions
|
@ -37,16 +37,19 @@ export default class VueSocketIO {
|
||||||
...Vue.prototype.$socket,
|
...Vue.prototype.$socket,
|
||||||
[namespace]: this.io
|
[namespace]: this.io
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Vue.prototype.$vueSocketIo = {...Vue.prototype.$vueSocketIo, [namespace]: this};
|
||||||
} else {
|
} else {
|
||||||
Vue.prototype.$socket = {
|
Vue.prototype.$socket = {
|
||||||
[namespace]: this.io
|
[namespace]: this.io
|
||||||
};
|
};
|
||||||
|
Vue.prototype.$vueSocketIo = { [namespace]: this};
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Vue.prototype.$socket = this.io;
|
Vue.prototype.$socket = this.io;
|
||||||
|
Vue.prototype.$vueSocketIo = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
Vue.prototype.$vueSocketIo = this;
|
|
||||||
Vue.mixin(Mixin);
|
Vue.mixin(Mixin);
|
||||||
|
|
||||||
Logger.info('Vue-Socket.io plugin enabled');
|
Logger.info('Vue-Socket.io plugin enabled');
|
||||||
|
|
60
src/mixin.js
60
src/mixin.js
|
@ -7,14 +7,21 @@ export default {
|
||||||
|
|
||||||
if(!this.sockets) this.sockets = {};
|
if(!this.sockets) this.sockets = {};
|
||||||
|
|
||||||
this.sockets.subscribe = (event, callback) => {
|
if (typeof this.$vueSocketIo === 'object') {
|
||||||
|
for (const namespace of Object.keys(this.$vueSocketIo)) {
|
||||||
|
this.sockets[namespace] = {
|
||||||
|
subscribe: (event, callback) => {
|
||||||
|
this.$vueSocketIo[namespace].emitter.addListener(event, callback, this);
|
||||||
|
},
|
||||||
|
unsubscribe: (event) => {
|
||||||
|
this.$vueSocketIo[namespace].emitter.removeListener(event, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
this.$vueSocketIo.emitter.addListener(event, callback, this);
|
this.$vueSocketIo.emitter.addListener(event, callback, this);
|
||||||
};
|
|
||||||
|
|
||||||
this.sockets.unsubscribe = (event) => {
|
|
||||||
this.$vueSocketIo.emitter.removeListener(event, this);
|
this.$vueSocketIo.emitter.removeListener(event, this);
|
||||||
};
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -24,14 +31,27 @@ export default {
|
||||||
|
|
||||||
if(this.$options.sockets){
|
if(this.$options.sockets){
|
||||||
|
|
||||||
Object.keys(this.$options.sockets).forEach(event => {
|
if (typeof this.$vueSocketIo === 'object') {
|
||||||
|
for (const namespace of Object.keys(this.$vueSocketIo)) {
|
||||||
|
if (this.$options.sockets[namespace]) {
|
||||||
|
Object.keys(this.$options.sockets[namespace]).forEach(event => {
|
||||||
|
|
||||||
if(event !== 'subscribe' && event !== 'unsubscribe') {
|
if(event !== 'subscribe' && event !== 'unsubscribe') {
|
||||||
this.$vueSocketIo.emitter.addListener(event, this.$options.sockets[event], this);
|
this.$vueSocketIo[namespace].emitter.addListener(event, this.$options.sockets[namespace][event], this);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
Object.keys(this.$options.sockets).forEach(event => {
|
||||||
|
|
||||||
});
|
if(event !== 'subscribe' && event !== 'unsubscribe') {
|
||||||
|
this.$vueSocketIo.emitter.addListener(event, this.$options.sockets[event], this);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
|
@ -43,11 +63,23 @@ export default {
|
||||||
|
|
||||||
if(this.$options.sockets){
|
if(this.$options.sockets){
|
||||||
|
|
||||||
Object.keys(this.$options.sockets).forEach(event => {
|
if (typeof this.$vueSocketIo === 'object') {
|
||||||
|
for (const namespace of Object.keys(this.$vueSocketIo)) {
|
||||||
|
if (this.$options.sockets[namespace]) {
|
||||||
|
Object.keys(this.$options.sockets[namespace]).forEach(event => {
|
||||||
|
|
||||||
this.$vueSocketIo.emitter.removeListener(event, this);
|
this.$vueSocketIo[namespace].emitter.removeListener(event, this);
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Object.keys(this.$options.sockets).forEach(event => {
|
||||||
|
|
||||||
});
|
this.$vueSocketIo.emitter.removeListener(event, this);
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue