code: function WifiListener() {
    EventEmitter.call(this);
  
    this._promiseQueue = new PromiseQueue();
    this._isListening = false;
    this._filterMessageFn = null;
  
    this._client = new nodessdp.Client({
      ssdpIp: thaliConfig.SSDP_IP,
      thaliLogger: require('../ThaliLogger')('nodeSSDPClientLogger')
    });
  
    Promise.promisifyAll(this._client, {
      filter: function (methodName) {
        return methodName === 'start' || methodName === 'stop';
      }
    });
  
    this._client.on('advertise-alive', function (data) {
      this._handleMessage(data, true);
    }.bind(this));
  
    this._client.on('advertise-bye', function (data) {
      this._handleMessage(data, false);
    }.bind(this));
  }
docs: @file
  
  This is the interface used to manage local discover of peers over a Wi-Fi
  Infrastructure mode access point.
  
  All the methods defined in this file are asynchronous. However any time a
  method is called the invocation will immediately return but the request will
  actually be put on a queue and all incoming requests will be run out of that
  queue. This means that if one calls two start methods on say advertising or
  discovery then the first start method will execute, call back its promise and
  only then will the second start method start running. This restriction is in
  place to simplify the state model and reduce testing.
  
  All stop methods in this file are idempotent so they can be called multiple
  times in a row without causing a state change.
   
  @class WifiListener