code: function Dispatcher (opts) {
      // provide some default value
      this.opts=
          { debug      : opts.debug    || 3              // default no debug
          , dumpfile   : opts.dumpfile || null           // filename for log file or NMEA generated commands
          , hostname   : opts.hostname || 'localhost'    // default localhost for client connect host
          , srvmod     : opts.srvmod   || false          // default is client mode
          , port       : opts.port     || 1234           // no default for port
          , cltmod     : opts.cltmod   || true           // default mode is client connect
          , timeout    : opts.timeout*1000  || 180000    // reconnect timeout default 180s
      };
  
      // verbose flag is global
      if (opts.verbose) Verbose = true;
  
      // if needed check dumpfile can be create
      if (this.opts.dumpfile !== null) {
          try { // dump fd is global
              DumpFD= fs.openSync (this.opts.dumpfile, "w+");
          } catch (err) {
              console.log ("hoops file to open [%s] err=[%s]",this.opts.dumpfile, err);
          }
      }
  
      // if needed start a Tcp server
      if (this.opts.srvmod) {
          this.opts.cltmod=false;    // when server cannot be a client
          this.TcpServer (); // start a server waiting on --port/localhost
      }
  
      // in client mode we connect onto a remote server
      if (this.opts.cltmod) {
          this.TcpClient();  // when connected will enter ClientListener() event handler
      }
  
      // validate Queue where position will be posted
       QJhandle  = async.queue  (QJpost, 1);
  }
docs: /*
  Dispatcher constructor, start TCP server, connect on client on open dumpfile if requested.
  it also create QJob queue and register for listening to simulator position/statics events.