From 67fe09c7f18ef33db89495ede920f324f341a8a5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Miqu=C3=A9e?= Date: Wed, 13 Jan 2010 11:20:04 +0100 Subject: [PATCH] =?utf8?q?Cr=C3=A9ation=20du=20d=C3=A9p=C3=B4t=20AIL-PA?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- AIL.jar | Bin 0 -> 16781 bytes .../AILObject$ServerSock$ServClientSock.class | Bin 0 -> 2631 bytes bin/and/AIL/AILObject$ServerSock.class | Bin 0 -> 2323 bytes bin/and/AIL/AILObject.class | Bin 0 -> 13397 bytes bin/and/AIL/Convergence.class | Bin 0 -> 2650 bytes bin/and/AIL/Message.class | Bin 0 -> 654 bytes bin/and/AIL/MessageBool.class | Bin 0 -> 793 bytes bin/and/AIL/MessageDouble.class | Bin 0 -> 798 bytes bin/and/AIL/MessageInt.class | Bin 0 -> 782 bytes bin/and/AIL/MessageList.class | Bin 0 -> 1747 bytes bin/and/AIL/MessageTabBool.class | Bin 0 -> 812 bytes bin/and/AIL/MessageTabDouble.class | Bin 0 -> 817 bytes bin/and/AIL/MessageTabInt.class | Bin 0 -> 805 bytes src/and/AIL/AILObject.java | 1162 +++++++++++++++++ src/and/AIL/Convergence.java | 190 +++ src/and/AIL/Message.java | 39 + src/and/AIL/MessageBool.java | 57 + src/and/AIL/MessageDouble.java | 57 + src/and/AIL/MessageInt.java | 57 + src/and/AIL/MessageList.java | 112 ++ src/and/AIL/MessageTabBool.java | 57 + src/and/AIL/MessageTabDouble.java | 57 + src/and/AIL/MessageTabInt.java | 57 + 23 files changed, 1845 insertions(+) create mode 100644 AIL.jar create mode 100644 bin/and/AIL/AILObject$ServerSock$ServClientSock.class create mode 100644 bin/and/AIL/AILObject$ServerSock.class create mode 100644 bin/and/AIL/AILObject.class create mode 100644 bin/and/AIL/Convergence.class create mode 100644 bin/and/AIL/Message.class create mode 100644 bin/and/AIL/MessageBool.class create mode 100644 bin/and/AIL/MessageDouble.class create mode 100644 bin/and/AIL/MessageInt.class create mode 100644 bin/and/AIL/MessageList.class create mode 100644 bin/and/AIL/MessageTabBool.class create mode 100644 bin/and/AIL/MessageTabDouble.class create mode 100644 bin/and/AIL/MessageTabInt.class create mode 100644 src/and/AIL/AILObject.java create mode 100644 src/and/AIL/Convergence.java create mode 100644 src/and/AIL/Message.java create mode 100644 src/and/AIL/MessageBool.java create mode 100644 src/and/AIL/MessageDouble.java create mode 100644 src/and/AIL/MessageInt.java create mode 100644 src/and/AIL/MessageList.java create mode 100644 src/and/AIL/MessageTabBool.java create mode 100644 src/and/AIL/MessageTabDouble.java create mode 100644 src/and/AIL/MessageTabInt.java diff --git a/AIL.jar b/AIL.jar new file mode 100644 index 0000000000000000000000000000000000000000..6d85d5383c2a65ace0a2b69f9674748784840e29 GIT binary patch literal 16781 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 literal 0 HcmV?d00001 diff --git a/bin/and/AIL/AILObject.class b/bin/and/AIL/AILObject.class new file mode 100644 index 0000000000000000000000000000000000000000..9d07c788faf5226e1f061a24991dbc941e3497d1 GIT binary patch literal 13397 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 O^afq{*V~2H6Zn6q_*>Ed literal 0 HcmV?d00001 diff --git a/bin/and/AIL/Convergence.class b/bin/and/AIL/Convergence.class new file mode 100644 index 0000000000000000000000000000000000000000..fbc17aba45f9174ef36df646df4c90c17e21c2fc GIT binary patch literal 2650 zcmb7G-ES0C6#w0s>2A9nKDwoVYzwp%y1SHaEv0_6U1&kDuzbjt1x##@O z@0{IV|GE1UfG(U1LldaC+_BWaP$spfF=v;joRWKdXs>`cAh3c?r##E`a#nHLuHv=wPY6_b zCC@4fXs1U6Lhfjum&>OtpFGPcN}qxchQA?brCCz~$xNwSNR?DPZ`h-$$#Ticd(MoV z%9qM^s!%RXPp0l9qen=aGYuBSfOmwAW?QSmeHP1Box(QyUBmgm{7M~`(A z)}0;@Lz_x=ol^jXJ4qGht$d z)V7;giB(cdnTVoZYR{Qi?`u0uZ17L)H1UkDJ#S(S8VI>N$}%{tW7f0suOG4|gK(-R ztZ{|1z}k2vrbWCGxd_tO9mXz!)+bfWnsib}2b3EV0~i#jF4$h+HXY9_=U;E)scT3` zstS??evBwLy;=k0xtYS<+N>X1mInY7UPsX~N|2&0;M4ZBt2vnIKu zbTUavvP?q@4(xo;Q(47 zdlU+uQ+Lp9j9rsFqc)58|2I+!*fyT-X)vCE)G~yBdr0lMrv*5z`rIYJlVo|B-wYlB zo!`kt4rkaTO40kZ~||0_X^(O{|9&%U*oC*H;oX1oUed8UjcVM0JjC>0k~T# z;107x7GaK}=04&+#PzNBuv&|;JSQr%<0cCudEV=H_2c@RK*fo+-WN19c^f1D`eJh9 zKMmc&W&u9r!25__fY+Gx$1Le}4w;*5H>4-3rf&b9IVqiB6m0sXSG52GKds9&$OZ6~@e9T>< z*bK!;_+t?=Xz}Yabt;}qU&a?iIXrR*?FC~|MjlNAHPmTVOZwt&`ZN^bVCLPhf)V!| zPV>+#b5M&PWyDaoQmdVjgDc{JvL}ar2@Kl?3{)6O^utc3QRtq5C57sWPNONTW1ysrk+_y>cVm9F6LlJ`O|(3{1!&lWjs?m~v~&(-Ldb`5O?6HpbxR^$5OrcUs4^)s ziiP7ZEPqgv!wP+i3Al(=%8eNTYgng>VS}vF;!kY7r^KyH@lK|AH!bdDid&iDc3Rxc K6z?bVb^ig!L15Yd literal 0 HcmV?d00001 diff --git a/bin/and/AIL/MessageBool.class b/bin/and/AIL/MessageBool.class new file mode 100644 index 0000000000000000000000000000000000000000..1f805b6c39394a5bcd33b0489a90637e7afa3741 GIT binary patch literal 793 zcmZ`#O>fgc5PfSqH4QEaEdlBzG$njEE)WTc69@^4kcQp@+0*!*3RpHUGl*Pc`QlHM&87Nj|$e9xhA_n zg!24%i184NmzeeW3ci)_8){!n>t#kg2sE(C=q(zsg)7YTaD!0~pODny+tkBh^K6c* zVT;iZ+jF!-caEJErB6~|hXWlt*+m^UNz|p!TSg{aP%ULh%6ivGH`&ppl*Vpz2iusq zvow*gqBr)92}^s>PW-U-KMw(wdRRw@8uqx4hYm(|wH)@jwHo9i}Tl1wcKeo_Qk5hB$u(|#@4dZ>|_NRlf44u6OU z7Qqkx0DqKtKPScE&_JG?=k>nMlb^r7{{V0w2Mt&X-6We1p2VZUb6u9nOb_$L@mx3H zD74R{6gs6Y(qul?MVaQ=t9YoOo++#!=2=-KSv5}P3+-~cJc`LFUly%BO0%?jtY8P> zSiw2Wr@93j9S$vD-=cLcB}sldk!OjxU6 zO>zY{kogMDnXYP8b0=Q0b(AlP6a6$b^nWe$-kaoo!r?6CS}gc*u|}_9ymO2YfoF#? zu7mahy#c?9UpM-O_7_unkyaXkE;eYrx&W7OnVvLvX{GrCrQ|>Kq&ez+TH;EyMe9f5 z65Elx#LnqRpF@Ei>i0>qiw^cUXrG)nj7-D~N3CS!w8yMq^jNV^emULb9c%+}YXvc< zFP*-Du!KQK{3!SzL%{kFO+;wpfS0<1P24pMeX~3N4}-AP48BpesCgT~N_jx0dUs#3 S{h0_BPIvd@S+Pd8j-8Oy{1g{i9R)k3PX0^9vb~|(0rg+IU_CBA1`EG!zx%$zglyzevT*Y6)c0X#rhfupdglX3rPH0ZxHd9EiWN{R|R zh5DtuLL)a>tfxbh<#C$4iJmE_7YgeqX_6N@DTaDFGbKvPr+69jj}*#}<0LMgD7f9; zP{BJ%$EFGw4Ie(%=`@HF^J@0)%w(_i+0>9}ke<^>(~j{n=@l1ouCP701V-RTH0efB z)Ellr;ku6-*kvj=$=GCsIF)qMM@!Ofp(hgG^if4kP8}cna^n@B-qYP3#bX8|)+son zRG~z1K`&2CK|A{rKCF70&a!j!JQn8qYJT_M>JOTdtm7mc1Sp}*sA8il%+Q!;k2y|& z>s3a5?uvUU{EqrpTe`tj8i5^ba`hJl*upj=Y2M)~%^xZ1ac@d<*!(=lwXnrC2-|bC zLwAn7m1ICsV2=$QlI){_0}36I^T^tS3#p|IMR{Md)=gH`XeGHLo?HuYYY8#sjl4Lp z5RNbiNf5UF$Izuy4{Hcf#~nWEE_QLxGISP7e;ESnETa%gVNke@NYa?Jngl3Ho20a9v4ABsifyrJLtC2;j5;GOVJB=236pF( z>UD4Y4PIz_!wna8Mqoxq$LszG|A4>1i;C~r#K?pUGfTejJLkO5dB3y!>YrbJ2QY(@ z2~8p5)HbtAg<^KaZ8n{XTlAW~2}2?D#Chsut4^(weX#MwE&B?(?`$ZYStxyspnbzR6IbbQ&mAe4>$SQV$Lm=49b)J^Qr>bl zH#<`k6g{J9NXJZjJSf}Z-=!I0_BuXDT$^5{^hgf1JwMDc~ z;%9=n?GiA2f{5m?`%-7w#>WC>G`(**Ur7{f+!cp(Qkp3Kca_0_-2S@k?)YB4#^ZI5 zx{B0FTs$V<4dO&wrFyGTc9%Vw&(N_q>$1!T&hfrJ7!jP60-1{ki0&hv z$^4A?Z%FQAT)(l42$$oDUy=Ou5a&wIG?kF^=SP2upbiln3pf)jHb$`toM9&kyn{6V zU&B-YG0_(4Ku{8sj8J@e;&?Yeo?@jiv?HeKCX|U7u}4|rJT7#2zhe=DVX64{n2HO> z3nVk~#354or1k^C!Wy4R9$@+pTzRQpb`fLj9~?THAGipi&SH*r7Xq|QyJiY zs6&gz%}9_VpBsVHq0SR)mL=LY?sH4Z=ZJN^gLQTK0Q31wJV~}WBWjQ?a56p(An&7q_*z@8OPuQx=kO73k~mEBZ;@SRzFdOE z9)+FVyyiHozk|N`W$3i~ zRMbd5Kl)SKW0?@IDTRBKl$n^s5T9RA=1Z>26nA-A;m2qT)7+ayHE1Q@mhHAOj}_*K u`STs~EnLEV?&%!aR4^+Bt7x?2A#ISRMqs=~NU1dw_jHZPpKw#dqkjQ}u0VAF literal 0 HcmV?d00001 diff --git a/bin/and/AIL/MessageTabBool.class b/bin/and/AIL/MessageTabBool.class new file mode 100644 index 0000000000000000000000000000000000000000..f5db345f045bccfcf0e67558bc1cf1d197dc2c3b GIT binary patch literal 812 zcmZ{g-EPxB5QWd$PSXaLgqD`pX=zIMvE7zPNL+!Cpa{t*aMO~D_9EIgt6&stWIG_9 zgBJmb2#E_GfQLeyU0Xy{;EP?)?94ge%+Fune*n0Ly*ey`b(xHMkE4F?h01d|R>$(} zNt#aTa0Hqc-UM2?%3?Vgs4S1u8I!PlXPWVC7t4RoC|F9 zFYs0D59sSh(dkJrSc1Sc7aQ25d9IR?%1C^q(`^@9I&BwntmEr08n~qYIxcqgi&K1j zM+AEqkJuD3F=Q=A8KzY8je$U8tcuE*6@H-SY#gQ2>|8yI^$4qfZ}#pR`Cih1!rYMs z4>c?>s+(w$8Dj9?VUA1Td6`jf@N~-ptl}yo-Mq$AH-Dh0 z!@I4U!}g~c*268HUU)FWcDOjh&Ro)?D6qqZ4oP;=!VL;_$$8V*gr!tvLs7nWjdhz9 zU0UhfEzV#Yh}#v!gfDtx&p=q3L6dml{{I+!It5rlh$i+p)IK(GU>G{3(jNxRRx)_T d*`nti_?7c~cVDsnnFto9Cg#_ zC{`6X0=2cQKs{GkB;$d~@+eK-^tuA#g}~-nn&gE{ih+!$szd?(2?3{&qp^T>!NT&B zD2a-v0=6Fvm^w?xstOx*7cMrb){hePYWjYpGGfF^V7s4QQcO~k{vzlUZ=+nm>#xBr z(H{#`{9f;(8w@reaLdIGb}65$WUMj*pX+eb#hwn^g`8;rwu>sR>c5tYL!EJo&mRb3 z4~b@&RtrSJ!8-%RNit!@Mw*rs*o1-OnI^mKEBRyTj*P={|* zH;2tHGu#aKXua@shW)TS!@+8#$DzOh8(JheL>+fHs7=lzBNNU?Eo3;9`L>a6vZ75X z9lOgNYy)v`0TDB!H}(vKr5QAd7oPl&!KYGy4TPxSm`j~t7pI1yHJ`L(&}?%C&nR2e bybph&yt>_Y?0+SKh1KmI{quH#sS5uB+HrTq literal 0 HcmV?d00001 diff --git a/bin/and/AIL/MessageTabInt.class b/bin/and/AIL/MessageTabInt.class new file mode 100644 index 0000000000000000000000000000000000000000..9f32ed0970c673bd4d1dbece1a2ae4475da7a8a0 GIT binary patch literal 805 zcmZ{g!EVz)5QhJ?orVOLq=f)=TAGpqw%Za3i4zD36(Jb~E^Tw^A=)&nU=(a*J0PBe z7XgU~i9;Wt4~6)59T8E154)b(ng9Q0E`I$y2k;1cRagQonT&hSqkiwT%5ynU$8r=U zMHP-f4Rpg^N|X_2WdnnY|yWj0{sHu-;G4XeMdNc#(99w{b3TtA7cu z%EfJL&^uSjSY@O=(&@H~O`Wz2InnVQ7j<0Ke;pS)`o$?ee;|Q9 zjK^#uy)$GjCmE(x^NoQ(ZK8_Omj!;Hr>q~Pv+PX0jLiUl?eyV0`B74yvfPdZ4;8F1 zs+#BuGlby3!yGrl^BSWbZ^63~{y^iKDP7~K8-W(qdAel*uHyzH-Q41-n?F(1;oa8F zVf)J*H^WVyUU)FaR_M&Jy_EDQ3T(5XLy{ddahF0}a_$)N|9=cVodVPlqJcdQwT}%P7=})%^oK#Sl? group ; + private ServerSock servsock = null ; + private short cdirectory ; + protected String tab_url[] ; + protected short tab_port[] ; + protected String url = "" ; + protected short port = -1 ; + private short init = 0 ; + + + /** + * Empty constructor for the Stub generation. + */ + public AILObject() {} + + + /** + * Set the communication mode of the library\n + * - 0 : RMI protocole\n + * - 1 : Socket protocole\n + * @param _mode : communication mode + */ + public void setMode( int _mode ) + { + if( init != 1 ) + { + AILinit( ) ; + } + + if( _mode == 1 && mode != 1 ) + { + Node n = null ; + try { + n = PAActiveObject.getNode() ; + } catch( NodeException e1 ) { + e1.printStackTrace() ; + } + + url = n.getNodeInformation().getURL().split("/")[2].split(":")[0] ; + + servsock = new ServerSock( ) ; + + createDirectory() ; + + } + + if( _mode == 0 && mode == 1) + { + servsock.halt() ; + } + + mode = (short) _mode ; + } + + protected void setUrl( String _url ) + { + url = _url ; + } + + public String getUrl( ) + { + return url ; + } + + protected void setPort( short _port ) + { + port = _port ; + } + + public int getPort() + { + return port ; + } + + + /** + * Return the communication mode of the library + * @return the communication mode + */ + public int getMode() + { + return mode ; + } + + /** + * Print the url on which this active object is. + */ + public void echoUrl() + { + Body body ; + body = PAActiveObject.getBodyOnThis() ; + int rank = PASPMD.getMyRank() ; + + System.out.println("I am AILObject " + rank + " on node " + body.getNodeURL() ) ; + } + + private void createDirectory() + { + if( cdirectory == 0 ) + { + PASPMD.totalBarrier( "Directory Creation" ) ; + + int i = 0 ; + for( i = 0 ; i < groupsize ; i++ ) + { + if( i != myId ) + { + tab_url[i] = group.get(i).getUrl() ; + tab_port[i] = (short) group.get(i).getPort() ; + } else { + tab_url[i] = this.url ; + tab_port[i] = this.port ; + } + } + + cdirectory = 1 ; + } + } + + public void AILend() + { + if( mode == 1 ) + { + servsock.halt() ; + } + } + + + /** + * Initialization of the object AILObject. + */ + public void AILinit( ) + { + if( init != 1 ) + { + PASPMD.totalBarrier( "Init" ) ; + + lockint = new Object() ; + locktint = new Object() ; + lockdouble = new Object() ; + locktdouble = new Object() ; + lockbool = new Object() ; + locktbool = new Object() ; + + group = PAGroup.getGroup( (AILObject) PASPMD.getSPMDGroup() ) ; + myId = PASPMD.getMyRank() ; + groupsize = PASPMD.getMySPMDGroupSize() ; + + ml = new MessageList( groupsize + 1 ) ; + + tab_url = new String[groupsize] ; + tab_port = new short[groupsize] ; + + + /** Parallelization of methods, to non block the Object **/ + PAActiveObject.setImmediateService( "getUrl", new Class[]{}) ; + PAActiveObject.setImmediateService( "getPort", new Class[]{}) ; + + PAActiveObject.setImmediateService( "getIntBl", new Class[]{int.class, int.class}) ; + PAActiveObject.setImmediateService( "getTabIntBl", new Class[]{int.class, int.class}) ; + PAActiveObject.setImmediateService( "getDoubleBl", new Class[]{int.class, int.class}) ; + PAActiveObject.setImmediateService( "getTabDoubleBl", new Class[]{int.class, int.class}) ; + PAActiveObject.setImmediateService( "getBoolBl", new Class[]{int.class, int.class}) ; + PAActiveObject.setImmediateService( "getTabBoolBl", new Class[]{int.class, int.class}) ; + + PAActiveObject.setImmediateService( "recvObject", new Class[]{int.class, int.class, int.class}) ; + PAActiveObject.setImmediateService( "recvObject", new Class[]{int.class, int[].class, int.class}) ; + PAActiveObject.setImmediateService( "recvObject", new Class[]{int.class, double.class, int.class}) ; + PAActiveObject.setImmediateService( "recvObject", new Class[]{int.class, double[].class, int.class}) ; + PAActiveObject.setImmediateService( "recvObject", new Class[]{int.class, boolean.class, int.class}) ; + PAActiveObject.setImmediateService( "recvObject", new Class[]{int.class, boolean[].class, int.class}) ; + + init = 1 ; + } + } + + /*********************/ + /** Sending Objects **/ + /*********************/ + + /** + * Send an Integer _o from the id id_src with the tag _tag. + * Puts a new Message, composed of the Integer _o and the tag _tag + * in the MessageList of this object. + * @param _int : the Integer to send. + * @param idDst : the id of the sender. + * @param _tag : the tag of the Message. + */ + protected void sendObject( int _idDst, int _int, int _tag ) + { + if( _idDst >= 0 && _idDst < groupsize + 1 ) + { + if( mode == 0 ) // RMI + { + ((AILObject)group.get( _idDst )).recvObject( myId, _int, _tag ) ; + } + + if( mode == 1 ) // Socket + { + try { + Socket soc = new Socket() ; + + soc = new Socket( tab_url[_idDst], tab_port[_idDst] ) ; + + soc.setReuseAddress( true ) ; + soc.setSendBufferSize( 2048 * 2048 ) ; + soc.setSoLinger( false, 1 ) ; + soc.setTcpNoDelay( false ) ; + + BufferedOutputStream out = new BufferedOutputStream( soc.getOutputStream() ); + + ObjectOutputStream output = new ObjectOutputStream( out ) ; + + output.writeObject( new MessageInt( myId, _tag, _int ) ) ; + + output.close() ; + out.close() ; + soc.close() ; + + } catch( Exception e ) { + e.printStackTrace() ; + } + + } + } + } + + /** + * Reception of an Integer with the RMI method + * @param _idSrc : id of the sender + * @param _int : the Integer to receive + * @param _tag : the tag of the message + */ + public void recvObject( int _idSrc, int _int, int _tag ) + { + if( _idSrc >= 0 && _idSrc < groupsize + 1 ) + { + ml.addMessage( _idSrc, new MessageInt( _tag, _int ) ) ; + + synchronized( lockint ) + { + lockint.notifyAll(); + } + } + } + + + /** + * Send a tabular of Integers _tint to the id idDst with the tag _tag. + * Puts a new Message, composed of the tabular of Integers _tint and the tag _tag + * in the MessageList of this object. + * @param _tint : the tabular of Integers to send. + * @param idDst : the id of the receiver. + * @param _tag : the tag of the Message. + */ + protected void sendObject( int _idDst, int[] _tint, int _tag ) + { + if( _idDst >= 0 && _idDst < groupsize + 1 ) + { + if( mode == 0 ) // RMI + { + ((AILObject)group.get( _idDst )).recvObject( myId, _tint, _tag ) ; + } + + if( mode == 1 ) // Socket + { + try { + Socket soc = new Socket() ; + + soc = new Socket( tab_url[_idDst], tab_port[_idDst] ) ; + + soc.setReuseAddress( true ) ; + soc.setSendBufferSize( 2048 * 2048 ) ; + soc.setSoLinger( false, 1 ) ; + soc.setTcpNoDelay( false ) ; + + BufferedOutputStream out = new BufferedOutputStream( soc.getOutputStream() ); + + ObjectOutputStream output = new ObjectOutputStream( out ) ; + + output.writeObject( new MessageTabInt( myId, _tag, _tint ) ) ; + + output.close() ; + out.close() ; + soc.close() ; + + } catch( Exception e ) { + e.printStackTrace() ; + } + + } + } + } + + /** + * Reception of a tabular of Integers with the RMI method + * @param _idSrc : id of the sender + * @param _tint : the tabular of Integers to receive + * @param _tag : the tag of the message + */ + public void recvObject( int _idSrc, int[] _tint, int _tag ) + { + if( _idSrc >= 0 && _idSrc < groupsize + 1 ) + { + ml.addMessage( _idSrc, new MessageTabInt( _tag, _tint ) ) ; + + synchronized( locktint ) + { + locktint.notifyAll(); + } + } + } + + + /** + * Send a Double _double to the id idDst with the tag _tag. + * Puts a new Message, composed of the Double _double and the tag _tag + * in the MessageList of this object. + * @param _double : the Double to send. + * @param idDst : the id of the sender. + * @param _tag : the tag of the Message. + */ + protected void sendObject( int _idDst, double _double, int _tag ) + { + if( _idDst >= 0 && _idDst < groupsize + 1 ) + { + if( mode == 0 ) // RMI + { + ((AILObject)group.get( _idDst )).recvObject( myId, _double, _tag ) ; + } + + if( mode == 1 ) // Socket + { + try { + Socket soc = new Socket() ; + + soc = new Socket( tab_url[_idDst], tab_port[_idDst] ) ; + + soc.setReuseAddress( true ) ; + soc.setSendBufferSize( 2048 * 2048 ) ; + soc.setSoLinger( false, 1 ) ; + soc.setTcpNoDelay( false ) ; + + BufferedOutputStream out = new BufferedOutputStream( soc.getOutputStream() ); + + ObjectOutputStream output = new ObjectOutputStream( out ) ; + + output.writeObject( new MessageDouble( myId, _tag, _double ) ) ; + + output.close() ; + out.close() ; + soc.close() ; + + } catch( Exception e ) { + e.printStackTrace() ; + } + + } + } + } + + /** + * Reception of a Double with the RMI method + * @param _idSrc : id of the sender + * @param _double : the double to receive + * @param _tag : the tag of the message + */ + public void recvObject( int _idSrc, double _double, int _tag ) + { + if( _idSrc >= 0 && _idSrc < groupsize + 1 ) + { + ml.addMessage( _idSrc, new MessageDouble( _tag, _double ) ) ; + + synchronized( lockdouble ) + { + lockdouble.notifyAll(); + } + } + } + + /** + * Send a tabular of Doubles _tint to the id idDst with the tag _tag. + * Puts a new Message, composed of the tabular of Doubles _tint and the tag _tag + * in the MessageList of this object. + * @param _tdouble : the tabular of Doubles to send. + * @param idDst : the id of the receiver. + * @param _tag : the tag of the Message. + */ + protected void sendObject( int _idDst, double[] _tdouble, int _tag ) + { + if( _idDst >= 0 && _idDst < groupsize + 1 ) + { + if( mode == 0 ) // RMI + { + ((AILObject)group.get( _idDst )).recvObject( myId, _tdouble, _tag ) ; + } + + if( mode == 1 ) // Socket + { + try { + Socket soc = new Socket() ; + + soc = new Socket( tab_url[_idDst], tab_port[_idDst] ) ; + + soc.setReuseAddress( true ) ; + soc.setSendBufferSize( 2048 * 2048 ) ; + soc.setSoLinger( false, 1 ) ; + soc.setTcpNoDelay( false ) ; + + BufferedOutputStream out = new BufferedOutputStream( soc.getOutputStream() ); + + ObjectOutputStream output = new ObjectOutputStream( out ) ; + + output.writeObject( new MessageTabDouble( myId, _tag, _tdouble ) ) ; + + output.close() ; + out.close() ; + soc.close() ; + + } catch( Exception e ) { + e.printStackTrace() ; + } + + } + } + } + + /** + * Reception of a tabular of Doubles with the RMI method + * @param _idSrc : id of the sender + * @param _tdouble : the tabular of Doubles to receive + * @param _tag : the tag of the message + */ + public void recvObject( int _idSrc, double[] _tdouble, int _tag ) + { + if( _idSrc >= 0 && _idSrc < groupsize + 1 ) + { + ml.addMessage( _idSrc, new MessageTabDouble( _tag, _tdouble ) ) ; + + synchronized( locktdouble ) + { + locktdouble.notifyAll(); + } + } + } + + + /** + * Send a Boolean _bool to the id id_src with the tag _tag. + * Puts a new Message, composed of the Boolean _bool and the tag _tag + * in the MessageList of this object. + * @param _bool : the Boolean to send. + * @param idDst : the id of the receiver. + * @param _tag : the tag of the Message. + */ + protected void sendObject( int _idDst, boolean _bool, int _tag ) + { + if( _idDst >= 0 && _idDst < groupsize + 1 ) + { + if( mode == 0 ) // RMI + { + ((AILObject)group.get( _idDst )).recvObject( myId, _bool, _tag ) ; + } + + if( mode == 1 ) // Socket + { + try { + Socket soc = new Socket() ; + + soc = new Socket( tab_url[_idDst], tab_port[_idDst] ) ; + + soc.setReuseAddress( true ) ; + soc.setSendBufferSize( 2048 * 2048 ) ; + soc.setSoLinger( false, 1 ) ; + soc.setTcpNoDelay( false ) ; + + BufferedOutputStream out = new BufferedOutputStream( soc.getOutputStream() ); + + ObjectOutputStream output = new ObjectOutputStream( out ) ; + + output.writeObject( new MessageBool( myId, _tag, _bool ) ) ; + + output.close() ; + out.close() ; + soc.close() ; + + } catch( Exception e ) { + e.printStackTrace() ; + } + + } + } + } + + /** + * Reception of a Boolean with the RMI method + * @param _idSrc : id of the sender + * @param _bool : the boolean to receive + * @param _tag : the tag of the message + */ + public void recvObject( int _idSrc, boolean _bool, int _tag ) + { + if( _idSrc >= 0 && _idSrc < groupsize + 1 ) + { + ml.addMessage( _idSrc, new MessageBool( _tag, _bool ) ) ; + + synchronized( lockbool ) + { + lockbool.notifyAll(); + } + } + } + + /** + * Send a tabular of Booleans _tint to the id idDst with the tag _tag. + * Puts a new Message, composed of the tabular of Booleans _tint and the tag _tag + * in the MessageList of this object. + * @param _tbool : the tabular of Booleans to send. + * @param idDst : the id of the receiver. + * @param _tag : the tag of the Message. + */ + protected void sendObject( int _idDst, boolean[] _tbool, int _tag ) + { + if( _idDst >= 0 && _idDst < groupsize + 1 ) + { + if( mode == 0 ) // RMI + { + ((AILObject)group.get( _idDst )).recvObject( myId, _tbool, _tag ) ; + } + + if( mode == 1 ) // Socket + { + try { + Socket soc = new Socket() ; + + soc = new Socket( tab_url[_idDst], tab_port[_idDst] ) ; + + soc.setReuseAddress( true ) ; + soc.setSendBufferSize( 2048 * 2048 ) ; + soc.setSoLinger( false, 1 ) ; + soc.setTcpNoDelay( false ) ; + + BufferedOutputStream out = new BufferedOutputStream( soc.getOutputStream() ); + + ObjectOutputStream output = new ObjectOutputStream( out ) ; + + output.writeObject( new MessageTabBool( myId, _tag, _tbool ) ) ; + + output.close() ; + out.close() ; + soc.close() ; + + } catch( Exception e ) { + e.printStackTrace() ; + } + + } + } + } + + /** + * Reception of a tabular of Booleans with the RMI method + * @param _idSrc : id of the sender + * @param _tdouble : the tabular of Booleans to receive + * @param _tag : the tag of the message + */ + public void recvObject( int _idSrc, boolean[] _tbool, int _tag ) + { + if( _idSrc >= 0 && _idSrc < groupsize + 1 ) + { + ml.addMessage( _idSrc, new MessageTabBool( _tag, _tbool ) ) ; + + synchronized( locktbool ) + { + locktbool.notifyAll(); + } + } + } + + + /*******************************************/ + /** Getting Objects - Non waiting methods **/ + /*******************************************/ + + /** + * Returns the Integer from the id id_src, with the tag _tag. + * Search in the MessageList if there is corresponding Message. + * @param id_src : index of the sender. + * @param _tag : tag of the Message. + * @return : the Integer. + */ + public int getInt( int id_src, int _tag ) + { + if( id_src >= 0 && id_src < groupsize + 1 ) + { + MessageInt mes = (MessageInt) ml.searchMsg( id_src, _tag ) ; + + if( mes != null ) + { + return mes.getInt() ; + } + } + + return 0 ; + } + + /** + * Returns the tabular of Integers from the id id_src, with the tag _tag. + * Search in the MessageList if there is corresponding Message. + * @param id_src : index of the sender. + * @param _tag : tag of the Message. + * @return : the tabular of Integers. + */ + public int[] getTabInt( int id_src, int _tag ) + { + if( id_src >= 0 && id_src < groupsize + 1 ) + { + MessageTabInt mes = (MessageTabInt) ml.searchMsg( id_src, _tag ) ; + + if( mes != null ) + { + return mes.getTabInt() ; + } + } + + return null ; + } + + /** + * Returns the Double from the id id_src, with the tag _tag. + * Search in the MessageList if there is corresponding Message. + * @param id_src : index of the sender. + * @param _tag : tag of the Message. + * @return : the Double. + */ + public double getDouble( int id_src, int _tag ) + { + if( id_src >= 0 && id_src < groupsize + 1 ) + { + MessageDouble mes = (MessageDouble) ml.searchMsg( id_src, _tag ) ; + + if( mes != null ) + { + return mes.getDouble() ; + } + } + + return 0 ; + } + + /** + * Returns the tabular of Doubles from the id id_src, with the tag _tag. + * Search in the MessageList if there is corresponding Message. + * @param id_src : index of the sender. + * @param _tag : tag of the Message. + * @return : the tabular of Doubles. + */ + public double[] getTabDouble( int id_src, int _tag ) + { + if( id_src >= 0 && id_src < groupsize + 1 ) + { + MessageTabDouble mes = (MessageTabDouble) ml.searchMsg( id_src, _tag ) ; + + if( mes != null ) + { + return mes.getTabDouble() ; + } + } + + return null ; + } + + /** + * Returns the Boolean from the id id_src, with the tag _tag. + * Search in the MessageList if there is corresponding Message. + * @param id_src : index of the sender. + * @param _tag : tag of the Message. + * @return : the Boolean. + */ + public boolean getBool( int id_src, int _tag ) + { + if( id_src >= 0 && id_src < groupsize + 1 ) + { + MessageBool mes = (MessageBool) ml.searchMsg( id_src, _tag ) ; + + if( mes != null ) + { + return mes.getBool() ; + } + } + + return false ; + } + + /** + * Returns the tabular of Booleans from the id id_src, with the tag _tag. + * Search in the MessageList if there is corresponding Message. + * @param id_src : index of the sender. + * @param _tag : tag of the Message. + * @return : the tabular of Booleans. + */ + public boolean[] getTabBool( int id_src, int _tag ) + { + if( id_src >= 0 && id_src < groupsize + 1 ) + { + MessageTabBool mes = (MessageTabBool) ml.searchMsg( id_src, _tag ) ; + + if( mes != null ) + { + return mes.getTabBool() ; + } + } + + return null ; + } + + + /***************************************/ + /** Getting Objects - Waiting methods **/ + /***************************************/ + + /** + * Returns the Integer from the id id_src, with the tag _tag. + * Search in the MessageList if there is corresponding Message. + * Wait until a corresponding Message comes. + * @param id_src : index of the sender. + * @param _tag : tag of the Message. + * @return : the Integer. + */ + public int getIntBl( int id_src, int _tag ) + { + if( id_src >= 0 && id_src < groupsize + 1 ) + { + MessageInt mes = null ; + + while( mes == null ) + { + mes = (MessageInt) ml.searchMsg( id_src, _tag ) ; + + if( mes == null ) + synchronized( lockint ) + { + try { + lockint.wait() ; + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + return mes.getInt() ; + } + + return 0 ; + } + + /** + * Returns the tabular of Integers from the id id_src, with the tag _tag. + * Search in the MessageList if there is corresponding Message. + * Wait until a corresponding Message comes. + * @param id_src : index of the sender. + * @param _tag : tag of the Message. + * @return : the tabular of Integers. + */ + public int[] getTabIntBl( int id_src, int _tag ) + { + if( id_src >= 0 && id_src < groupsize + 1 ) + { + MessageTabInt mes = null ; + + while( mes == null ) + { + mes = (MessageTabInt) ml.searchMsg( id_src, _tag ) ; + + if( mes == null ) + synchronized( locktint ) + { + try { + locktint.wait() ; + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + return mes.getTabInt() ; + } + + return null ; + } + + /** + * Returns the Double from the id id_src, with the tag _tag. + * Search in the MessageList if there is corresponding Message. + * Wait until a corresponding Message comes. + * @param id_src : index of the sender. + * @param _tag : tag of the Message. + * @return : the Double. + */ + public double getDoubleBl( int id_src, int _tag ) + { + if( id_src >= 0 && id_src < groupsize + 1 ) + { + MessageDouble mes = null ; + + while( mes == null ) + { + mes = (MessageDouble) ml.searchMsg( id_src, _tag ) ; + + if( mes == null ) + synchronized( lockdouble ) + { + try { + lockdouble.wait() ; + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + return mes.getDouble() ; + } + + return 0 ; + } + + /** + * Returns the tabular of Doubles from the id id_src, with the tag _tag. + * Search in the MessageList if there is corresponding Message. + * Wait until a corresponding Message comes. + * @param id_src : index of the sender. + * @param _tag : tag of the Message. + * @return : the tabular of Doubles. + */ + public double[] getTabDoubleBl( int id_src, int _tag ) + { + if( id_src >= 0 && id_src < groupsize + 1 ) + { + MessageTabDouble mes = null ; + + while( mes == null ) + { + mes = (MessageTabDouble) ml.searchMsg( id_src, _tag ) ; + + if( mes == null ) + { + synchronized( locktdouble ) + { + try { + locktdouble.wait() ; + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + return mes.getTabDouble() ; + } + + return null ; + } + + /** + * Returns the Boolean from the id id_src, with the tag _tag. + * Search in the MessageList if there is corresponding Message. + * Wait until a corresponding Message comes. + * @param id_src : index of the sender. + * @param _tag : tag of the Message. + * @return : the Boolean. + */ + public boolean getBoolBl( int id_src, int _tag ) + { + if( id_src >= 0 && id_src < groupsize + 1 ) + { + MessageBool mes = null ; + + while( mes == null ) + { + mes = (MessageBool) ml.searchMsg( id_src, _tag ) ; + + if( mes == null ) + synchronized( lockbool ) + { + try { + lockbool.wait() ; + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + return mes.getBool() ; + } + + return false ; + } + + /** + * Returns the tabular of Booleans from the id id_src, with the tag _tag. + * Search in the MessageList if there is corresponding Message. + * Wait until a corresponding Message comes. + * @param id_src : index of the sender. + * @param _tag : tag of the Message. + * @return : the tabular of Booleans. + */ + public boolean[] getTabBoolBl( int id_src, int _tag ) + { + if( id_src >= 0 && id_src < groupsize + 1 ) + { + MessageTabBool mes = null ; + + while( mes == null ) + { + mes = (MessageTabBool) ml.searchMsg( id_src, _tag ) ; + + if( mes == null ) + { + synchronized( locktbool ) + { + try { + locktbool.wait() ; + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + return mes.getTabBool() ; + } + + return null ; + } + + + /** + * + * @author miquee + * + */ + class ServerSock extends Thread + { + protected boolean ok ; + protected boolean exec ; + + public ServerSock( ) + { + start() ; + } + + + public void run() + { + ServerSocket s = null ; + ok = false ; + exec = true ; + + /** Determination of the address and port to listen **/ + port = 2000 ; + + while( ! ok ) + { + ok = true ; + try { + s = new ServerSocket( port ); + } catch (IOException e1) { + ok = false ; + port++ ; + + if( port == 3001 ) + { + System.out.println( "Unable to bind port !!" ); + System.exit(1) ; + } + + System.out.println( "Binding address already in use !" ) ; + } + } + + System.out.println( "I am AILObject " + myId + " with address " + url +" on port " + port ) ; + + try { + while( exec ) + { + Socket soc = new Socket() ; + + soc = s.accept() ; + + soc.setReceiveBufferSize( 2048 * 2048 ) ; + soc.setTcpNoDelay( false ) ; + soc.setSoLinger( false, 1 ) ; + soc.setReuseAddress( true ) ; + + new ServClientSock( soc ) ; + } + + } catch (Exception e) { + e.printStackTrace() ; + } + } + + public void halt() + { + exec = false ; + } + + + class ServClientSock extends Thread + { + private BufferedInputStream in = null ; + private Socket client = null ; + + public ServClientSock( Socket s ) throws IOException + { + client = s ; + + start() ; + } + + + public void run() + { + /** Receiving protocol : + * -------------------- + * receiving integer which represents the id_src + * receiving tag + * receiving integer to indicate the type of data + * receiving data + */ + + try { + in = new BufferedInputStream( client.getInputStream() ) ; + + ObjectInputStream input = new ObjectInputStream( in ) ; + + Message m = (Message) input.readObject() ; + + ml.addMessage( m.getSender(), m ) ; + + try { + input.close() ; + in.close() ; + client.close() ; + } catch (IOException e) { + e.printStackTrace(); + } + + switch( m.getType() ) + { + case 0 : + synchronized( lockint ) + { + lockint.notifyAll(); + } ; break ; + + case 1 : + synchronized( locktint ) + { + locktint.notifyAll(); + } ; break ; + + case 2 : + synchronized( lockdouble ) + { + lockdouble.notifyAll(); + } ; break ; + + case 3 : + synchronized( locktdouble ) + { + locktdouble.notifyAll(); + } ; break ; + + case 4 : + synchronized( lockbool ) + { + lockbool.notifyAll(); + } ; break ; + + case 5 : + synchronized( locktbool ) + { + locktbool.notifyAll(); + } ; break ; + + default: ; + } + + } catch (IOException e) { + e.printStackTrace(); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + + + } + + } + } +} + + +/** La programmation est un art, respectons ceux qui la pratiquent !! **/ diff --git a/src/and/AIL/Convergence.java b/src/and/AIL/Convergence.java new file mode 100644 index 0000000..b9b311f --- /dev/null +++ b/src/and/AIL/Convergence.java @@ -0,0 +1,190 @@ +package and.AIL ; + +import java.io.Serializable; +import org.objectweb.proactive.api.PAGroup; +import org.objectweb.proactive.core.group.Group; + +/** + * Class which manages the convergence of a problem. + * @author Sébastien Miquée + * @version 3.0 + */ +public class Convergence implements Serializable +{ + /** Local variables **/ + private static final long serialVersionUID = 1L ; + private boolean total[] ; + private short nbconv[] ; + private short taille ; + private boolean conv ; + private Group as ; + private boolean fin ; + private short attente ; + private short maxIterBeforeConv ; + private short __tag = 999 ; + + /** + * Empty constructor for the stub generation. + */ + public Convergence() + { + } + + /** + * Constructor. + * @param nb : number of worker. + */ + public Convergence( short nb ) + { + taille = nb ; + total = new boolean[ taille ] ; + nbconv = new short[ taille ] ; + conv = false ; + fin = false ; + maxIterBeforeConv = 0 ; + attente = taille ; + as = null ; + + for( short i = 0 ; i < taille ; i++ ) + { + nbconv[ i ] = 0 ; + } + } + + /** + * Set the ALPA group, in order to communicate with workers. + * @param group : AALPA group. + */ + public void majGroup( AILObject group ) + { + as = PAGroup.getGroup( group ) ; + } + + /** + * Method to detect convergence in asynchronous mode. + * @param id : rank of the worker. + * @param b : convergence detected by the worker. + */ + public synchronized void convergeAsync( short id, boolean b ) + { + if( ! conv ) + { + if( b ) + { + if( maxIterBeforeConv != 0 ) + nbconv[ id ]++ ; + } else { + nbconv[ id ] = 0 ; + } + + if( nbconv[ id ] == maxIterBeforeConv ) + { + total[ id ] = b ; + nbconv[ id ] = 0 ; + } + + boolean tmp = true ; + + for( short i = 0 ; i < taille ; i++ ) + { + tmp = tmp && total[i] ; + } + + conv = tmp ; + } + + if( as != null ) + { + as.get( id ).recvObject( taille, conv, __tag ) ; + } + + } + + /** + Method to detect convergence in synchronous mode. + * @param id : rank of the worker. + * @param b : convergence detected by the worker. + */ + public synchronized void convergeSync( short id, boolean b ) + { + if( ! conv ) + { + total[ id ] = b ; + + attente-- ; + + if( attente == 0 ) + { + boolean tmp = true ; + + for( short i = 0 ; i < taille ; i++ ) + { + tmp = tmp && total[i] ; + } + + conv = tmp ; + + for( short i = 0 ; i < taille ; i++ ) + { + as.get( i ).recvObject( taille, conv, __tag ) ; + } + + attente = taille ; + } + + } else { + as.get( id ).recvObject( taille, conv, __tag ) ; + } + } + + /** + * Initialization of the convergence. + */ + public void init() + { + total = new boolean[ taille ] ; + nbconv = new short[ taille ] ; + conv = false ; + attente = taille ; + + for( short i = 0 ; i < taille ; i++ ) + { + nbconv[ i ] = 0 ; + } + } + + /** + * Sets the number of time the convergence should be detected by a worker. + * (it is in the way to avoid the yo-yo effect) + * It is used only in asynchronous mode. + * @param _nb + */ + public void setIterBeforeConv( short _nb ) + { + if( _nb >= 0 ) + { + maxIterBeforeConv = _nb ; + } else { + maxIterBeforeConv = 0 ; + } + } + + /** + * Indicates that all workers have stopped. + */ + public void termine() + { + fin = true ; + } + + /** + * Return the status of all workers, to the Main program. + * @return : the status of all workers. + */ + public boolean fin() + { + return fin ; + } +} + +/** La programmation est un art, respectons ceux qui la pratiquent !! **/ diff --git a/src/and/AIL/Message.java b/src/and/AIL/Message.java new file mode 100644 index 0000000..64e682b --- /dev/null +++ b/src/and/AIL/Message.java @@ -0,0 +1,39 @@ +package and.AIL ; + +import java.io.Serializable; + +/** + * Class which contains the Object of the message (integer, double, tabular...) + * and the tag associated to this message. + * @author Sébastien Miquée + * @version 3.0 + */ +public abstract class Message implements Serializable +{ + /** + * + */ + private static final long serialVersionUID = 1L; + + protected short tag ; + + protected short sender ; + + protected short type ; + + /*************/ + /** Getters **/ + /*************/ + + /** + * Return the tag of the message. + * @return the tag of the message + */ + public int getTag() { return tag ; } + + public int getSender() { return sender ; } + + public int getType() { return type ; } +} + +/** La programmation est un art, respectons ceux qui la pratiquent !! **/ diff --git a/src/and/AIL/MessageBool.java b/src/and/AIL/MessageBool.java new file mode 100644 index 0000000..4abd165 --- /dev/null +++ b/src/and/AIL/MessageBool.java @@ -0,0 +1,57 @@ +package and.AIL ; + +/** + * Class which contains the Object of the message (integer, double, tabular...) + * and the tag associated to this message. + * @author Sébastien Miquée + * @version 3.0 + */ +public class MessageBool extends Message +{ + /** + * + */ + private static final long serialVersionUID = 1L; + /** Local variables **/ + private boolean bool ; + + /** + * Empty constructor for the Stub generation. + */ + public MessageBool() {} + + /** + * Constructor. + * For Message which contains a Boolean. + * @param _tag : tag of the Message. + * @param _o : the Boolean object. + */ + public MessageBool( int _id, int _tag, boolean _o ) + { + super() ; + sender = (short) _id ; + tag = (short) _tag ; + bool = _o ; + type = 4 ; + } + + public MessageBool( int _tag, boolean _o ) + { + super() ; + sender = -1 ; + tag = (short)_tag ; + bool = _o ; + type = 4 ; + } + + /** + * Returns the boolean value. + * @return : the boolean value of the Message. + */ + public boolean getBool() + { + return bool ; + } +} + +/** La programmation est un art, respectons ceux qui la pratiquent !! **/ diff --git a/src/and/AIL/MessageDouble.java b/src/and/AIL/MessageDouble.java new file mode 100644 index 0000000..334b1b4 --- /dev/null +++ b/src/and/AIL/MessageDouble.java @@ -0,0 +1,57 @@ +package and.AIL ; + +/** + * Class which contains the Object of the message (integer, double, tabular...) + * and the tag associated to this message. + * @author Sébastien Miquée + * @version 3.0 + */ +public class MessageDouble extends Message +{ + /** + * + */ + private static final long serialVersionUID = 1L; + /** Local variables **/ + private double d ; + + /** + * Empty constructor for the Stub generation. + */ + public MessageDouble() {} + + /** + * Constructor. + * For Message which contains a Double. + * @param _tag : tag of the Message. + * @param _o : the Double object. + */ + public MessageDouble( int _id, int _tag, double _o ) + { + super() ; + sender = (short)_id ; + tag = (short)_tag ; + d = _o ; + type = 2 ; + } + + public MessageDouble( int _tag, double _o ) + { + super() ; + sender = -1 ; + tag = (short)_tag ; + d = _o ; + type = 2 ; + } + + /** + * Returns the double value. + * @return : the double value of the Message. + */ + public double getDouble() + { + return d ; + } +} + +/** La programmation est un art, respectons ceux qui la pratiquent !! **/ diff --git a/src/and/AIL/MessageInt.java b/src/and/AIL/MessageInt.java new file mode 100644 index 0000000..8426437 --- /dev/null +++ b/src/and/AIL/MessageInt.java @@ -0,0 +1,57 @@ +package and.AIL ; + +/** + * Class which contains the Object of the message (integer, double, tabular...) + * and the tag associated to this message. + * @author Sébastien Miquée + * @version 3.0 + */ +public class MessageInt extends Message +{ + /** + * + */ + private static final long serialVersionUID = 1L; + /** Local variables **/ + private int i ; + + /** + * Empty constructor for the Stub generation. + */ + public MessageInt() {} + + /** + * Constructor. + * For Message which contains an Integer. + * @param _tag : tag of the Message. + * @param _o : the Integer object. + */ + public MessageInt( int _id, int _tag, int _o ) + { + super() ; + sender = (short)_id ; + tag = (short)_tag ; + i = _o ; + type = 0 ; + } + + public MessageInt( int _tag, int _o ) + { + super() ; + sender = -1 ; + tag = (short)_tag ; + i = _o ; + type = 0 ; + } + + /** + * Returns the integer value. + * @return : the tabular of doubles of the Message. + */ + public int getInt() + { + return i ; + } +} + +/** La programmation est un art, respectons ceux qui la pratiquent !! **/ diff --git a/src/and/AIL/MessageList.java b/src/and/AIL/MessageList.java new file mode 100644 index 0000000..57be578 --- /dev/null +++ b/src/and/AIL/MessageList.java @@ -0,0 +1,112 @@ +package and.AIL ; + +import java.util.ArrayList; + +/** + * Class which contains and manages a messages list. + * @author Sébastien Miquée + * @version 3.0 + */ +public class MessageList +{ + /** Local variables **/ + private ArrayList tab[] ; + private int taille ; + + /** + * Empty constructor for stub generation. + */ + public MessageList() + { + } + + /** + * Constructor. + * @param nb : size of the list. + */ + @SuppressWarnings( "unchecked" ) + public MessageList( Integer nb ) + { + taille = nb.intValue() ; + + tab = new ArrayList[ taille ] ; + for( int i = 0 ; i < taille ; i++ ) + { + tab[i] = new ArrayList() ; + } + } + + /** + * Search and returns, if it exists, a Message in the list _noList + * with the tag _tag. Returns null if there is no Message. + * @param _noList : index of the list. + * @param _tag : the tag of the Message. + * @return : the Message. + */ + public synchronized Message searchMsg( int _noList, int _tag ) + { + if( _noList >= 0 && _noList < taille ) + { + int pos = searchPos( _noList, _tag ) ; + + if( pos != -1 ) + { + return tab[ _noList ].remove( pos ) ; + } + } + + return null ; + } + + /** + * Add a Message _mes in the list of index _noList. + * @param _noList : index of the list. + * @param _mes : Message to add. + */ + public synchronized void addMessage( int _noList, Message _mes ) + { + if( _noList >= 0 && _noList < taille ) + { + int _t = _mes.getTag() ; + /** Search if message exists **/ + int pos = searchPos( _noList, _t ) ; + + if( pos != -1 ) + { + tab[ _noList ].set( pos, _mes ) ; + } else { + /** Add the message **/ + tab[ _noList ].add( _mes ) ; + } + } + } + + + /** + * Search the position of a Message with a specific tag _tag. + * If it doesn't exist, -1 will be returned. + * @param id : index of the sender. + * @param tag : tag of the Message. + * @return : the position in the list. + */ + private int searchPos( int _id, int _tag ) + { + int t = tab[ _id ].size() ; + + for( int i = 0 ; i < t ; i++ ) + { + try { + if( tab[ _id ].get( i ).getTag() == _tag ) + { + return i ; + } + } catch( Exception e ) { + return -1 ; + } + } + + return -1 ; + } +} + +/** La programmation est un art, respectons ceux qui la pratiquent !! **/ diff --git a/src/and/AIL/MessageTabBool.java b/src/and/AIL/MessageTabBool.java new file mode 100644 index 0000000..a034fde --- /dev/null +++ b/src/and/AIL/MessageTabBool.java @@ -0,0 +1,57 @@ +package and.AIL ; + +/** + * Class which contains the Object of the message (integer, double, tabular...) + * and the tag associated to this message. + * @author Sébastien Miquée + * @version 3.0 + */ +public class MessageTabBool extends Message +{ + /** + * + */ + private static final long serialVersionUID = 1L; + /** Local variables **/ + private boolean[] tabBool ; + + /** + * Empty constructor for the Stub generation. + */ + public MessageTabBool() {} + + /** + * Constructor. + * For Message which contains a tabular of Booleans. + * @param _tag : tag of the Message. + * @param _o : the Boolean object. + */ + public MessageTabBool( int _id, int _tag, boolean[] _o ) + { + super() ; + sender = (short)_id ; + tag = (short)_tag ; + tabBool = _o ; + type = 5 ; + } + + public MessageTabBool( int _tag, boolean[] _o ) + { + super() ; + sender = -1 ; + tag = (short)_tag ; + tabBool = _o ; + type = 5 ; + } + + /** + * Returns the boolean value. + * @return : the boolean value of the Message. + */ + public boolean[] getTabBool() + { + return tabBool ; + } +} + +/** La programmation est un art, respectons ceux qui la pratiquent !! **/ diff --git a/src/and/AIL/MessageTabDouble.java b/src/and/AIL/MessageTabDouble.java new file mode 100644 index 0000000..09fc789 --- /dev/null +++ b/src/and/AIL/MessageTabDouble.java @@ -0,0 +1,57 @@ +package and.AIL ; + +/** + * Class which contains the Object of the message (integer, double, tabular...) + * and the tag associated to this message. + * @author Sébastien Miquée + * @version 3.0 + */ +public class MessageTabDouble extends Message +{ + /** + * + */ + private static final long serialVersionUID = 1L; + /** Local variables **/ + private double[] tabd ; + + /** + * Empty constructor for the Stub generation. + */ + public MessageTabDouble() {} + + /** + * Constructor. + * For Message which contains a Double. + * @param _tag : tag of the Message. + * @param _o : the tabular of Doubles. + */ + public MessageTabDouble( int _id, int _tag, double[] _o ) + { + super() ; + sender = (short)_id ; + tag = (short)_tag ; + tabd = _o ; + type = 3 ; + } + + public MessageTabDouble( int _tag, double[] _o ) + { + super() ; + sender = -1 ; + tag = (short)_tag ; + tabd = _o ; + type = 3 ; + } + + /** + * Returns the tabular of doubles. + * @return : the integer value of the Message. + */ + public double[] getTabDouble() + { + return tabd ; + } +} + +/** La programmation est un art, respectons ceux qui la pratiquent !! **/ diff --git a/src/and/AIL/MessageTabInt.java b/src/and/AIL/MessageTabInt.java new file mode 100644 index 0000000..4b9da50 --- /dev/null +++ b/src/and/AIL/MessageTabInt.java @@ -0,0 +1,57 @@ +package and.AIL ; + +/** + * Class which contains the Object of the message (integer, double, tabular...) + * and the tag associated to this message. + * @author Sébastien Miquée + * @version 3.0 + */ +public class MessageTabInt extends Message +{ + /** + * + */ + private static final long serialVersionUID = 1L; + /** Local variables **/ + private int[] tabi ; + + /** + * Empty constructor for the Stub generation. + */ + public MessageTabInt() {} + + /** + * Constructor. + * For Message which contains a tabular of Integers. + * @param _tag : tag of the Message. + * @param _o : the tabular of Integers. + */ + public MessageTabInt( int _id, int _tag, int[] _o ) + { + super() ; + sender = (short)_id ; + tag = (short)_tag ; + tabi = _o ; + type = 1 ; + } + + public MessageTabInt( int _tag, int[] _o ) + { + super() ; + sender = -1 ; + tag = (short)_tag ; + tabi = _o ; + type = 1 ; + } + + /** + * Returns the tabular of integers. + * @return : the tabular of integers of the Message. + */ + public int[] getTabInt() + { + return tabi ; + } +} + +/** La programmation est un art, respectons ceux qui la pratiquent !! **/ -- 2.20.1