Method: Smpp::Base#receive_data

Defined in:
lib/smpp/base.rb

#receive_data(data) ⇒ Object

EventMachine::Connection#receive_data



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/smpp/base.rb', line 92

def receive_data(data)
  #append data to buffer
  @data << data

  while (@data.length >=4)
    cmd_length = @data[0..3].unpack('N').first
    if(@data.length < cmd_length)
      #not complete packet ... break
      break
    end

    pkt = @data.slice!(0,cmd_length)

    begin
      # parse incoming PDU
      pdu = read_pdu(pkt)

      # let subclass process it
      process_pdu(pdu) if pdu
    rescue Exception => e
      logger.error "Error receiving data: #{e}\n#{e.backtrace.join("\n")}"
      if @delegate.respond_to?(:data_error)
        @delegate.data_error(e)
      end
    end

  end
end