def output_function(self, current_time, elapsed):
     output = {}
     for contract in self.contracts:
         pending_orders = self.next_orders_delivery[contract]
         if len(pending_orders) > 0:
             next_pending_order = heapq.heappop(pending_orders)
             assert (current_time + elapsed <=
                     next_pending_order.wakeup_time)
             self.debug(
                 'Check pending order: %f %f %f' %
                 (current_time, elapsed, next_pending_order.wakeup_time))
             if eq_rounded(current_time + elapsed,
                           next_pending_order.wakeup_time):
                 next_order = next_pending_order.order
                 self.debug("Order ready: %s" % str(next_order))
                 self.orders_sent.append(next_order.m_orderId)
                 output['out_order'] = MessageForOrderbook(
                     self.identifier, current_time + elapsed, next_order)
                 break
             else:
                 self.debug("Pending Order not ready: %f %f %f" %
                            (current_time, elapsed,
                             next_pending_order.wakeup_time))
                 heapq.heappush(self.next_orders_delivery[contract],
                                next_pending_order)
     # Emit output
     return output
Example #2
0
 def output_function(self, current_time, elapsed):
     output = {}
     for output_port in self.get_devs_model().output_ports:
         if output_port == 'out_order':
             send, order = self.get_next_order(current_time, elapsed)
             if send is True:
                 self.log('Send order %i' % order.m_orderId)
                 output[output_port] = MessageForOrderbook(
                     agent=self.get_devs_model().identifier,
                     time_sent=current_time + elapsed,
                     value=order)
         else:
             raise Exception()
     return output