Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: com/memoire/xmas/test/XmasTestFactorial.java


1   
2   package com.memoire.xmas.test;
3   
4   import com.memoire.xmas.*;
5   import com.memoire.xmas.basic.*;
6   import java.util.*;
7   
8   public class XmasTestFactorial
9     extends XmasBasicThreadedAgent
10  {
11    private XmasBasicAddress from_;
12    private Object           task_;
13  
14    private transient Hashtable        todo_;
15    private transient Hashtable        runn_;
16    private transient Hashtable        done_;
17    private transient Hashtable        data_;
18    private transient Stack            results_;
19    private transient XmasBasicMailbox messages_;
20  
21    protected void init()
22    {
23      todo_    =new Hashtable(11);
24      runn_    =new Hashtable(11);
25      done_    =new Hashtable(11);
26      data_    =new Hashtable(11);
27      results_ =new Stack();
28      messages_=new XmasBasicMailbox();
29  
30      super.init();
31    }
32  
33    protected synchronized void handle
34      (XmasBasicAddress _from,
35       String _act, String _skill, Object _content, Object _ref)
36    {
37      /*
38      if("announce".equals(_act)&&"factorial".equals(_skill))
39      {
40        int price=((task_!=null) ? 1 : 0)+messages_.size();
41        sendBasicMessage(_from,"bid","factorial",""+price,_ref);
42      }
43      else
44      if("contract".equals(_act)&&"factorial".equals(_skill))
45      {
46        int price=((task_!=null) ? 1 : 0)+messages_.size();
47        sendBasicMessage(_from,"accept","factorial",""+price,_ref);
48      }
49      else
50      */
51      if("cancel".equals(_act)&&"task".equals(_skill))
52      {
53        inbox_   .cancel(_from,_ref);
54        messages_.cancel(_from,_ref);
55  
56        if((task_!=null)&&(from_!=null)&&task_.equals(_ref)&&from_.equals(_from))
57        {
58    //XmasBasicAddress my=(XmasBasicAddress)XmasBasicDirectory.DEFAULT.get(this);
59    outbox_.cancel(XmasBasicAddress.ALL,_ref);
60  
61    Enumeration e;
62  
63    e=todo_.keys();
64    while(e.hasMoreElements())
65    {
66      Object r=e.nextElement();
67      inbox_ .cancel(XmasBasicAddress.ALL,r);
68      outbox_.cancel(XmasBasicAddress.ALL,r);
69      data_.remove(r);
70  
71      sendBasicMessage(XmasBasicAddress.ALL,"cancel","task",null,r);
72    }
73    todo_.clear();
74  
75    e=runn_.keys();
76    while(e.hasMoreElements())
77    {
78      Object r=e.nextElement();
79      inbox_ .cancel(XmasBasicAddress.ALL,r);
80      outbox_.cancel(XmasBasicAddress.ALL,r);
81      data_.remove(r);
82      sendBasicMessage(XmasBasicAddress.ALL,"cancel","task",null,r);
83    }
84    runn_.clear();
85  
86    e=done_.keys();
87    while(e.hasMoreElements())
88    {
89      Object r=e.nextElement();
90      inbox_ .cancel(XmasBasicAddress.ALL,r);
91      outbox_.cancel(XmasBasicAddress.ALL,r);
92      data_.remove(r);
93      sendBasicMessage(XmasBasicAddress.ALL,"cancel","task",null,r);
94    }
95    done_.clear();
96  
97    data_.remove(_ref);
98    results_.clear();
99    from_=null;
100   task_=null;
101       }
102     }
103     else
104     if("announce".equals(_act)&&"factorial".equals(_skill))
105     {
106       int price=3*(task_!=null ? 1 : 0)+messages_.size();
107       sendBasicMessage(_from,"bid","factorial",""+price,_ref);
108     }
109     else
110     if("contract".equals(_act)&&"factorial".equals(_skill))
111     {
112       sendBasicMessage(_from,"accept","factorial","",_ref);
113     }
114     else
115     if("request".equals(_act)&&"factorial".equals(_skill))
116     {
117       if(task_!=null)
118       {
119   System.err.println("%%% PUSH factorial "+_content);
120   messages_.push(new XmasBasicMessage
121            (_from,XmasBasicAddress.NONE,_act,_skill,_content,_ref));
122   return;
123       }
124 
125       System.err.println("%%% HANDLE factorial "+_content);
126 
127       int param=Integer.parseInt((String)_content);
128 
129       //if(_ref==null) _ref=""+param+"!";
130       task_=_ref;
131       from_=_from;
132       todo_.clear();
133       runn_.clear();
134       done_.clear();
135       results_.clear();
136 
137       for(int i=param;i>1;i-=2)
138       {
139   String ref=XmasBasicLib.generateReference();
140   System.err.println("<== "+(i-1)+"*"+i+" {"+ref+"}");
141   todo_.put(ref,Boolean.FALSE);
142   data_.put(ref,""+(i-1)+" "+i);
143   sendBasicMessage
144     (XmasBasicAddress.ALL,"announce","multiplication",""+(i-1)+" "+i,ref);
145       }
146     }
147     else if("bid".equals(_act)&&"multiplication".equals(_skill))
148     {
149       //System.err.println("--> bid multiplication "+data_.get(_ref));
150 
151       if(_ref           ==null) return;
152       if(task_          ==null) return;
153 
154       if(runn_.get(_ref)!=null)
155       {
156   sendBasicMessage
157     (_from,"cancel","multiplication",null,_ref);
158   return;
159       }
160 
161       if(todo_.get(_ref)==null) return;
162 
163       todo_.remove(_ref);
164       runn_.put(_ref,Boolean.FALSE);
165 
166       //System.err.println("<-- contract multiplication "+data_.get(_ref));
167       sendBasicMessage
168   (_from,"contract","multiplication",data_.get(_ref),_ref);
169     }
170     else if("accept".equals(_act)&&"multiplication".equals(_skill))
171     {
172       //System.err.println("--> accept multiplication "+data_.get(_ref));
173 
174       if(_ref           ==null) return;
175       if(task_          ==null) return;
176 
177       if(done_.get(_ref)!=null)
178       {
179   sendBasicMessage
180     (_from,"cancel","multiplication",null,_ref);
181   return;
182       }
183 
184       if(runn_.get(_ref)==null) return;
185 
186       //System.err.println("<-- request multiplication "+data_.get(_ref));
187       sendBasicMessage
188   (_from,"request","multiplication",data_.get(_ref),_ref);
189     }
190     else if("answer".equals(_act)&&"multiplication".equals(_skill))
191     {
192       if(_ref           ==null) return;
193       if(task_          ==null) return;
194       if(runn_.get(_ref)==null) return;
195 
196       sendBasicMessage(XmasBasicAddress.ALL,"cancel","task",null,_ref);
197 
198       if(done_.get(_ref)!=null) return;
199 
200       Integer tmp=new Integer((String)_content);
201 
202       runn_.remove(_ref);
203       done_.put(_ref,tmp);
204       results_.push(tmp);
205 
206       System.err.println("TODO:"+todo_.size()+" RUNN:"+runn_.size()+
207        " DONE:"+done_.size()+" TMP="+tmp);
208 
209       if(results_.size()>=2)
210       {
211   Integer a=(Integer)results_.pop();
212   Integer b=(Integer)results_.pop();
213   String ref=XmasBasicLib.generateReference();
214   System.err.println("<== "+a+"*"+b+" {"+ref+"}");
215 
216   todo_.put(ref,Boolean.FALSE);
217   data_.put(ref,""+a+" "+b);
218   sendBasicMessage(XmasBasicAddress.ALL,"announce","multiplication",""+a+" "+b,ref);
219   XmasBasicLib.sleep();
220       }
221 
222       if((todo_.size()==0)&&(runn_.size()==0)&&(results_.size()==1))
223       {
224   Integer r=(Integer)results_.pop();
225   System.err.println("RESULT="+r+" "+from_.toText());
226   sendBasicMessage(from_,"answer","factorial",""+r,task_);
227   todo_.clear();
228   runn_.clear();
229   done_.clear();
230   data_.clear();
231   results_.clear();
232   from_=null;
233   task_=null;
234   XmasBasicLib.sleep();
235 
236   if(!messages_.isEmpty())
237   {
238     XmasBasicMessage m=(XmasBasicMessage)messages_.pop();
239     System.err.println("%%% POP  factorial "+m.content());
240     handle((XmasBasicAddress)m.from(),m.act(),m.skill(),m.content(),m.reference());
241   }
242       }
243     }
244     //else System.err.println("%%% "+_act+" "+_skill);
245   }
246 
247   public String toString() { return "TestFactorial"; }
248 }