private void handleICampaignOpportunityMessage(CampaignOpportunityMessage com) {

    w.day = com.getDay();

    d.pendingCampaign = new CampaignData(com);
    System.out.println("Day " + w.day + ": Campaign opportunity - " + d.pendingCampaign);

    // -------------Leela Campaign Bid--------------
    long cmpBidMillis = ca.bidValue(com);
    System.out.println("Day " + w.day + ": Campaign total budget bid (millis): " + cmpBidMillis);

    if (d.dailyNotification != null) {

      d.ucsBid = ua.bidValue();
      d.lastUCS = d.ucsBid;
      System.out.println(
          "Day " + w.day + ": ucs level reported: " + d.dailyNotification.getServiceLevel());
    } else {
      System.out.println("Day " + w.day + ": Initial ucs bid is " + d.ucsBid);
    }
    /* Note: Campaign bid is in millis */
    AdNetBidMessage bids;
    /*if(shouldBid){
        bids = new AdNetBidMessage(ucsBid, d.pendingCampaign.id, cmpBidMillis);
    }
    else{
        bids = new AdNetBidMessage(0.1, d.pendingCampaign.id, cmpimps);
        System.out.println("DID NOT BID! OVERLAP!!");
    }*/
    // cmpBidMillis=(long)(cmpimps*0.1);
    bids = new AdNetBidMessage(d.ucsBid, d.pendingCampaign.id, cmpBidMillis);
    sendMessage(demandAgentAddress, bids);
  }
  @Override
  protected void simulationSetup() {

    w.day = 0;
    d.bidBundle = new AdxBidBundle();

    /* initial bid between 0.1 and 0.2 */
    d.ucsBid = 0.2;

    d.campaigns = new HashMap<Integer, CampaignData>();
    log.fine("AdNet " + getName() + " simulationSetup");
  }
  /**
   * On day n ( > 0), the result of the UserClassificationService and Campaign auctions (for which
   * the competing agents sent bids during day n -1) are reported. The reported Campaign starts in
   * day n+1 or later and the user classification service level is applicable starting from day n+1.
   */
  private void handleAdNetworkDailyNotification(AdNetworkDailyNotification notificationMessage) {

    d.dailyNotification = notificationMessage;

    System.out.println(
        "Day "
            + w.day
            + ": Daily notification for campaign "
            + d.dailyNotification.getCampaignId());

    String campaignAllocatedTo = " allocated to " + notificationMessage.getWinner();

    if ((d.pendingCampaign.id == d.dailyNotification.getCampaignId())
        && (notificationMessage.getCostMillis() != 0)) {

      /* add campaign to list of won campaigns */
      d.pendingCampaign.setBudget(notificationMessage.getCostMillis() / 1000.0);
      d.currCampaign = d.pendingCampaign;
      genCampaignQueries(d.currCampaign);
      d.campaigns.put(d.pendingCampaign.id, d.pendingCampaign);
      for (int i = (int) d.pendingCampaign.dayStart; i <= (int) d.pendingCampaign.dayEnd; i++) {
        d.campTrack.get(i).add(d.pendingCampaign.id);
      }

      campaignAllocatedTo = " WON at cost (Millis)" + notificationMessage.getCostMillis();
      em.pastQBWon.add(
          notificationMessage.getQualityScore()
              / (notificationMessage.getPrice() / d.currCampaign.reachImps));
    } else {
      em.pastQBLost.add(
          notificationMessage.getQualityScore()
              / (notificationMessage.getPrice() / d.pendingCampaign.reachImps));
      for (int i = (int) d.pendingCampaign.dayStart; i <= (int) d.pendingCampaign.dayEnd; i++) {
        d.otherCampTrack.get(i).add(d.pendingCampaign.id);
      }
    }

    System.out.println(
        "Day "
            + w.day
            + ": "
            + campaignAllocatedTo
            + ". UCS Level set to "
            + notificationMessage.getServiceLevel()
            + " at price "
            + notificationMessage.getPrice()
            + " Quality Score is: "
            + notificationMessage.getQualityScore());
  }
  public void handleInitialCampaignMessage(InitialCampaignMessage campaignMessage) {
    System.out.println(campaignMessage.toString());
    /**
     * ***********************************Open and read the camplog
     * file******************************************************
     */
    String str = null;
    try {
      //  int count = 0;
      FileReader file = new FileReader("camLog.txt");
      BufferedReader reader = new BufferedReader(file);

      str = reader.readLine();

      campaignData.count = Integer.parseInt(str);

    } catch (IOException e) {

    }

    System.out.println("********^^^^^^^^^^^^^^^^^^^^******************" + campaignData.count);

    /**
     * ***********************************end
     * file****************************************************************************
     */
    w.day = 0;

    initialCampaignMessage = campaignMessage;
    demandAgentAddress = campaignMessage.getDemandAgentAddress();
    adxAgentAddress = campaignMessage.getAdxAgentAddress();

    CampaignData campaignData = new CampaignData(initialCampaignMessage);
    campaignData.setBudget(initialCampaignMessage.getBudgetMillis() / 1000.0);
    d.currCampaign = campaignData;
    initTotalPopularity(campaignData);
    genCampaignQueries(campaignData);

    /*
     * The initial campaign is already allocated to our agent so we add it
     * to our allocated-campaigns list.
     */
    System.out.println("Day " + w.day + ": Allocated campaign - " + campaignData);
    d.campaigns.put(initialCampaignMessage.getId(), campaignData);
    for (int i = 0; i < 60; i++) {
      d.campTrack.add(new ArrayList<Integer>());
      d.otherCampTrack.add(new ArrayList<Integer>());
    }
    for (int i = (int) d.currCampaign.dayStart; i <= (int) d.currCampaign.dayEnd; i++) {
      d.campTrack.get(i).add(d.currCampaign.id);
    }
  }
 @Override
 protected void simulationFinished() {
   campaignReports.clear();
   d.bidBundle = null;
 }