0.0
No commit activity in last 3 years
No release in over 3 years
Yet another observer pattern wrapper library via Observable, DRb, MQTT, Redis.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0
>= 0
>= 0
>= 0
 Project Readme

MessageChannel

Yet another observer pattern library via Observable, DRb, MQTT, Redis.

Features

  • Thread based observer pattern library.

  • Implemented as a wrapper for Obserbable, DRb, MQTT, Redis.

  • Observer can communicate without using sockets.

  • DRb can communicate between processes without using an external server.

  • MQTT and Redis can create apps that can communicate in other languages.

  • Distribute topic as a character string and data as a JSON-encoded character string.

Installation

Add this line to your application’s Gemfile:

gem 'message_channel'

And then execute:

$ bundle install

Or install it yourself as:

$ gem install message_channel
or
$ gem install -l message_channel-x.x.x.gem

Usage

Example 1

require  "message_channel"

Signal.trap( :INT ) do
  exit
end

channel  =  MessageChannel.new

channel.listen( "hello" ) do |topic, **items|
  p [topic, items]
end

while  true
  channel.notify  "hello", {at: Time.now.to_s}
  sleep  1
end

Example 2

require  "message_channel"

Signal.trap( :INT ) do
  exit
end

channel  =  MessageChannel.new

Thread.start do
  while  true
    topic, items  =  channel.listen( "hello", timeout: 0.5 )
    p [topic, items]
  end
end

Thread.start do
  while  true
    channel.notify  "hello", {at: Time.now.to_s}
    sleep  rand
  end
end

sleep

Reference

Create a new MessageChannel::* with conditions.

MessageChannel.new( uri = nil, type: nil, host: nil, port: nil, db: nil )
  • Result:

    • MessageChannel::* object.

  • Parameter:

    • uri: scheme://host:port/params (default: nil)

      • "observer"

      • "druby://127.0.0.1:8787"

      • "mqtt://127.0.0.1:1883"

      • "redis://127.0.0.1:6379/0"

    • type: Channel type. (default: "observer")

      • "observer"

      • "druby"

      • "mqtt"

      • "redis"

    • host: Service host. (default: nil)

    • port: Service port. (default: nil)

    • db: Database. (default: nil)

Notify through the channel.

MessageChannel::Observer#notify( topic, **items )
MessageChannel::Druby#notify( topic, **items )
MessageChannel::Mqtt#notify( topic, **items )
MessageChannel::Redis#notify( topic, **items )
  • Result:

    • nil.

  • Parameter:

    • topic: a notification topic.

    • items: notification items.

Listen to notification through the channel.

MessageChannel::Observer#listen( *patterns, timeout: nil, &block )
MessageChannel::Druby#listen( *patterns, timeout: nil, &block )
MessageChannel::Mqtt#listen( *patterns, timeout: nil, &block )
MessageChannel::Redis#listen( *patterns, timeout: nil, &block )
  • with block: (async)

    • Result:

      • nil.

    • Parameter:

      • patterns: mask patterns.

  • without block: (await)

    • Result: return nil if timeout.

      • topic: a notified topic.

      • items: notified items.

    • Parameter:

      • patterns: mask patterns.

      • timeout: nil or wait second.

    • Block Parameter:

      • topic: a notified topic.

      • items: notified items.

Unlisten to notification.

MessageChannel::Observer#unlisten( *patterns )
MessageChannel::Druby#unlisten( *patterns )
MessageChannel::Mqtt#unlisten( *patterns )
MessageChannel::Redis#unlisten( *patterns )
  • Result:

    • nil.

  • Parameter:

    • patterns: mask patterns.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/arimay/message_channel.

License

The gem is available as open source under the terms of the MIT License.

Copyright (c) ARIMA Yasuhiro <arima.yasuhiro@gmail.com>