0.3.7 • Published 5 years ago

vuex-socketio v0.3.7

Weekly downloads
239
License
MIT
Repository
github
Last release
5 years ago

vuex-socketio

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

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

0.3.7

5 years ago

0.3.6

5 years ago

0.3.5

5 years ago

0.3.4

5 years ago

0.3.3

5 years ago

0.3.2

5 years ago

0.3.1

5 years ago

0.3.0

5 years ago

0.2.2

6 years ago

0.2.1

6 years ago

0.2.0

6 years ago

0.1.1

6 years ago

0.1.0

6 years ago

0.0.9

6 years ago

0.0.8

6 years ago

0.0.7

6 years ago

0.0.6

6 years ago

0.0.5

6 years ago