maze
  • Introduction
  • Getting Started
    • Quick Start
  • Guides
    • Overview
    • Installation
    • Create New App
    • Directory Structure
    • Configuration
    • Docker
    • Controllers
      • Sessions
      • Request & Response Objects
      • Halt!
      • Respond With
      • Params Validation
      • Cookies
      • Filters
      • Flash
      • Redirection
    • Views
      • View Helpers
    • Models
      • Granite
        • Granite's README
        • Migrations
        • Validations
        • Callbacks
        • Associations
        • Querying
        • Bulk Insertions
      • Crecto
        • Crecto's README
      • Jennifer
        • Jennifer Docs
        • Migrations
        • Models
    • Routing
      • Pipelines
      • Routes
    • Websockets
      • Channels
      • Sockets
      • JavaScript Client
    • Mailers
      • Deliver a new Email
  • Testing
    • System Tests
  • Deployment
    • Digital Ocean
    • Heroku
  • CLI
    • New
    • Recipes
    • Generate
    • Database
    • Watch
    • Routes
    • Exec
    • Encrypt
    • Deploy
  • Examples
    • Maze Auth
    • Crystal Debug
    • Minimal Configuration
  • Troubleshooting
  • Contributing
  • Code of Conduct
  • HAVE A QUESTION?
    • Ask on Gitter
    • Ask on StackOverflow
    • Follow on Twitter
    • Submit an issue
Powered by GitBook
On this page
  • Introduction
  • Example Usage
  • Send messages from controllers (or anywhere else)
  1. Guides
  2. Websockets

Sockets

Introduction

Socket structs are the objects that are stored in memory per connection and retain the persistent communication.

Sockets define one public method on_connect which can contain functionality that should run when a user connects, including authentication. This methods should return a Bool. If true the socket will remain open. If false the socket will be closed immediately.

An Maze::WebSockets::ClientSocket instance has both cookies and session getters and are available from within the on_connect method.

Socket structs also map topics to the channels they will connect with.

Example Usage

A socket can be generated by calling maze g socket ChatSocket

struct ChatSocket < Maze::WebSockets::ClientSocket
  channel "chat_room:*", ChatRoomChannel

  def on_connect
    # self.session and self.cookies available here
    # do authentication here like
    # !self.session[:user_id].nil?

    # returning true accept all connections
    true
  end
end

Send messages from controllers (or anywhere else)

Maze::WebSockets::ClientSocket provides a public class method broadcast for publishing messages to all subscribers of a topic from within controllers or anywhere else in your application.

class HomeController < ApplicationController
  def index
    ChatSocket.broadcast("message", "chat_room:123", "message_new", {"message" => "A new visitor!"})
    render("index.slang")
  end
end
PreviousChannelsNextJavaScript Client

Last updated 7 years ago