Blame view

src/autodiscover.h 4.07 KB
8febebf2   Steven de Ridder   Initial commit. d...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
  /* ****************************************************************************
   * Copyright 2019 Open Systems Development BV                                 *
   *                                                                            *
   * Permission is hereby granted, free of charge, to any person obtaining a    *
   * copy of this software and associated documentation files (the "Software"), *
   * to deal in the Software without restriction, including without limitation  *
   * the rights to use, copy, modify, merge, publish, distribute, sublicense,   *
   * and/or sell copies of the Software, and to permit persons to whom the      *
   * Software is furnished to do so, subject to the following conditions:       *
   *                                                                            *
   * The above copyright notice and this permission notice shall be included in *
   * all copies or substantial portions of the Software.                        *
   *                                                                            *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,   *
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL    *
   * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING    *
   * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER        *
   * DEALINGS IN THE SOFTWARE.                                                  *
   * ***************************************************************************/
  #ifndef OSDEV_COMPONENTS_AUTODISCOVER_H
  #define OSDEV_COMPONENTS_AUTODISCOVER_H
  
  // Qt
  #include <QObject>
  #include <QString>
  #include <QStringList>
  #include <QPointer>
  
  // Local
  #include "pingmanager.h"
  /*
   _______________________________________
  / Dealing with failure is easy:         \
  |                                       |
  | Work hard to improve. Success is also |
  | easy to handle:                       |
  |                                       |
  | You've solved the wrong problem.      |
  |                                       |
  \ Work hard to improve.                 /
   ---------------------------------------
         .--.
        |o_o |
        |:_/ |
       //   \ \
      (|     | )
     /'\_   _/`\
     \___)=(___/
  */
  
  namespace osdev {
  namespace components {
  
  /*!
   * \brief   Autodiscover will check the NIC for its networkaddress and scans
   *          the network for connected and active sensors.
   */
  class AutoDiscover : public QObject
  {
      Q_OBJECT
  
  public:
      /*!
       * \brief AutoDiscover  - The default Constructor
       * \param parent        - The calling QObject
       */
      explicit AutoDiscover( QObject *parent = nullptr );
  
  public slots:
      /*!
       * \brief startDiscovery - Start scanning the network for active sensors.
       */
      void startDiscovery();
  
  private slots:
      /*!
       * \brief slotPingThreadsReady - Will be called when all threads are ready
       */
      void slotPingThreadsReady();
  
      /*!
       * \brief slotDataReceived - Called by the thread that received data.
       * \param ip_address - The ip-address of the sensor
       * \param data       - The data received
       * \param client     - The pointer to the calling object. Can be NULL in most cases.
       */
      void slotDataReceived( const QString &ip_address, const QString &data, QObject *client = nullptr );
  
  signals:
      /*!
       * \brief signalSensorFound - Signal will fire when data was received from one of the threads.
       * \param data              - The received data.
       */
      void signalSensorFound( const QString &data );
  
  private:
      /// Determine the network subnet(s) we're living in.
      void getNetworks();
      /// CHeck all found hosts if they respond to the ID query
      void checkHost();
  
  private:    // Members ( Giggity! )
      QStringList     m_hosts_found;
      QStringList     m_hosts_to_check;
  
      PingManager     m_pingManager;
  
  };
  
  }       /* End namespace components */
  }       /* End namespace osdev  */
  
  #endif  /* OSDEV_COMPONENTS_AUTODISCOVER_H */