class Wialon::Sdk

Attributes

base_url[RW]
default_params[RW]
host[RW]
is_development[RW]
session_id[RW]
user_id[RW]

Public Class Methods

new(is_development = false, scheme = 'https', host = 'hst-api.wialon.com', port = 0, session_id = '', extra_params = {}) click to toggle source
# File lib/wialon.rb, line 10
def initialize(is_development = false, scheme = 'https', host = 'hst-api.wialon.com', port = 0, session_id = '', extra_params = {})
  self.is_development = is_development
  self.session_id = session_id
  self.host = host

  self.default_params = {}
  self.default_params.replace(extra_params)

  if port < 0
    raise SdkException.new('Invalid port, must be greater than 0')
  elsif port.to_i > 0
    self.base_url = "#{scheme}://#{host}:#{port}"
  else
    self.base_url = "#{scheme}://#{host}"
  end

  self.base_url += '/wialon/ajax.html?'
  self.user_id = 0
end

Public Instance Methods

get_session_id() click to toggle source
# File lib/wialon.rb, line 81
def get_session_id
  return self.session_id
end
login(token) click to toggle source
# File lib/wialon.rb, line 63
def login(token)
  result = self.token_login({ token: token })

  self.user_id = result['user']['id']
  self.session_id = result['eid']

  return result
end
logout() click to toggle source
# File lib/wialon.rb, line 72
def logout
  self.core_logout
  return nil
end
reverse_geocoding(latitude, longitude, flags=1255211008) click to toggle source
# File lib/wialon.rb, line 30
def reverse_geocoding(latitude, longitude, flags=1255211008)
  coordinates = JSON.generates({latitude: latitude, longitude: longitude})
  url = "https://geocode-maps.wialon.com/#{self.host}/gis_geocode?coords=[#{coordinates}]&flags=#{flags}&uid=#{self.user_id}"

  if self.is_development
    self.debug_printer("Method: Reverse geocoding service\nURL: #{url}")
  end

  begin
    uri = URI.parse(url)
  rescue Exception => e
    raise SdkException.new("Internal error: #{e}")
  end

  request = Net::HTTP::Post.new(uri)

  begin
    response = Net::HTTP.start(uri.hostname, uri.port, { use_ssl: uri.scheme == 'https' }) do |http|
      http.request(request)
    end
  rescue Exception => e
    raise SdkException.new("Internal error: #{e}")
  end

  begin
    response = JSON.parse(response.body)
  rescue Exception => e
    raise SdkException.new("Internal error: #{e}")
  end

  return response[0]
end
set_session_id(session_id) click to toggle source
# File lib/wialon.rb, line 77
def set_session_id(session_id)
  self.session_id = session_id
end

Protected Instance Methods

call(method_name, args) click to toggle source
# File lib/wialon.rb, line 86
def call(method_name, args)
  svc = ''
  if method_name.to_s == 'unit_group_update_units'
    svc = 'unit_group/update_units'
  else
    svc = method_name.to_s.sub('_', '/')
  end

  begin
    parameters = JSON.generate(args)
  rescue Exception => e
    raise SdkException.new("Internal error: #{e}")
  end

  parameters = {
    svc: svc,
    params: parameters,
    sid: self.session_id
  }

  url = "#{self.base_url}svc=#{parameters[:svc]}&params=#{parameters[:params]}&sid=#{parameters[:sid]}"
  if self.is_development
    self.debug_printer("Method: #{svc}\nParameters: #{parameters}\nURL: #{url}")
  end

  begin
    uri = URI.parse(url)
  rescue Exception => e
    raise SdkException.new("Internal error: #{e}")
  end

  request = Net::HTTP::Post.new(uri)
  request.set_form_data(
    'svc' => parameters[:svc],
    'params' => parameters[:params],
    'sid' => parameters[:sid]
  )

  begin
    response = Net::HTTP.start(uri.hostname, uri.port, { use_ssl: uri.scheme == 'https' }) do |http|
      http.request(request)
    end
  rescue Exception => e
    raise SdkException.new("Internal error: #{e}")
  end

  begin
    response = JSON.parse(response.body)
  rescue Exception => e
    raise SdkException.new("Internal error: #{e}")
  end

  if response.class == Hash
    if !response['error'].nil?
      if response['error'] != 0
        raise Wialon::Error.new(response['error'].to_i, (response['reason'].nil? ? '' : response['reason']))
      end
    end
  end

  return response
end
debug_printer(message) click to toggle source
# File lib/wialon.rb, line 149
def debug_printer(message)
  puts "*******" * 10
  puts "#{message}"
  puts "*******" * 10
end
method_missing(method_name, *args) click to toggle source
# File lib/wialon.rb, line 155
def method_missing(method_name, *args)
  return self.call(method_name, args.count == 0 ? {} : args[0])
end