filebus

0.2.4 • Public • Published

filebus

Build Status Coverage Status

Social Media Photo by Juan Encalada on Unsplash

A communication channel based on files watcher.

Example

You can clone this repository and inotifywait-spawn in the same folder, enter into the filebus/example directory and launch npm start to see Python and NodeJS communicating with each other.

You can also grasp most of this utility via the following example:

const FileBus = require('filebus');
 
// new instance with either an input to listen for
// or an output to send messages ... or both!
const fb = new FileBus(
  input,  // optional input file to watch
  output  // optional output file to write
);
 
// INPUT relatd API
 
// will be triggered when the file will contain
// "ready" with eventually extra data as JSON
fb.on('ready', console.log);
 
// triggered when there are reading errors
// from the watched input file
fb.on('error', console.error);
 
// stop listening to events
// no more events triggered
fb.stop();
 
 
// OUTPUT related API
 
// will write the following into the output file
// "ready {"optional":"data"}"
// if there is a watcher listening for "ready",
// or any other event name, it will be invoked
// receiving the object {optional: 'data'}
fb.send('ready', {optional: 'data'}).then(() => {
  // executed once the content has been written
  // and also synced with the system
});
 
 
// HANDSHAKE
 
// whenever the input/output files are between two
// different instances of FileBus or two different PLs
// the handshake, from one of the two sides, grants
// that both instances are setup and ready to react
 
fb = new FileBus('.python', '.js', true);
// Python counterpart: fb = FileBus('.js', '.python')
 
// will happen once Python responds
fb.once('handshake', () => {
  fb.send('update-display', 'Hello World');
});
 
fb.handshake();

Communicate with Python 3

This module contains a python/filebus.py file where you can import FileBus and use pretty much exact same API.

Please note the python file also relies in this module dependencies, so that inotifywait-spawn module must be installed too, otherwise its python/inotifywait.py would be missing.

inotifywait requires the Python 3 inotify_simple module.

sudo pip3 install inotify_simple

To import FileBus you can write the following:

import os
import sys
sys.path.insert(1os.path.realpath('./node_modules/filebus/python'))
 
from filebus import FileBus
 
fb = FileBus('test.txt''test.txt'True)
fb.on('ready'lambda data: print(data))
fb.send('ready')
 
# wait for events to trigger 
import time
time.sleep(0.1)
 
# close and cleanup the file 
fb.stop()

Practical Applications

The countdown project is fully based on FileBus to drive e-paper displays, via Python 3, from Node.js.

Check its JS side, or one of its Python counterparts.

Readme

Keywords

Package Sidebar

Install

npm i filebus

Weekly Downloads

13

Version

0.2.4

License

ISC

Unpacked Size

21.8 kB

Total Files

10

Last publish

Collaborators

  • webreflection