Skip to content

Commit 81d25f6

Browse files
committed
fix(socket.io): update observer to work with socket.io 2
1 parent cb55277 commit 81d25f6

File tree

6 files changed

+900
-88
lines changed

6 files changed

+900
-88
lines changed

dist/build.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,19 @@
2626
},
2727
"homepage": "https://github.com/broidHQ/vue-socket-io#readme",
2828
"dependencies": {
29+
"babel-plugin-proxy": "^1.1.0",
30+
"babel-plugin-syntax-dynamic-import": "^6.18.0",
31+
"babel-plugin-transform-class-properties": "^6.24.1",
32+
"babel-plugin-transform-decorators": "^6.24.1",
33+
"babel-plugin-transform-decorators-legacy": "^1.3.4",
34+
"babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
35+
"babel-plugin-transform-es2015-spread": "^6.22.0",
36+
"babel-plugin-transform-object-rest-spread": "^6.26.0",
37+
"babel-plugin-transform-runtime": "^6.23.0",
38+
"babel-preset-env": "^1.6.0",
39+
"babel-preset-stage-0": "^6.24.1",
40+
"babel-preset-stage-2": "^6.24.1",
41+
"babel-preset-vue-app": "^1.3.1",
2942
"socket.io-client": "^2.0.3",
3043
"typescript": "^2.5.3"
3144
},

src/Observer.ts

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ export default class Observer {
55
public Socket: any;
66
public store: any;
77

8-
constructor(connection, store) {
8+
public constructor(connection, store) {
99
if(typeof connection == 'string'){
1010
this.Socket = Socket(connection);
1111
} else {
@@ -16,17 +16,19 @@ export default class Observer {
1616
this.store = store;
1717
}
1818

19-
this.onEvent()
19+
this.onEvent();
2020
}
2121

22-
onEvent(): void {
22+
public onEvent(): void {
2323
var super_onevent = this.Socket.onevent;
2424
this.Socket.onevent = (packet) => {
2525
super_onevent.call(this.Socket, packet);
2626

2727
Emitter.emit(packet.data[0], packet.data[1]);
2828

29-
if(this.store) this.passToStore('SOCKET_'+packet.data[0], [ ...packet.data.slice(1)])
29+
if (this.store) {
30+
this.passToStore('SOCKET_'+packet.data[0], packet.data[1]);
31+
}
3032
};
3133

3234
let _this = this;
@@ -35,32 +37,38 @@ export default class Observer {
3537
.forEach((value) => {
3638
_this.Socket.on(value, (data) => {
3739
Emitter.emit(value, data);
38-
if(_this.store) _this.passToStore('SOCKET_'+value, data)
40+
if (_this.store) {
41+
_this.passToStore('SOCKET_'+value, data);
42+
}
3943
})
4044
})
4145
}
4246

43-
44-
passToStore(event, payload): void {
45-
if(!event.startsWith('SOCKET_')) {
46-
return
47+
public passToStore(event, payload): void {
48+
if (!event.startsWith('SOCKET_')) {
49+
return;
4750
}
4851

49-
for(let namespaced in this.store._mutations) {
50-
let mutation = namespaced.split('/').pop()
51-
if(mutation === event.toUpperCase()) this.store.commit(namespaced, payload)
52+
for (let namespaced in this.store._mutations) {
53+
let mutation = namespaced.split('/').pop();
54+
if (mutation === event.toUpperCase()) {
55+
this.store.commit(namespaced, payload);
56+
}
5257
}
5358

54-
for(let namespaced in this.store._actions) {
55-
let action = namespaced.split('/').pop()
56-
57-
if(!action.startsWith('socket_')) continue
59+
for (let namespaced in this.store._actions) {
60+
let action = namespaced.split('/').pop();
61+
if (!action.startsWith('socket_')) {
62+
continue;
63+
}
5864

5965
let camelcased = 'socket_'+event
6066
.replace('SOCKET_', '')
6167
.replace(/^([A-Z])|[\W\s_]+(\w)/g, (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase())
6268

63-
if(action === camelcased) this.store.dispatch(namespaced, payload)
69+
if (action === camelcased) {
70+
this.store.dispatch(namespaced, payload);
71+
}
6472
}
6573
}
6674
}

src/Sockets.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,24 @@
11
import Emitter from './Emitter';
22

33
export default class Sockets {
4-
private _listeners: any;
5-
private vm: any;
4+
public _listeners: any;
5+
public vm: any;
66

77
constructor(vm: any) {
88
this.vm = vm;
9+
this._listeners = {};
910
}
1011

1112
get listeners(): any {
1213
return this._listeners;
1314
}
1415

15-
public listener(key: string, value?: string): void {
16+
public listener(key: string, value?: any): void {
1617
if (!value) {
17-
delete this._listeners;
18-
Emitter.removeListener(key, this._listeners[key], this.vm);
18+
if (this._listeners[key]) {
19+
Emitter.removeListener(key, this._listeners[key], this.vm);
20+
delete this._listeners[key];
21+
}
1922
return;
2023
}
2124

src/index.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,25 @@
11
import Observer from './Observer';
2-
32
import Sockets from './Sockets';
43

54
export default {
6-
install(Vue, connection, store) {
5+
install(Vue: any, connection: any, store: any) {
76
if(!connection) {
8-
throw new Error("[Vue-Socket.io] cannot locate connection");
7+
throw new Error("[vue-Socket-io] cannot locate connection");
98
}
109

1110
let observer = new Observer(connection, store);
1211

1312
Vue.prototype.$socket = observer.Socket;
1413

1514
Vue.mixin({
16-
created(){
15+
created() {
1716
let sockets = this.$options['sockets'];
1817

1918
this.$options.sockets = new Sockets(this);
2019

2120
if(sockets){
2221
Object.keys(sockets).forEach((key) => {
23-
this.$options.sockets[key] = sockets[key];
22+
this.$options.sockets.listener(key, sockets[key]);
2423
});
2524
}
2625
},
@@ -29,7 +28,7 @@ export default {
2928

3029
if(sockets){
3130
Object.keys(sockets).forEach((key) => {
32-
delete this.$options.sockets[key]
31+
this.$options.sockets.listener(key);
3332
});
3433
}
3534
}

0 commit comments

Comments
 (0)