split-join

0.0.8 • Public • Published

Split -> Join Streams

Build Status

NPM

A pair of streams and a cache to facilitate serialization and deserialization of javascript objects.

Classes

  • Split
  • Join
  • Cache

Split - abstract interface (stream)

This class must be extended and split(obj) method must be implemented. The split(obj) method must serialize the obj into array of packets and the result must be cached with unique ID string. Must return the ID.

Join - abstract interface (stream)

This class must be extended and join(packet) method must be implemented. At every execution the join(packet) method must create an array of the chunks which make up the original obj and cache it with unique ID string.
If the array contains enough packets to reassemble the original obj, the
join(packet) method must return the ID, otherwise, it must return null

Usage (CoffeeScript)

Implement Split (provided as requireable simple.Split)

class Split extends (require 'split-join').Split
  split: (obj) ->
    if @cache.isFull then throw new Error 'Cache is full'
    chunksId = Math.random().toString(36)
    @cache.add chunksIdchunks = (JSON.stringify obj).match /.{1,256}/g
    total = chunks.length
    for chunkindex in chunks
      chunks[index= "#{chunksId} #{index} #{total}\n\n#{chunk}"
    return chunksId

Implement Join (provided as requireable simple.Join)

class Join extends (require 'split-join').Join
  regexp = /^([^\s]+)\s+([^\s]+)\s+([^\s]+)\s*?\n\n(.+)$/m
  join: (packet) ->
    if parsed = packet.toString().match regexp
      [idindextotalchunk] = parsed[1..4]
    unless chunks = @cache.get id
      if @cache.isFull then throw new Error 'Cache is full'
      @cache.add idchunks = []
    chunks.push chunk
    if (parseInt index) + 1 is (parseInt total)
      return id
    return

Sender

socket = getSocketSomehow()
split = new Split
split.pipe socket
 
# serialize the array into packets and send them out 
split.write [ 'data''from''sender' ]

Receiver

socket = getSocketSomehow()
join = new Join
socket.pipe join
 
# the data coming from join will be the array from the sender 

Package Sidebar

Install

npm i split-join

Weekly Downloads

1

Version

0.0.8

License

MIT

Last publish

Collaborators

  • nhz.io