# File lib/swiftcore/Analogger/AnaloggerProtocol.rb, line 18
    def receive_data data
      @logchunk << data
      decompose = true
      while decompose
        unless @length
          if @logchunk.length - @pos > 7
            l = @logchunk[@pos + 0..@pos + 3].to_i
            ck = @logchunk[@pos + 4..@pos + 7].to_i
            if l == ck and l < MaxMessageLength
              @length = l
            else
              decompose = false
              peer = get_peername
              peer = peer ? ::Socket.unpack_sockaddr_in(peer)[1] : 'UNK'
              if l == ck
                LoggerClass.add_log([:default, :error, "Max Length Exceeded from #{peer} -- #{l}/#{MaxMessageLength}"])
                send_data(-"error: max length exceeded\n")
                close_connection_after_writing
              else
                LoggerClass.add_log([:default, :error, "checksum failed from #{peer} -- #{l}/#{ck}"])
                send_data(-"error: checksum failed\n")
                close_connection_after_writing
              end
            end
          end
        end

        if @length && @length < 8
          decompose = false
        end

        if @length and @length > 0 and @logchunk.length - @pos >= @length
          msg = nil
          msg = @logchunk[@pos..@length + @pos - 1].split(Rcolon, 4)
          @pos += @length
          unless @authenticated
            if msg.last == LoggerClass.key
              @authenticated = true
              send_data(-"accepted\n")
            else
              send_data(-"denied\n")
              close_connection_after_writing
            end
          else
            msg[0] = nil
            msg.shift
            LoggerClass.add_log(msg)
          end
          @length = nil
        else
          decompose = false
        end
      end
      if @pos >= @logchunk.length
        @logchunk.clear
        @pos = 0
      end
    end