post '/payment/transactions/amount' do # => creates a new charge
content_type :json, :charset => 'utf-8'
class Transaction
def initialize(endUserId, code, referenceCode, callback=false)
@endUserId = endUserId
@code = code
@referenceCode = referenceCode
$callback = callback
$transId = rand(1000)
end
def transId
return $transId
end
def callback
return $callback
end
def postCallback
sleep(5)
RestClient.post"#{$callback}", :message => 'CALLBACK SUCCESS', :content_type => :json
end
def to_json(*a)
{"amountTransaction" => {
"endUserId" => @endUserId,
"paymentAmount" =>{
"chargingInformation" => {"code" => @code, "description" => @description},
"totalAmountCharged"=> "0"
},
"referenceCode" => @referenceCode,
"serverReferenceCode" =>"#{(0...6).map{65.+(rand(25)).chr}.join}", # just an example, can be any string
"resourceURL" => "http://localhost:4567/payment/#{@endUserId}/transactions/amount/#{Trans.transId}",
"transactionOperationStatus" => "Processing"
}}.to_json(*a)
end
end
Trans = Transaction.new(params[:endUserId],params[:code], params[:referenceCode], params[:callback])
jsonTrans = Trans.to_json
receipts.addReceipt(Trans.transId,jsonTrans)
jsonTrans
# fire callback
if Trans.callback then
sleep(10)
Trans.postCallback
end
end
Проблемой для меня является код, следующий за #fire callback. Если я опущу это, если ... то, JSON-объект jsonTrans возвращается, как и ожидалось. Когда я включаю if ... then для запуска обратного вызова, то требуемый Trans.postcallback происходит через 5 секунд - но предыдущий jsonTrans не возвращается, он просто игнорируется. Есть идеи, что я делаю не так? Для подтверждения желаемое поведение - вернуть jsonTrans в HTTP-ответ, а затем вызвать метод postCallback через 5 секунд (при условии, что if оценивается как true). Ура! * * 1002
РЕДАКТИРОВАТЬ : Решено путем создания новой темы:
Thread.new {
если Trans.callback тогда
спать (5)
Trans.postCallback
конец}
jsonTrans