appnexus/sicksync

View on GitHub
src/remote/index.js

Summary

Maintainability
A
1 hr
Test Coverage
import _ from 'lodash';
import { FSHelper } from './fs-helper';
import { WSServer } from './ws-server';
import text from '../../conf/text';
import eventsConf from '../../conf/events';

const fsEvents = eventsConf.FS.REMOTE;
const wsEvents = eventsConf.WS.REMOTE;

export function startRemote(opts) {
  if (!_.isNumber(opts.port)) return console.info(text.REMOTE_MISSING_PORT);
  if (!_.isString(opts.secret)) return console.info(text.REMOTE_MISSING_SECRET);

  const log = _.partial(console.info.bind(console), opts.secret);
  const receivedLog = _.partial(log, '<');
  const errorLog = _.partial(log, 'ERR');

  const wss = new WSServer({
    port: opts.port,
    secret: opts.secret,
    debug: opts.debug,
    encrypt: opts.encrypt,
  });

  const fsHelper = new FSHelper();

    // WS events
  wss.on(wsEvents.UNAUTHORIZED, () => {
    log(text.SERVER_ON_UNAUTHORIZED);
    process.exit();
  });

  wss.on(wsEvents.CONNECTION_CLOSED, () => {
    log(text.SERVER_ON_CONNECTION_CLOSED);
    process.exit();
  });

  wss.on(wsEvents.FILE_CHANGE, (message) => {
    switch (message.changeType) {
      case 'add':
        fsHelper.addFile(message);
        break;
      case 'addDir':
        fsHelper.addDir(message);
        break;
      case 'change':
        fsHelper.addFile(message);
        break;
      case 'unlink':
        fsHelper.removePath(message);
        break;
      case 'unlinkDir':
        fsHelper.removePath(message);
        break;
      default:
        break;
    }
  });

    // FS Events
  fsHelper.on(fsEvents.ADD_FILE, receivedLog);
  fsHelper.on(fsEvents.ADD_DIR, receivedLog);
  fsHelper.on(fsEvents.DELETE, receivedLog);

  fsHelper.on(fsEvents.ADD_FILE_ERROR, errorLog);
  fsHelper.on(fsEvents.ADD_DIR_ERROR, errorLog);
  fsHelper.on(fsEvents.DELETE_ERROR, errorLog);
}