/ember-phoenix-channel

A wrapper for the Phoenix Channels JavaScript client

Primary LanguageJavaScriptMIT LicenseMIT

Ember-phoenix-channel Build Status

A wrapper for the Phoenix Channels JavaScript client

  • git clone this repository

  • npm install

  • Ember.js v3.12 or above

  • Ember CLI v2.13 or above

  • Node.js v10 or above

You can see example usage in an implementation of the classic game Timeline.

You can test this against Chris McCord's Phoenix chat example project.

  • Start the Phoenix chat example server as described in the repo
  • Start your Ember server with ember server
  • Open your browser console then visit your app at http://localhost:4200
  • You should see the channel communication in the console

Installation

  your-ember-app> ember install ember-phoenix-channel

Usage

Basic Usage

const channelService = this.get('channelService');
channelService.connect().then(()=> {
  return channelService.joinChannel('someChannel', 'someTopicType'); #see below for info about topic type
}).then((channel) => {
   ...
});

// some up a handler
channel.on(someTopic, (response)=> {
  // do something
});

// push a message to the channel
channel.push("some-event", {payload: somePayload}).receive("error", e=> console.log(e));

Setting up Handlers

To organize your channel responses in a convenient manner, you can subclass the channel service and override the

# app/services/my-channel-service.js

import Ember from 'ember';
import ChannelService from 'ember-phoenix-channel/services/channel-service';

const { computed, inject } = Ember;

export default ChannelService.extend({
  channelTopicHandlers: {

    someTopicType: {
      "some-event1": function(message) {
        ...
      },
      "some-event2": function(someObject) {
        this.get('store').pushPayload(someObject);
        ...
      },
    }
  }
}

When you join the channel, add the topic to attach the appropriate handlers. For example to use the handlers above:

   const channel = channelService.joinChannel(`game:${gameId}`, "someTopicType");

Contributing

See the Contributing guide for details.

License

This project is licensed under the MIT License.