public boolean processEvent(Sim_event ev){
       int src_id = -1;
       Message msg = null;
       Message respMsg = null;
            
       if (responder == null){
       		System.out.println("No responder to deal with auction messages!");
            return false;
       }
           
       switch ( ev.get_tag() ){
       		case AuctionTags.AUCTION_INFORM_START:
               	msg = (Message)ev.get_data();
               	src_id = msg.getSourceID();
               	synchronized(syncSteps){
               		respMsg = responder.onReceiveStartAuction((MessageInformStart)msg);
               	}
           	break;
            	
            case AuctionTags.AUCTION_CFP:
               	msg = (Message)ev.get_data();
               	src_id = msg.getSourceID();
               	synchronized(syncSteps){
               		respMsg = responder.onReceiveCfb((MessageCallForBids)msg);
               	}
            break;
            	
            case AuctionTags.AUCTION_INFORM_OUTCOME:
               	msg = (Message)ev.get_data();
              	src_id = msg.getSourceID();
              	synchronized(syncSteps){
              		respMsg = responder.onReceiveInformOutcome((MessageInformOutcome)msg);
              	}
            break;

            case AuctionTags.AUCTION_REJECT_PROPOSAL:
               	msg = (Message)ev.get_data();
               	src_id = msg.getSourceID();
               	synchronized(syncSteps){
               		respMsg = responder.onReceiveRejectProposal((MessageRejectBid)msg);
               	}
            break;
            	
            // other unknown tags are processed by this method
            default:
            	return false;
       }
            
       if(respMsg!=null){
       		respMsg.setDestinationID(src_id);
        		
       		int tag = - 1;
       		if(respMsg instanceof MessageBid){
        		tag = AuctionTags.AUCTION_PROPOSE;
        		((MessageBid)respMsg).setBidder(this.bidderID);
        	}
        	else if(respMsg instanceof MessageRejectCallForBid){
        		tag = AuctionTags.AUCTION_REJECT_CALL_FOR_BID;
        		((MessageRejectCallForBid)respMsg).setBidder(this.bidderID);
        	}
        	
        	double scheduleAt = (respMsg.getScheduleTime() > 0.0) ? 
        			respMsg.getScheduleTime() : GridSimTags.SCHEDULE_NOW;  
        	
        	super.sim_schedule(this.outputPort, scheduleAt,
        			tag, new IO_data(respMsg, 100, src_id));
       }
       return true;
	}