void sessionEvent( BufferType const & buffer, TypeId const & typeId, KeyType const & keyType)
    {
      m_typeId  = typeId;
      m_keyType = keyType;

      m_buffer.clear();
      m_buffer.reserve(buffer.size());
      m_buffer.insert(m_buffer.end(),buffer.begin(),buffer.end());

      std::cout << "SpotSessionListenerWorker: [" << m_workerName << "] has been received an event." << std::endl;
    }
   Impl( BufferType& buffer, 
         const IPnPort& _destination )
      throw (SocketException) :
      bytesLeft( buffer.size() ),
      curByte( buffer.begin() ),
      destination( _destination ),
      state( BufferSender::ERROR )  {
      // take control of the data
      setBuffer( buff );
      connect();

   }
bool SpotMessageHardwareInfo::parse (BufferType const & buff)
{
  if(buff.size() <= CHeaderSize)  return false; // message too short

  if( buff[CMessageItemQtyOffset] == 0 )
  {
    return true; // This request has no item codes, so this is a request for ALL available items in SPOT.
  }

  bool blRet = AbsSpotMessageWithAppCatCmdID::parse(buff);

  if( !blRet ) return false; // malformed header

  BufferType::const_iterator itDataBegining( buff.begin() + CMessageItemDataOffset );

  m_ItemVector.assign(itDataBegining, itDataBegining + buff[CMessageItemQtyOffset]);

  std::cout << "SpotMessageHardwareInfo::parse() - Length: " << size() << " bytes.\n";
  char* pcBuffer = new char[3 * size() + 2];
  std::cout << "\nMessage Data: " << Utils::dumpBuffer(pcBuffer, &buff.front(), size()) << std::endl << std::endl;
  delete[] pcBuffer;

  return true;
}