private void loop() {
                /* While client is active */
                while (m_IsClientActive) {
                    try {
                        final Message message = readMessage();
                        if (message == null) {
                            m_IsClientActive = false;
                            continue;
                        }

                        /* Update last query time */
                        m_LastQuery.measure();

                        /* Process response using handler */
                        final ServerResponse response = m_ServerHandler.onReceive(m_ID, message);

                        /* If there is a response, then send it, disconnect client otherwise */
                        if (response != null) {
                            if (response.getMessage() != null)
                                if (!processResponse(m_ID, response))
                                    LoggingUtility.debug("Can't send response from client: " + m_ID);
                        }
                        else
                            m_IsClientActive = false;
                    } catch (final Exception e) {
                        LoggingUtility.debug("Exception: " + e.getMessage());
                        LoggingUtility.core("Client closed connection: " + m_ID);
                        m_IsClientActive = false;
                    }
                }
            } /* End of 'Server::loop' method */