vuex-socketio

0.3.7 • Public • Published

vuex-socketio

Build Status Coverage Status NPM version Vuex v3 compatible Vue CLI 3 compatible Downloads

Vuex plugin for Socket.io-client.

Install

npm install vuex-socketio --save

Usage

Configuration

One socket.io-client instance

import createSocketIoPlugin from 'vuex-socketio';
const socket = socketio('http://socketserver.com:3001');
const socketPlugin = createSocketIoPlugin(socket);

With namespace:

import createSocketIoPlugin from 'vuex-socketio';
const socket = socketio('http://socketserver.com:3001');
const socketNsp = socketio('http://socketserver.com:3001/namespace');
const socketPlugin = createSocketIoPlugin([socket, socketNsp]);

In store:

Vue.use(Vuex);
 
export default new Vuex.Store({
  modules: {
    ...
  },
  plugins: [socketPlugin]
})

Vuex Store integration

Set up listeners

You may define prefix for socket.on with options object:

const socketPlugin = createSocketIoPlugin(socket, {onPrefix: 'someOnPrefix'});

The default value is socketOn

mutations: {
        socketOnConnect: (state,  status ) => {
            state.connect = true;
        },
        socketOnMessage: (state,  message) => {
            state.message = message;
        },
        ...
    },
actions: {
        socketOnOtherMessage: (context, message) => {
        ...some code here
        },
        ...
    }

Where socketOn is a prefix for listeners and message is a desired channel name

Set up emiters

Only actions can be used for emitting to socket

Define socket.emit prefix:

const socketPlugin = createSocketIoPlugin(socket, {emitPrefix: 'someEmitPrefix'});

Or use the default value: socketEmit

actions: {
        socketEmitMessage: (context, message) => {},
        ...
     }

Where socketEmit is a prefix for emitting messages and message is a desired channel name

Open and close socket connection Use: socketConnect && socketDisconnect actions

You can also add some prefixes for default functions, e.g.: socketReconnect,

where socket is a mandatory prefix and reconnect is an existing function name

const socketPlugin = createSocketIoPlugin(socket, {defaultFunctions: ['socketReconnect']);

Set up channel name formatter

You can provide your own channel converter function:

const socketPlugin = createSocketIoPlugin(socket, {converter: _.camelCase});

The default channel name will be in UPPER_SNAKE_CASE

Namespaces for store modules and for socket instances are supported.

import Vue from 'vue'
import Vuex from 'vuex'
 
Vue.use(Vuex);
 
export default new Vuex.Store({
    state: {
        connect: false,
        message: null
    },
    mutations:{
        socketOnConnect: (state,  status ) => {
            state.connect = true;
        },
        socketOnDisconnect: (state,  status ) => {
            state.connect = false;
        },
        socketOnMessage: (state,  message) => {
            state.message = message;
        }
    },
    actions: {
        socketConnect: () => {},
        socketEmitMessage: () => {},
        socketOnOtherMessage: (context, message) => {
        ...some code here
        },
    },
    plugins: [socketPlugin]
})

Socket instance with namespace:

import Vue from 'vue'
import Vuex from 'vuex'
 
Vue.use(Vuex);
 
export default new Vuex.Store({
    state: {
        connect: false,
        message: null
    },
    mutations:{
        namespaceSocketOnConnect: (state,  status ) => {
            state.connect = true;
        },
        namespaceSocketOnDisconnect: (state,  status ) => {
            state.connect = false;
        },
        namespaceSocketOnMessage: (state,  message) => {
            state.message = message;
        }
    },
    actions: {
        namespaceSocketConnect: () => {},
        namespaceSocketEmitMessage: () => {},
        namespaceSocketOnOtherMessage: (context, message) => {
        ...some code here
        },
    },
    plugins: [socketPlugin]
})

Notes

No support for dynamic registred store modules.
Plugin emits first to the socket channel and then it calls related Vuex store action.

Example

demo

Dependents (0)

Package Sidebar

Install

npm i vuex-socketio

Weekly Downloads

60

Version

0.3.7

License

MIT

Unpacked Size

10.9 kB

Total Files

3

Last publish

Collaborators

  • creynir