1 31 package org.objectweb.proactive.examples.doctor; 32 33 import org.apache.log4j.Logger; 34 35 public class Receptionnist implements org.objectweb.proactive.RunActive { 36 37 static Logger logger = Logger.getLogger(Receptionnist.class.getName()); 38 39 public final static int NO_ONE = -1; 40 int pat_id; 41 int doc_id; 42 Office off; 43 44 45 public Receptionnist() { 46 } 47 48 49 public Receptionnist(Office _off) { 50 off = _off; 51 doc_id = pat_id = NO_ONE; 52 } 53 54 55 public synchronized void addPatient(int pat) { 56 if (pat_id != NO_ONE) { 57 logger.error("ERROR: addPatient(" + pat + ") with pat_id=" + pat_id); 58 System.exit(0); 59 } 60 pat_id = pat; 61 if (doc_id != NO_ONE) { 62 off.doctorWithPatient(doc_id, pat_id); 63 doc_id = pat_id = NO_ONE; 64 } 65 } 66 67 68 public synchronized void addDoctor(int doc) { 69 if (doc_id != NO_ONE) { 70 logger.error("ERROR: addDoctor(" + doc + ") with doc_id=" + doc_id); 71 System.exit(0); 72 } 73 doc_id = doc; 74 if (pat_id != NO_ONE) { 75 off.doctorWithPatient(doc_id, pat_id); 76 doc_id = pat_id = NO_ONE; 77 } 78 } 79 80 81 public synchronized boolean doctorWaiting() { 82 return ((doc_id != NO_ONE) && (pat_id == NO_ONE)); 83 } 84 85 86 public synchronized boolean patientWaiting() { 87 return ((pat_id != NO_ONE) && (doc_id == NO_ONE)); 88 } 89 90 91 public void runActivity(org.objectweb.proactive.Body body) { 92 org.objectweb.proactive.Service service = new org.objectweb.proactive.Service(body); 93 while (body.isActive()) { 94 if (doctorWaiting()) 95 service.blockingServeOldest("addPatient"); 96 if (patientWaiting()) 97 service.blockingServeOldest("addDoctor"); 98 if ((!doctorWaiting()) && (!patientWaiting())) 99 service.blockingServeOldest(); 100 } 101 } 102 } 103 | Popular Tags |