1.0.1 • Published 6 years ago

@xaamin/adonis-ws v1.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
6 years ago

Coverage Status Build Status

Install

npm i --save adonis-websocket

Setting up the provider

All providers are registered inside start/app.js file.

const providers = [
  'adonis-websocket/providers/WsProvider'
]

Setting up the alias

Aliases makes it easier to reference a namespace with a short unique name. Aliases are also registered inside start/app.js file.

const aliases = {
  Ws: 'Adonis/Addons/Ws'
}

Setup process is done. Let's use the Ws provider now.

Create file socket.js and ws.js

  • In folder start create file socket.js and ws.js
touch start/socket.js
touch start/ws.js
  • socket.js register chanel
  • ws.js kennel of websocket, i be can config middleware in here

Chanel Base

  • Create Channel base listen connection to path of websocket, in file socket.js
const Ws = use('Ws')

// Ws.channel('/chat', function (contextWs) {
Ws.channel('/chat', function ({ socket }) {
  // here you go
})

Add Middleware

  • Config in file ws name and global

Middlleware global

const Ws = use('Ws')

const globalMiddlewareWs = [
  'Adonis/Middleware/AuthInitWs'
]

const namedMiddlewareWs = {
  auth: 'Adonis/Middleware/AuthWs'
}

Ws.global(globalMiddlewareWs)
Ws.named(namedMiddlewareWs)

Middleware Channel

  • we have two middleware default is Adonis/Middleware/AuthInitWs and Adonis/Middleware/AuthWs using authentication is compatible with Adonis Auth
Ws.channel('/chat', function ({ socket }) {
  // here you go
}).middleware(<name middleware | function>)
  • middleware function
Ws.channel('/chat', function ({ socket }) {
  // here you go
}).middleware(async fuction(context, next) {
  ....
  await next();
})

Create ControllerWs

Create controller websocket is a Chanel

  adonis make:controller <Name>

and select

> For Websocket channel

Struct Controller Ws

  • You can see controller in folder app\Controllers\Ws
'use strict'

class LocationController {
  // constructor (ContextWs) {
  constructor ({ socket, request }) {
    console.log('constructor');
    this.socket = socket
    this.request = request
  }

  // listion event `ready`
  onReady () {
    console.log('ready');
    this.socket.toMe().emit('my:id', this.socket.socket.id)
  }

  joinRoom(ContextWs, payload) {

  }

  leaveRoom(ContextWs, payload) {

  }
}

module.exports = LocationController

Structs ContextWs

  • Structs object ContextWs

Attribute socket

  • auth is Object AddonisSocket
AddonisSocket
  • attribute io of socket.io
  • attribute socket of socket.io when client connect to Chanel
  • method id is id of socket
  • method rooms get list room
  • method on is socket.on
  • method to get socket of id connect
  • method join and leave is room
  • method disconnect disconnect chanel

Attribute auth

  • auth is Adonis Auth

Attribute request

  • request is Adonis request

You can find a complete guide to be followed strictly before submitting your pull requests in the Official Documentation.