class DeployGate::AddDevicesServer

Public Class Methods

build(pool, bunlde_id, iphones, member_center, args, options) click to toggle source
# File lib/deploygate/add_devices_server.rb, line 35
def self.build(pool, bunlde_id, iphones, member_center, args, options)
  iphones.reject! { |iphone| iphone['is_registered'] } # remove udids if already registered
  devices = iphones.map do |iphone|
    udid = iphone['udid']
    device_name= iphone['device_name']
    DeployGate::Xcode::MemberCenters::Device.new(udid, '', device_name, member_center)
  end
  return if devices.empty?

  puts HighLine.color(I18n.t('command_builder.add_devices.server.start_build'), HighLine::GREEN)
  pool.perform do
    DeployGate::Commands::AddDevices.register!(devices)
    DeployGate::Commands::AddDevices.build!(bunlde_id, args, options)
    puts HighLine.color(I18n.t('command_builder.add_devices.server.finish_build'), HighLine::GREEN)
    puts ''
  end
end

Public Instance Methods

start(token, owner_name, bundle_id, distribution_key, member_center, args, options) click to toggle source
# File lib/deploygate/add_devices_server.rb, line 4
def start(token, owner_name, bundle_id, distribution_key, member_center, args, options)
  options.server = false

  puts I18n.t('command_builder.add_devices.server.connecting')
  res = DeployGate::API::V1::Users::Apps::CliWebsockets.create(token, owner_name, bundle_id, distribution_key)

  server = res[:webpush_server]
  push_token  = res[:push_token]
  action  = res[:action]
  if res[:error] || server.blank? || push_token.blank? || action.blank?
    raise res[:message]
  end

  websocket_setup(server, bundle_id, push_token, action, member_center, args, options) do |socket|
    puts HighLine.color(I18n.t('command_builder.add_devices.server.start'), HighLine::GREEN)

    Workers::PeriodicTimer.new(60) do
      DeployGate::API::V1::Users::Apps::CliWebsockets.heartbeat(token, owner_name, bundle_id, distribution_key, push_token)
    end

    Signal.trap(:INT){
      socket.disconnect
      exit 0
    }
  end

  loop do
    sleep 60
  end
end

Private Instance Methods

websocket_setup(server, bundle_id, push_token, target_action, member_center, args, options, &block) click to toggle source
# File lib/deploygate/add_devices_server.rb, line 55
def websocket_setup(server, bundle_id, push_token, target_action, member_center, args, options, &block)
  socket = SocketIO::Client::Simple.connect server
  socket.on :connect do
    socket.emit :subscribe, push_token
    block.call(socket)
  end

  socket.on :error do
    raise 'Socket Error'
  end

  pool = Workers::Pool.new(size: 1, on_exception: proc { |e|
    raise e
  })
  socket.on push_token do |push_data|
    return if push_data['action'] != target_action
    data = JSON.parse(push_data['data'])

    iphones = data['iphones']
    DeployGate::AddDevicesServer.build(pool, bundle_id, iphones, member_center, args, options)
  end
end