2
0
mirror of https://github.com/tenrok/vue-native-websocket.git synced 2026-06-11 09:32:26 +03:00
This commit is contained in:
Metin Seylan
2016-10-29 00:47:04 +03:00
parent 88d8479209
commit 7f5fac27d0
16 changed files with 198 additions and 440 deletions
+48
View File
@@ -0,0 +1,48 @@
export default new class {
constructor() {
this.listeners = new Map();
}
addListener(label, callback, vm) {
if(typeof callback == 'function'){
this.listeners.has(label) || this.listeners.set(label, []);
this.listeners.get(label).push({callback: callback, vm: vm});
return true
}
return false
}
removeListener(label, callback, vm) {
let listeners = this.listeners.get(label),
index;
if (listeners && listeners.length) {
index = listeners.reduce((i, listener, index) => {
return (typeof listener.callback == 'function' && listener.callback === callback && listener.vm == vm) ?
i = index :
i;
}, -1);
if (index > -1) {
listeners.splice(index, 1);
this.listeners.set(label, listeners);
return true;
}
}
return false;
}
emit(label, ...args) {
let listeners = this.listeners.get(label);
if (listeners && listeners.length) {
listeners.forEach((listener) => {
listener.callback.call(listener.vm,...args)
});
return true;
}
return false;
}
}
+40
View File
@@ -0,0 +1,40 @@
import Observer from './Observer'
import Emitter from './Emitter'
export default {
install(Vue, connection){
if(!connection) throw new Error("[Vue-Socket.io] cannot locate connection")
let observer = new Observer(connection)
Vue.prototype.$socket = observer.Socket;
Vue.mixin({
beforeCreate(){
let _this = this;
let sockets = this.$options['sockets']
if(sockets){
Object.keys(sockets).forEach(function(key) {
Emitter.addListener(key, sockets[key], _this)
});
}
},
beforeDestroy(){
let _this = this;
let sockets = this.$options['sockets']
if(sockets){
Object.keys(sockets).forEach(function(key) {
Emitter.removeListener(key, sockets[key], _this)
});
}
}
})
}
}
+33
View File
@@ -0,0 +1,33 @@
import Emitter from './Emitter'
import Socket from 'socket.io-client'
export default class{
constructor(connection) {
if(typeof connection == 'string'){
this.Socket = Socket(connection);
}else{
this.Socket = connection
}
this.onEvent()
}
onEvent(){
this.Socket.onevent = (packet) => {
Emitter.emit(packet.data[0], packet.data[1])
}
let _this = this;
["connect", "error", "disconnect", "reconnect", "reconnect_attempt", "reconnecting", "reconnect_error", "reconnect_failed"]
.forEach((value) => {
_this.Socket.on(value, (data) => {
Emitter.emit(value, data)
})
})
}
}